Вот нашёл код самого индикатора под Wealth-Lab.
function AlphaSeries( Series: Integer; StdDevBars: Integer; LinearRegBars: Integer ): integer;
begin
var Bar: integer;
var sName: string;
var Value: float;
var Pn1: float; //P(n+1) : predicted price of tomorrow
var DeltaP: integer;//Series of price changes
var DeltaPn: float; //Difference of predicted to yesterday's price
var StDev: integer; //Series of standard deviation of price changes
sName := 'Alpha(' + GetDescription( Series ) + ',' + IntToStr( StdDevBars ) + ',' + IntToStr( LinearRegBars ) + ')';
Result := FindNamedSeries( sName );
if Result >= 0 then
Exit;
Result := CreateNamedSeries( sName );
//Calculate the Delta for all bars
DeltaP := SubtractSeries( Series, OffsetSeries( Series, -1 ));
StDev := StdDevSeries( DeltaP, StdDevBars );
for Bar := Int(Max(StdDevBars, LinearRegBars)) to BarCount - 1 do
begin
//Filling the indicator with values
Pn1 := LinearRegLine(Series, Bar - LinearRegBars + 1, Bar, Bar + 1 ); //Predict value of tomorrow
DeltaPn := Pn1 - PriceClose(Bar); //Difference of predicted value to today's value
if @StDev[Bar] <> 0 then
Value:= DeltaPn / @StDev[Bar]
else
Value := 0;
SetSeriesValue( Bar, Result, Value );
end;
end;
function Alpha( Bar: integer; Series: Integer; StdDevBars: Integer; LinearRegBars: Integer ): float;
begin
Result := GetSeriesValue( Bar, AlphaSeries( Series, StdDevBars, LinearRegBars ) );
end;
Вначале вычисляется стандартное отклонение (stDev) от однопериодного моментуума (Close[i]-Close[i-1]).
Затем вычисляется линия регрессии по формуле (mx+b). Затем линия регрессии делится на стандартное отклонение от моментуума.
Индикатор имеет три параметра extern: 1. Close, либо High, Либо Low. 2. Период для стандартного отклонения 3. Период для линии регрессии
Вначале вычисляется стандартное отклонение (stDev) от однопериодного моментуума (Close[i]-Close[i-1]).
Затем вычисляется линия регрессии по формуле (mx+b). Затем линия регрессии делится на стандартное отклонение от моментуума.
Вызывает вопросы только этот момент - как вычисляется линия регрессии. Все остальное понятно.
По яндексу нашёл линию регрессии от mql... Попробовал написать индикатор на mq под эту линию регрессии, только возникли 2 проблемы: 1. Шкала изменяется не совсем так, как нарисовано в Wealth-Lab; 2. При изменении StdDevBars
отрисовка индикатора не изменяется. А так, в принципе, похоже на оригинал...
Вот код:
//+------------------------------------------------------------------+ //| Alpha.mq4 | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DarkViolet //---- input parameters extern int Series=0; //Series: 0-Close; 1- High; 2- Low extern int StdDevBars=21; extern int LinearRegBars=21; //---- buffers double LRLBuffer[]; double tempBuffer[]; double tempBuffer2[]; int shift=0; int n=0; double sumx=0, sumy=0, sumxy=0, sumx2=0, sumy2=0; double m=0, yint=0, r=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(3); //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,LRLBuffer); SetIndexBuffer(1,tempBuffer); SetIndexBuffer(2,tempBuffer2); IndicatorDigits(Digits); if(LinearRegBars < 5) LinearRegBars=5; IndicatorShortName("Alpha ("+StdDevBars+", "+LinearRegBars+")"); SetIndexDrawBegin(0,LinearRegBars+2); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+4); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Linear Regression Line | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); if(counted_bars<0) counted_bars=0; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; int i; while(i>=0) { if (Series == 1) { tempBuffer[i]=High[i]-High[i+1]; } else if (Series == 2) { tempBuffer[i]=Low[i]-Low[i+1]; } else { tempBuffer[i]=Close[i]-Close[i+1]; } i--; } for(i=0; i<Bars-counted_bars; i++) { tempBuffer2[i]=iStdDevOnArray(tempBuffer,Bars,StdDevBars,0,MODE_SMA,i)-100; } for(int shift=limit-1; shift>=0; shift--) { sumx=0; sumy=0; sumxy=0; sumx2=0; sumy2=0; for(n=0; n<=LinearRegBars-1; n++) { sumx=sumx + n; if (Series == 1) { sumy=sumy + High[shift + n]-High[shift+1 + n]; sumxy=sumxy + n * (High[shift + n]-High[shift+1 + n]); sumy2=sumy2 + High[shift + n] * High[shift + n]; } else if (Series == 2) { sumy=sumy + Low[shift + n]-Low[shift+1 + n]; sumxy=sumxy + n * (Low[shift + n]-Low[shift+1 + n]); sumy2=sumy2 + Low[shift + n] * Low[shift + n]; } else { sumy=sumy + Close[shift + n]-Close[shift+1 + n]; sumxy=sumxy + n * (Close[shift + n]-Close[shift+1 + n]); sumy2=sumy2 + Close[shift + n] * Close[shift + n]; } sumx2=sumx2 + n * n; } m=(LinearRegBars*sumxy-sumx*sumy)/(LinearRegBars*sumx2-sumx*sumx); yint=(sumy+m*sumx)/LinearRegBars; r=(LinearRegBars*sumxy-sumx*sumy)/MathSqrt((LinearRegBars*sumx2-sumx*sumx)*(LinearRegBars*sumy2-sumy*sumy)); if (tempBuffer2[shift]!= 0) LRLBuffer[shift]=(yint-m*LinearRegBars)/tempBuffer2[shift]; else LRLBuffer[shift]=0; } return(0); } //+------------------------------------------------------------------+
По яндексу нашёл линию регрессии от mql... Попробовал написать индикатор на mq под эту линию регрессии, только возникли 2 проблемы: 1. Шкала изменяется не совсем так, как нарисовано в Wealth-Lab; 2. При изменении StdDevBars
отрисовка индикатора не изменяется. А так, в принципе, похоже на оригинал...
Вот код:
Пожалуйста, пользуйтесь для вставки кода штатными средствами встроенного редактора:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужен код индикатора в формате .mq4. Исходные коды под Tradestation, Wealth-Lab, AmiBroker находятся здесь: http://www.working-money.com/Documentation/FEEDbk_docs/Archive/062006/TradersTips/TradersTips.html