Hardez
Зарегистрирован: 28.01.2009
Сообщения: 6
|
Помогите пож-та разобраться с циклом доливки/отливки. SigscaleOut вроде нормально работает, а вот SigscaleIn как то не радует...
Гляньте плиз код, может выявите ошибки. Или может у когото есть правильно работающий код с обеими функциями IN|OUT?
Смотрите картинку выше, там все в принципе расписано.
Код: |
PDS=100;
Spred=O;
SMA=MA(Spred,pds);
Range=2*ATR(PDS/2);
MAH1=SMA-range;
MAH2=SMA-2*range;
LB0=O>=SMA AND Ref(O,-1)<SMA;
LB1=O<=MAH1 AND Ref(O,-1)>MAH1;// делаем покупки против падающего тренда при преодалении уровней mah1 mah2
LB2=O<=MAH2 AND Ref(O,-1)>MAH2;
Buy1 = LB1 OR LB2;
HS0=O>SMA AND Ref(O,-1)<SMA;
HS1=O>=MAH1 AND Ref(O,-1)<MAH1;// уменьшаем позу при возвращении к sma и проходе уровней в обратную сторону
HS2=O>=MAH2 AND Ref(O,-1)<MAH2;
//Sell = HS1 OR HS2;
Sell1= HS0;
OUT=LB0 ;
BuyPrice=SellPrice=O;
Short=Cover=0;
Hlev = 0;
exit = 0;
for( i =0; i < BarCount ; i++ )
{
if( Hlev == 0 AND LB1 [i] AND SMA[i]>0) // без первоначяльной позы проходим 1-й уровень
{
Buy [i]=1; // входим в лонг в контртренд
Hlev = 1; // запоминаем новое положение в щечике уровней
}
else if( Hlev == 0 AND LB2 [i] AND SMA[i]>0 ) // без первоначяльной позы проходим 2-й уровень
{
Buy [i]=1;
Hlev = 2;
}
if( Hlev == 1 AND Sell1 [i] ) // После преодаления 1-го уровня, возврат к SMA (0-й уровень) и след-но выход из позы
{
exit=1; // выход из позицыи
Hlev=0;
}
else if( Hlev==1 AND LB2 [i] ) // переход в позе с первого уровня на второй
{
Buy [i] = sigScaleIn; // наращиваем лонг
Hlev = 2; // учитываем перехрод в щетчике
}
if( Hlev==2 AND HS1 [i]) // возврат со 2-го уровня на 1-ый
{
Buy[ i ] = sigScaleOut; // уменьшаем позу
Hlev = 1; // понижаем щетчик
}
else if( Hlev == 2 AND Sell1 [i]) // гэп спреда со второго уровня на 0-й (SMA)
{
exit=1;
Hlev=0;
}
if( exit == 1 )
{
Buy[ i ] = 0;
Sell[ i ] = 1 ;
exit = 0;
Hlev=0;
}
}
SetPositionSize( 50, spsPercentOfEquity );
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut ) ); // scale out 50% of position
SetPositionSize( 25, spsPercentOfEquity * ( Buy == sigScaleIn ) );
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", colorBlack, styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
PlotShapes(IIf(Sell1,shapeSmallCircle+shapePositionAbove,shapeNone) ,colorCustom12,Graph0,SellPrice,0);
//PlotShapes(IIf(Cover,shapeSmallCircle,shapeNone) ,colorGreen,Graph0,CoverPrice,0);
//PlotShapes(IIf(Short,shapeHollowSmallDownTriangle,shapeNone) ,colorRed,Graph0,ShortPrice,0);
PlotShapes(IIf(Buy1,shapeHollowSmallUpTriangle,shapeNone) ,colorAqua,Graph0,BuyPrice,0);
Plot( SMA, "\n"+"SMA", colorBlue, styleLine );
Plot( MAH1, "\n"+"MAH1", colorRed, styleLine );
Plot( MAH2, "\n"+"MAH2", colorRed, styleLine+styleDashed ); |
|
|
|