Автор |
Сообщение |
jarikk
Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань
|
написал вот такой код
после входа в позицию необходимо, чтобы стоп передвигался под лоу свечи, если оно выше чем предыдущее
но почему то не двигается стоп((
Код: |
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);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;
H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;
Buy=Cond9 OR Cond10;
Sell=0;
pos=0;
for(i = 1; i<BarCount; i++)
{
if (pos !=1) // если система не в лонге
{
stoplevel=0;
if(Buy[i])
{
pos=1;// открыта позиция
stoplevel=Low[i];
}
}
else // если система в лонге
{
Buy[i]=0; // убираем лишние покупки
if (L[i] <stoplevel) // проверка условия выхода
{
Sell[i]=1; // продажа
SellPrice=stoplevel; // цена продажи равна цене стоп-уровня
stoplevel=0; // обнуляем стоп
pos=0; // система не в лонге
}
else
{
if (stoplevel[i]>stoplevel[i-1]) // если лоу текущее, выше чем лоу на пред.свечке
{
Buy[i]=0; // удаляем лишние покупки
stoplevel=stoplevel[i]; // передвигаем стоп вверх, на текущее лоу
}
}
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stoplevel ,"",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
|
Основной косяк в том, что stoplevel иногда используется как массив (с индексом [i]), а иногда как переменная (без индекса). Недавно обсуждали тут http://amisite.ru/phpBB2/viewtopic.php?p=2580#2580
Если использовать как переменную, то выводить линию стопов на график смысла нет (она фигню нарисует).
В общем поправил код и получилось так. Возможно есть ошибки, но у меня нарисовало вроде правильно.
Код: |
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);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;
H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;
Buy=Cond9 OR Cond10;
Sell=0;
pos=0;
for(i = 1; i<BarCount; i++)
{
if (pos != 1) // если система не в лонге
{
stoplevel[i] = Null;
if(Buy[i])
{
pos = 1;// открыта позиция
stoplevel[i] = Low[i];
}
}
else // если система в лонге
{
Buy[i] = 0; // убираем лишние покупки
if (L[i] <= stoplevel[i-1]) // проверка условия выхода
{
Sell[i] = 1; // продажа
SellPrice[i] = stoplevel[i-1]; // цена продажи равна цене стоп-уровня
stoplevel[i] = Null; // обнуляем стоп
pos = 0; // система не в лонге
}
else
{
if (L[i] > L[i-1]) // если лоу текущее, выше чем лоу на пред.свечке
{
stoplevel[i] = L[i]; // передвигаем стоп вверх, на текущее лоу
}
}
}
}
Plot(C,"",colorBlack,styleCandle);
Plot(stoplevel ,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вообще по описанию в начале
Цитата: |
после входа в позицию необходимо, чтобы стоп передвигался под лоу свечи, если оно выше чем предыдущее
|
цикл городить не надо.
Получается, что если Low текущее выше предыдущего, то держим сделку, а если стало ниже, то сработал стоп, который стоял на уровне прошлого Low.
Это можно написать так
Код: |
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);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;
H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;
Buy = Cond9 OR Cond10;
Sell = Low < Ref(Low, -1);
SellPrice = Ref(Low, -1);
Plot(C,"",colorBlack,styleCandle);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
|
Конечно тут не точно написано, т.к. если вдруг был обалденный геп вниз, то по цене прошлого лоу стоп исполнится никак не мог, но не трудно учесть и этот момент. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|