Автор |
Сообщение |
jarikk
Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань
|
подскажите, как в стопе, написанном вручную, задать исполнение строго по цене стопа
типа exitatstop=1 во встроенных стопах))
Код: |
g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
stopLevel=(1-g);
pos = 0;
Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
if (Buy[i-1])
{
pos[i] = 1;
}
else
{pos[i]=pos[i-1];
}
// уровень стопа
if (pos[i] == 1)
{
Buy[i] = 0;
stop[i] = C[i-1]*stopLevel;
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
{
Sell[i]=0;
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
|
|
_________________ per aspera ad astra... |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не совсем верно написано.
В коде стоп срабатывает только если закрытие произошло ниже уровня стопа.
Код: |
if(pos[i] == 1)
{
if(C[i] < stop[i])
{
Sell[i] = 1;
pos = 0;
}
|
В таком случае стоп может исполняться тольоко по цене закрытия. Если надо чтобы стоп срабатывал по уровню, то надо исправить кодслед. образом.
Код: |
if(pos[i] == 1)
{
if(L[i] < stop[i])
{
Sell[i] = 1;
pos = 0;
}
|
Цену сделки можно задавать. В случае sell для этого надо указать SellPrice.
В данном случае примерно так
Код: |
if(pos[i] == 1)
{
if(L[i] < stop[i])
{
Sell[i] = 1;
SellPrice[i] = stop[i];
pos = 0;
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
BabyBear писал(а): |
pos[i] = 0; |
А зачем переменную pos тащить массивом? Можно и так (без [i]). Единственное неудобство в том, что нельзя потом проверить где какое значение было |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Не надо тащить. Но и в цикле писать Pos=0 нинада |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Почему? Я всегда так пишу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
000 писал(а): |
Почему? Я всегда так пишу. |
Код: |
g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
stopLevel=(1-g);
pos = 0;
Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
if (Buy[i-1])
{
pos[i] = 1;
}
else
{pos[i]=pos[i-1];
}
// уровень стопа
if (pos[i] == 1)
{
Buy[i] = 0;
stop[i] = C[i-1]*stopLevel;
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
// на графике стрелки есть, а pos == 0
pos = 0;
}
}
else
{
Sell[i]=0;
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
// я добавил.
Plot(pos,"",colorBlack);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10); |
|
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А, вон что... Не посмотрел, что в начале цикла используется массив pos, а в конце он почему то без индекса. Действительно непорядок.
Но можно было его с самого начала писать без [i] и использовать не как массив, а как переменную |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
А я не понял ...
Уважаемый 000 или BabyBear, проясните плз поподробнее |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Подробнее. Когда мы запоминаем в позиции система или нет (при помощи pos) можно это записать в массив. Тогда немного больше писанины в коде, но зато потом можно посмотреть историю на каком баре система была в позе, а на каком нет. Код получится такой
Код: |
g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
stopLevel=(1-g);
pos = 0;
Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
if (Buy[i-1])
{
pos[i] = 1;
// на баре входа стоп не проверяем.
// Имеется в виду, что вход по закрытию
}
else
{
pos[i]=pos[i-1];
}
// уровень стопа
if (pos[i] == 1)
{
Buy[i] = 0;
stop[i] = C[i-1]*stopLevel;
if(stop[i] < stop[i-1])
{
stop[i]=stop[i-1];
}
}
else
{
stop[i]=Null;
}
// активизация стопа
if(pos[i] == 1)
{
if(L[i] < stop[i])
{
Sell[i] = 1;
pos[i] = 0;
}
}
else
{
Sell[i]=0;
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
// я добавил.
Plot(pos,"",colorBlack);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
|
или можно запоминать пзицию в переменную. Тогда писанины чуть меньше, но нельзя проверить на истории на каком баре система была в позиции а на каком нет. Это плохо при проверке правильности написания кода.
Код: |
g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
stopLevel=(1-g);
pos = 0;
Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
if (Buy[i-1])
{
pos = 1;
}
// уровень стопа
if (pos == 1)
{
Buy[i] = 0;
stop[i] = C[i-1]*stopLevel;
if(stop[i] < stop[i-1])
{
stop[i]=stop[i-1];
}
}
else
{
stop[i]=Null;
}
// активизация стопа
if(pos == 1)
{
if(C[i] < stop[i])
{
Sell[i] = 1;
pos = 0;
}
}
else
{
Sell[i]=0;
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Забыл. Но его в самом первом коде и небыло... (поэтому забыл) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если SellPrice явно не указан, то сделка будет посчитана по "регулярной" цене (обычной цене исполнения сделок заданной в настройках АА на закладке Trades) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|