Автор |
Сообщение |
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Плавает сигнал, т.е. сигнал на покупку может переместится вперед и система купит еще раз, несмотря на то, что уже был вход в лонг. Возможно с помощью этого кода:
Код: |
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short); |
Сделать ссылку на другой график, который будет записан с отстованием на одну свечку:
Код: |
sdvig = Param("sdvig", 0, 0, 10, 1);
O = Ref(O, -sdvig);
H = Ref(H, -sdvig);
L = Ref(L, -sdvig);
C = Ref(C, -sdvig); |
Тогда при перестановки сигнала система не будет дважды покупать? |
Последний раз редактировалось: Vladimir (Вт Дек 02, 2008 1:00 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Тогда при перестановки сигнала система не будет дважды покупать?
|
При простом бактесте система и так не может покупать дважды. Пожалуйста пишите подробности. Как получается двойная покуупка? Вероятно робот делает?
Цитата: |
У меня есть система, в которой плавает сигнал, т.е. сигнал на покупку может переместится вперед и система купит еще раз, несмотря на то, что уже был вход в лонг. Возможно с помощью этого кода:
|
Если для получения сигнала используется ЗигЗаг, то сдвиг на один бар не поможет. Поможет только подтверждение реверса зигзага. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Сам видел, при появлении новой свечки сначало появляется сигнал, потом чезеp секунд пять может пропасть, как этого избежать? |
Последний раз редактировалось: Vladimir (Вт Дек 02, 2008 12:58 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Код: |
SetBarsRequired(100000,0);
sdvig = Param("sdvig", 0, 0, 100, 1);
O = Ref(O, -sdvig);
H = Ref(H, -sdvig);
L = Ref(L, -sdvig);
C = Ref(C, -sdvig);
revers = Optimize("Revers%",0.1, 0.1, 10, 0.1)/100;
//revers = Param("Revers %", 2, 0.1, 10, 0.1)/100;
Trend = 1;
Rev[0] = C[0] - C[0]*Revers;
UPpik = 0;
Dwpik = 0;
k = 1;
SwingLine = Null;
SwingLine[0] = C[0];
function ZigLine(k, i, trend)
{
d = i - k;
if(trend)
{
Amp = H[i] - L[k];
SwingLine[k] = L[k];
}
else
{
Amp = L[i] - H[k];
SwingLine[k] = H[k];
}
Step = Amp/d;
for(j = k+1; j <= i; j++)
{
SwingLine[j] = SwingLine[j-1]+ Step;
}
return SwingLine;
}
for(i = 1; i < BarCount; i++)
{
if(Trend) //Up Trend
{
if(H[i] > UPpik)
{
rev[i] = H[i] - H[i]*revers;
CE = i;
ZigLine(k, i, trend);
Uppik = H[i];
}
else
{
if(L[i] < Rev[i-1])
{
Trend = 0;
Dwpik = L[i];
k = CE;
CE = i;
ZigLine(k, i, trend);
Rev[i] = L[i] + L[i]*revers;
}
else
{
Rev[i] = Uppik - uppik*revers;
}
}
}
//======================================
else //Down Trend
{
if(L[i] < DWpik)
{
Rev[i] = L[i] + L[i]*Revers;
DWpik = L[i];
CE = i;
ZigLine(k, i, trend);
}
else
{
if(H[i] > Rev[i-1])
{
Trend = 1;
Uppik = H[i];
k = CE;
CE = i;
ZigLine(k, i, trend);
Rev[i] = H[i] - H[i]*Revers;
}
else
{
Rev[i] = DWpik + DWpik*Revers;
}
}
}
}
Plot(Rev, "revers", ParamColor("Color", colorBlue ), ParamStyle("Style Revers", styleDashed) );
Plot(SwingLine, "ZigZag", IIf(SwingLine > Ref(SwingLine, -1), 27, 4), ParamStyle("Style Swing", styleThick) );
Cond1 = Ref(SwingLine, -1)<Ref(SwingLine,-2) AND SwingLine > Ref(SwingLine, -1);
Cond2 = Ref(SwingLine, -1)> Ref(SwingLine,-2) AND SwingLine < Ref(SwingLine, -1);
X=BarsSince(Cond1);
Y = Ref(C,- x)<=((1-revers)*L) AND SwingLine>Ref(SwingLine,-1);
X1=BarsSince(Cond2);
Y1 = Ref(C,- x)>=((1+revers)*H)AND SwingLine<Ref(SwingLine,-1);
Buy = IIf(TimeNum()>=234500 OR (TimeNum()>=174500 AND TimeNum()<=180000),0,Y);
Short = IIf(TimeNum()>=234500 OR (TimeNum()>=174500 AND TimeNum()<=180000),0,Y1);
Sell= IIf(TimeNum()>=234500 OR (TimeNum()>=174500 AND TimeNum()<=180000),0,O<Ref(C,-2));
Cover= IIf(TimeNum()>=234500 OR (TimeNum()>=174500 AND TimeNum()<=180000),0,O>Ref(C,-2));
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
BuyPrice = SellPrice = ShortPrice = CoverPrice = O; |
Да, да, он самый, только плавает сигнал входа в позицию, что делать не знаю.
Может из-за этого:
Код: |
Rev[0] = C[0] - C[0]*Revers;
UPpik = 0;
Dwpik = 0;
k = 1;
SwingLine = Null;
SwingLine[0] = C[0]; |
C поменять на O, либо из-за H и L? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Завтра еще гляну, потому, что сегодня у меня не очень рабочее настроение, но вроде проблемму можно решить так.
Там выводится линия реверса (такая синяя пунктирная) называется Rev.
Вот если бар закрыля выше неё, а предыдущтй бар ниже, то это сигнал на покупку. Причем надо обязательно брать уже закрытый бар. В реалтайме (при работе с живыми котировками) будет примерно так.
Код: |
Buy = Ref(Cross(C, Rev), -1);
|
аналогично для остальных сигналов. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Завтра еще гляну, потому, что сегодня у меня не очень рабочее настроение, но вроде проблемму можно решить так.
Там выводится линия реверса (такая синяя пунктирная) называется Rev.
Вот если бар закрыля выше неё, а предыдущтй бар ниже, то это сигнал на покупку. Причем надо обязательно брать уже закрытый бар. В реалтайме (при работе с живыми котировками) будет примерно так.
Код: |
Buy = Ref(Cross(C, Rev), -1);
|
аналогично для остальных сигналов. |
Код: |
a = Optimize("a", 0.9, 0.1, 30, 0.1);
revers = a/100;
Trend = 1;
Rev[0] = C[0] - C[0]*Revers;
UPpik = 0;
Dwpik = 0;
k = 1;
SwingLine = Null;
SwingLine[0] = C[0];
function ZigLine(k, i, trend)
{
d = i - k;
if(trend)
{
Amp = H[i] - L[k];
SwingLine[k] = L[k];
}
else
{
Amp = L[i] - H[k];
SwingLine[k] = H[k];
}
Step = Amp/d;
for(j = k+1; j <= i; j++)
{
SwingLine[j] = SwingLine[j-1]+ Step;
}
return SwingLine;
}
for(i = 1; i < BarCount; i++)
{
if(Trend) //Up Trend
{
if(H[i] > UPpik)
{
rev[i] = H[i] - H[i]*revers;
CE = i;
ZigLine(k, i, trend);
Uppik = H[i];
}
else
{
if(L[i] < Rev[i-1])
{
Trend = 0;
Dwpik = L[i];
k = CE;
CE = i;
ZigLine(k, i, trend);
Rev[i] = L[i] + L[i]*revers;
}
else
{
Rev[i] = Uppik - uppik*revers;
}
}
}
//======================================
else //Down Trend
{
if(L[i] < DWpik)
{
Rev[i] = L[i] + L[i]*Revers;
DWpik = L[i];
CE = i;
ZigLine(k, i, trend);
}
else
{
if(H[i] > Rev[i-1])
{
Trend = 1;
Uppik = H[i];
k = CE;
CE = i;
ZigLine(k, i, trend);
Rev[i] = H[i] - H[i]*Revers;
}
else
{
Rev[i] = DWpik + DWpik*Revers;
}
}
}
}
Plot(Rev, "revers", ParamColor("Color", colorBlue ), ParamStyle("Style Revers", styleDashed) );
Plot(SwingLine, "ZigZag", IIf(SwingLine > Ref(SwingLine, -1), 27, 4), ParamStyle("Style Swing", styleThick) );
Buy = Cross(H, Ref(Rev,-1)); // вход при подтверждении разворота
BuyPrice = Max(O,Ref(Rev, -1)); // вход по ордеру на уровне реверса
Short = Cross(Ref(Rev,-1), L);
ShortPrice = Min(O,Ref(Rev, -1));
Sell=Short;
Cover=Buy;
CoverPrice = Max(O,Ref(Rev, -1));
SellPrice = Min(O,Ref(Rev, -1));
Equity(1);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем?
Код: |
BuyPrice = Max(O,Ref(Rev, -1)); // вход по ордеру на уровне реверса
|
BuyPrice нужен только для теста. При работе в реальном времени цены сделок как правило определяются текущей ценой на рынке. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
А зачем?
Код: |
BuyPrice = Max(O,Ref(Rev, -1)); // вход по ордеру на уровне реверса
|
BuyPrice нужен только для теста. При работе в реальном времени цены сделок как правило определяются текущей ценой на рынке. |
Так я для тестирования и скинул |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не. Для тестирования не пойдет. По написаным правилам сделки исполняются по факту закрытия бара, в момент открытия нового. Поэтому Цена сделки должна быть Open. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Не. Для тестирования не пойдет. По написаным правилам сделки исполняются по факту закрытия бара, в момент открытия нового. Поэтому Цена сделки должна быть Open. |
Почему по закрытым? Buy = Cross(H, Ref(Rev,-1)) на текушем баре входим. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Угу. Не обратил внимание, что Хай и Лой в кроссе. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Плюсадин
Зарегистрирован: 19.11.2008
Сообщения: 13
|
Прикрутил систему Зиг Заг в амиброкер и в реалтайме по 5-минуткам смотрю сигналы.
В первые 10 минут торгов система дала два сигнала: на покупку и потом на продажу.
После чего ЗигЗаг=<Empty> постоянно, не меняется значение revers тоже.
Что это может быть???
Код я скопи-пастил у Коменсед. В этой же теме.... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Все правильно. Если не установлен новый экстремум и не выполнен критерий разворота ЗигЗага (пробой линии реверса), то Зигзаг нерисуется. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Все правильно. Если не установлен новый экстремум и не выполнен критерий разворота ЗигЗага (пробой линии реверса), то Зигзаг нерисуется. |
В данной системе я бы отрисовкиу зиг-зага вообще выкинул за ненадобностью. Грубо говоря получилась пробойная система и часть отвечающая за реверс, отвечает какраз за расчет уровня пробой которого и дает тот или иной сигнал. А зиг -заг системы в чистом виде хоть и имеют примерно тотже принцип, пробой уровня, имеют несколько отличное предназночение и в принцыпе не могут использоваться для построения МТС (зиг заги это часть графического анализа волн). Мнение |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|