Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 зиг заг Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Vladimir



Зарегистрирован: 30.10.2008
Сообщения: 62

СообщениеДобавлено: Пн Дек 01, 2008 8:14 pm Ответить с цитатой Вернуться к началу

Плавает сигнал, т.е. сигнал на покупку может переместится вперед и система купит еще раз, несмотря на то, что уже был вход в лонг. Возможно с помощью этого кода:
Код:
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

СообщениеДобавлено: Вт Дек 02, 2008 12:02 am Ответить с цитатой Вернуться к началу

Цитата:

Тогда при перестановки сигнала система не будет дважды покупать?

При простом бактесте система и так не может покупать дважды. Пожалуйста пишите подробности. Как получается двойная покуупка? Вероятно робот делает?
Цитата:

У меня есть система, в которой плавает сигнал, т.е. сигнал на покупку может переместится вперед и система купит еще раз, несмотря на то, что уже был вход в лонг. Возможно с помощью этого кода:

Если для получения сигнала используется ЗигЗаг, то сдвиг на один бар не поможет. Поможет только подтверждение реверса зигзага.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vladimir



Зарегистрирован: 30.10.2008
Сообщения: 62

СообщениеДобавлено: Вт Дек 02, 2008 12:13 am Ответить с цитатой Вернуться к началу

Сам видел, при появлении новой свечки сначало появляется сигнал, потом чезеp секунд пять может пропасть, как этого избежать?


Последний раз редактировалось: Vladimir (Вт Дек 02, 2008 12:58 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Дек 02, 2008 12:44 am Ответить с цитатой Вернуться к началу

Кажется это мой код... Однако на всякий случай размести его еще раз, а чтобы он не испортился прочитай http://amisite.ru/phpBB2/viewtopic.php?t=223

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vladimir



Зарегистрирован: 30.10.2008
Сообщения: 62

СообщениеДобавлено: Вт Дек 02, 2008 12:57 am Ответить с цитатой Вернуться к началу

Код:
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

СообщениеДобавлено: Ср Дек 03, 2008 12:47 am Ответить с цитатой Вернуться к началу

Завтра еще гляну, потому, что сегодня у меня не очень рабочее настроение, но вроде проблемму можно решить так.
Там выводится линия реверса (такая синяя пунктирная) называется Rev.
Вот если бар закрыля выше неё, а предыдущтй бар ниже, то это сигнал на покупку. Причем надо обязательно брать уже закрытый бар. В реалтайме (при работе с живыми котировками) будет примерно так.
Код:

Buy = Ref(Cross(C, Rev), -1);

аналогично для остальных сигналов.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Дек 03, 2008 9:45 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Ср Дек 03, 2008 10:24 am Ответить с цитатой Вернуться к началу

А зачем?
Код:

BuyPrice = Max(O,Ref(Rev, -1)); //  вход по ордеру на уровне реверса

BuyPrice нужен только для теста. При работе в реальном времени цены сделок как правило определяются текущей ценой на рынке.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Дек 03, 2008 10:29 am Ответить с цитатой Вернуться к началу

000 писал(а):
А зачем?
Код:

BuyPrice = Max(O,Ref(Rev, -1)); //  вход по ордеру на уровне реверса

BuyPrice нужен только для теста. При работе в реальном времени цены сделок как правило определяются текущей ценой на рынке.


Так я для тестирования и скинул Smile

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Дек 03, 2008 2:13 pm Ответить с цитатой Вернуться к началу

Не. Для тестирования не пойдет. По написаным правилам сделки исполняются по факту закрытия бара, в момент открытия нового. Поэтому Цена сделки должна быть Open.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Чт Дек 04, 2008 7:59 am Ответить с цитатой Вернуться к началу

000 писал(а):
Не. Для тестирования не пойдет. По написаным правилам сделки исполняются по факту закрытия бара, в момент открытия нового. Поэтому Цена сделки должна быть Open.


Почему по закрытым? Buy = Cross(H, Ref(Rev,-1)) на текушем баре входим.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Дек 04, 2008 8:38 am Ответить с цитатой Вернуться к началу

Угу. Не обратил внимание, что Хай и Лой в кроссе.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Плюсадин



Зарегистрирован: 19.11.2008
Сообщения: 13

СообщениеДобавлено: Пт Дек 05, 2008 11:58 am Ответить с цитатой Вернуться к началу

Прикрутил систему Зиг Заг в амиброкер и в реалтайме по 5-минуткам смотрю сигналы.
В первые 10 минут торгов система дала два сигнала: на покупку и потом на продажу.
После чего ЗигЗаг=<Empty> постоянно, не меняется значение revers тоже.

Что это может быть???

Код я скопи-пастил у Коменсед. В этой же теме....
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Дек 05, 2008 12:14 pm Ответить с цитатой Вернуться к началу

Все правильно. Если не установлен новый экстремум и не выполнен критерий разворота ЗигЗага (пробой линии реверса), то Зигзаг нерисуется.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пт Дек 05, 2008 1:36 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Все правильно. Если не установлен новый экстремум и не выполнен критерий разворота ЗигЗага (пробой линии реверса), то Зигзаг нерисуется.


В данной системе я бы отрисовкиу зиг-зага вообще выкинул за ненадобностью. Грубо говоря получилась пробойная система и часть отвечающая за реверс, отвечает какраз за расчет уровня пробой которого и дает тот или иной сигнал. А зиг -заг системы в чистом виде хоть и имеют примерно тотже принцип, пробой уровня, имеют несколько отличное предназночение и в принцыпе не могут использоваться для построения МТС (зиг заги это часть графического анализа волн). Мнение

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen