Автор |
Сообщение |
jarikk
Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань
|
хочу реализовать такой стоп
чтобы от максимального клоуз после входа в лонг от него отсчитывалось величина 2ATR и если клоуз пересекает уровень, срабатывал стоп
в случае с шортом наоборот
но что то выходы осуществляются некорректно. в чем дело, не могу понять
Код: |
RoundLotSize = 1;
MarginDeposit = 1;
PositionSize = 1;
Cond1=EMA(Close,100)>EMA(Close,200);
Cond2=EMA(Close,100)<EMA(Close,200);
Cond3=ADX(18)> Ref(ADX(18),-1);
Cond4=PDI(18)>MDI(18);
Cond5=PDI(18)<MDI(18);
Buy=Cond1 AND Cond3 AND Cond4;
stoplong=(HHV(Close,BarsSince(Buy))-2*ATR(20));
Sell=Cross(stoplong,Close);
Short=Cond2 AND Cond3 AND Cond5;
stopshort=(LLV(Close,BarsSince(Short))+2*ATR(20));
Cover=Cross(Close,stopshort);
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell, Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover, Short); |
|
_________________ per aspera ad astra... |
|
Посмотреть профиль Отправить личное сообщение |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
jarikk писал(а): |
хочу реализовать такой стоп
чтобы от максимального клоуз после входа в лонг от него отсчитывалось величина 2ATR и если клоуз пересекает уровень, срабатывал стоп
в случае с шортом наоборот
но что то выходы осуществляются некорректно. в чем дело, не могу понять
Код: |
RoundLotSize = 1;
MarginDeposit = 1;
PositionSize = 1;
Cond1=EMA(Close,100)>EMA(Close,200);
Cond2=EMA(Close,100)<EMA(Close,200);
Cond3=ADX(18)> Ref(ADX(18),-1);
Cond4=PDI(18)>MDI(18);
Cond5=PDI(18)<MDI(18);
Buy=Cond1 AND Cond3 AND Cond4;
stoplong=(HHV(Close,BarsSince(Buy))-2*ATR(20));
Sell=Cross(stoplong,Close);
Short=Cond2 AND Cond3 AND Cond5;
stopshort=(LLV(Close,BarsSince(Short))+2*ATR(20));
Cover=Cross(Close,stopshort);
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell, Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover, Short); |
|
Ну есть одна идея, но не уверен что стоит ее использовать, т.к. на росте или падении будеш 1 раз входить в соответствующую позу. (да проблема в том, что BarsSince() берет последнюю свечку на которой собюдалось условие Buy, т.к. фильтр у тебя стоит после стопа) попробуй так buy = .... Short = ....... Buy = ExRem(Buy,Short);
Short = ExRem(Short, Buy); потом уже stoplong=(HHV(l,BarsSince(Buy))-2*ATR(20));
Sell=Cross(stoplong,l);
stopshort=(LLV(h,BarsSince(Short))+2*ATR(20));
Cover=Cross(h,stopshort);
Sell = ExRem(Sell,Cover);
Cover = ExRem(Cover, Sell);
Чтото типа этого. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Romoti
Зарегистрирован: 07.06.2008
Сообщения: 17
Откуда: Екатеринбург
|
Как то так, хотя через циклы будет лучше.
Код: |
_SECTION_BEGIN("Выходы от CLOSE ");
// от максимального клоуз после входа в лонг отсчитывается величина 2ATR
// и если клоуз пересекает уровень, срабатывает стоп в случае с шортом наоборот
RoundLotSize = 1;
MarginDeposit = 1;
PositionSize = 1;
PerFast = Optimize( "PerFast " , 10, 10, 100, 10 );
PerSlow = Optimize( "PerSlow " , 20, 20, 200, 10 );
PerADX = Optimize( "PerADX " , 9, 5, 30, 2 );
Cond1 = EMA(C, PerFast ) > EMA(C, PerSlow);
Cond2 = EMA(C, PerFast ) < EMA(C, PerSlow);
Cond3 = ADX (PerADX) > Ref(ADX(PerADX), -1);
Cond4 = PDI(PerADX) > MDI(PerADX);
Cond5 = PDI(PerADX) < MDI(PerADX);
BuyPrice =C;
SellPrice =C;
ShortPrice =C;
CoverPrice =C;
Buy=Cond1 AND Cond3 AND Cond4;
Buymasiv = Flip(Ref(Buy,-1),Cond2 OR Cond5);
BuyStart = Buy AND Ref(Buy,-1)==0 AND Ref(Buymasiv,-1)==0;
stoplong=(HHV(Close,BarsSince(BuyStart ))-2*ATR(20));
Sell=Cross(stoplong,Close);
Short=Cond2 AND Cond3 AND Cond5;
Shortmasiv = Flip(Ref(Short,-1),Cond1 OR Cond4);
ShortStart = Short AND Ref(Short,-1)==0 AND Ref(Shortmasiv,-1)==0;
stopshort=(LLV(Close,BarsSince(Short))+2*ATR(20));
Short= ExRem(Short,Cross(Close,stopshort));
Cover=Cross(Close,stopshort);
Equity(1);
PlotShapes(IIf(BuyStart , shapeHollowStar ,shapeNone),colorLime,0,H,22); //
PlotShapes(IIf(ShortStart ,shapeHollowStar ,shapeNone),colorOrange,0,L,-22);
Plot(C, "", colorBlack , styleBar+ styleThick);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-25);
PlotShapes(IIf(Short, shapeHollowDownArrow,shapeNone),colorRed,0,H,-10);
PlotShapes(IIf(Cover,shapeHollowUpArrow,shapeNone),colorGreen,0,L,-25);
//Plot( ADX(18), "ADX(18)", colorTan , styleLeftAxisScale);
//Plot( PDI(18), "PDI(18)", colorRed , styleLeftAxisScale);
//Plot( MDI(18), "MDI(18)", colorBlue , styleLeftAxisScale);
Plot( IIf(Ref(Flip(Buy,Sell),-1),stoplong,Null) , "stoplong", colorOrange,styleDots+styleNoTitle+styleNoRescale+styleStaircase);
Plot( IIf(Ref(Flip(Short,Cover),-1),stopshort,Null) , "stopshort", colorOrange,styleDots+styleNoTitle+styleNoRescale+styleStaircase);
_SECTION_END(); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
C циклами будет примерно так
Код: |
// от максимального клоуз после входа в лонг отсчитывается величина 2ATR
// и если клоуз пересекает уровень, срабатывает стоп в случае с шортом наоборот
RoundLotSize = 1;
MarginDeposit = 1;
PositionSize = 1;
PerFast = Optimize( "PerFast " , 10, 10, 100, 10 );
PerSlow = Optimize( "PerSlow " , 20, 20, 200, 10 );
PerADX = Optimize( "PerADX " , 9, 5, 30, 2 );
Cond1 = EMA(C, PerFast ) > EMA(C, PerSlow);
Cond2 = EMA(C, PerFast ) < EMA(C, PerSlow);
Cond3 = ADX (PerADX) > Ref(ADX(PerADX), -1);
Cond4 = PDI(PerADX) > MDI(PerADX);
Cond5 = PDI(PerADX) < MDI(PerADX);
pos[PerADX-1]= 0;
stopLevel = 2*ATR(20);
BuyPrice =C;
SellPrice =C;
ShortPrice =C;
CoverPrice =C;
Buy=Cond1 AND Cond3 AND Cond4;
Sell = 0;
Short=Cond2 AND Cond3 AND Cond5;
Cover = 0;
for(i = PerADX; i<BarCount; i ++)
{
// определяем позицию
if(Buy[i-1])
{
pos[i] = 1;
}
else if(Short[i-1])
{
pos[i] = -1;
}
else
{
pos[i] = pos[i-1];
}
// уровень стопа
if(pos[i] == 1)
{
Buy[i] = 0;
stop[i] = C[i-1] - stopLevel[i-1];
if(stop[i] < stop[i-1])
{
stop[i] = stop[i-1];
}
}
else if(pos[i] == -1)
{
Short[i] = 0;
stop[i] = C[i-1] + stopLevel[i-1];
if(stop[i] > stop[i-1])
{
stop[i] = stop[i-1];
}
}
else
{
stop[i] = Null;
}
// активизация стопа
if(pos[i] == 1)
{
if(C[i] < stop[i])
{
Sell[i] = 1;
pos = 0;
}
}
else if(pos[i] == -1)
{
if(C[i] > stop[i])
{
Cover[i] = 1;
pos = 0;
}
}
}
Plot(C, "", colorBlack , styleCandle);
Plot(stop,"", colorRed);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Short, shapeHollowDownArrow,shapeNone),colorRed,0,H,-10);
|
Хотя возможно я и накосячил. Картинка похожа... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
jarikk
Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань
|
да вроде нормально работает, спасибо
а встроенный стоп может быть реализован совместно со стратегией выхода, например, изначальный стоп-лосс в размере 1ATR, а стратегия выхода по пробитию средней?
что то типа того
Код: |
sell=Сlose<EMA(Сlose,10);
ApplyStop=(0,2,ATR(20),0,0); |
|
_________________ per aspera ad astra... |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
а встроенный стоп может быть реализован совместно со стратегией выхода, например, изначальный стоп-лосс в размере 1ATR, а стратегия выхода по пробитию средней?
|
Запросто. Более того. Можно писать несколько разных ApplyStop() и все будут работать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
jarikk
Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань
|
А вот такой стоп как прописать?
К примеру, есть начальный стоп на уровне минус 1ATR от цены покупки. Если цена после покупки прошла вверх 1ATR, тогда стоп-лосс передвигается на уровень покупки. и выход будет осуществляться в дальнейшем либо по этому стопу, либо по стратегии выхода. |
_________________ per aspera ad astra... |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Раз есть условие
Цитата: |
Если цена после покупки прошла вверх 1ATR
|
Значит лучше всего опять через циклы. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|