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


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

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

заготовка, причем дающая неплохой результат по ГП час.

Код:
b = Optimize("b", 17, 1, 15, 1);

k = round(LastValue((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O))*1000)/10;

a = Optimize("a", 0.7, 0.1, 5, 0.1);

revers = (k*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) );

z = Ref(IIf(Ref(C>O,-1), LLV(H,3),HHV(L,3)),-1);
Plot(z,"z", 6,1);

p = 3;
p1 = 1;

Top1 = EMA(Ref(HHV(H,p), -1),3);
Bot1 = EMA(Ref(LLV(L,p1),-1),3);


Buy = Z<=H AND H>=Top1 AND H>Ref(Rev,-1);
Sell = Z>=L AND Bot1>=L AND Ref(Rev,-1)> L;
Short = Z>=L AND Bot1>=L AND Ref(Rev,-1)> L;
Cover = Z<=H AND H>=Top1 AND H>Ref(Rev,-1);



BuyPrice = Max(O,Max(Ref(Rev,-1),Max(z,top1)));
SellPrice = Min(O,Min(Ref(Rev,-1),Min(z,bot1)));
CoverPrice = Max(O,Max(Ref(Rev,-1),Max(z,top1)));

ShortPrice =  Min(O,Min(Ref(Rev,-1),Min(z,bot1)));
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
Сергей



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

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

commenced писал(а):
заготовка, причем дающая неплохой результат по ГП час.


Сам писал?)
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

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

Сергей писал(а):
commenced писал(а):
заготовка, причем дающая неплохой результат по ГП час.


Сам писал?)


Реверс Олега, остальное мое, а что?

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



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

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

commenced писал(а):
Сергей писал(а):
commenced писал(а):
заготовка, причем дающая неплохой результат по ГП час.


Сам писал?)


Реверс Олега, остальное мое, а что?

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


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

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

Сергей писал(а):
commenced писал(а):
Сергей писал(а):
commenced писал(а):
заготовка, причем дающая неплохой результат по ГП час.


Сам писал?)


Реверс Олега, остальное мое, а что?

Сложновато, пытался разбираться, бросил, она стабильна, ну там пропадающих сигналов нет или появляющихся задним числом?


Да не должно, но на симуляторе не гонял.

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


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

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

При тесте будет давать не совсем точные результаты. т.к. есть подглядывание
Код:

k = round(LastValue((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O))*1000)/10;

дает значение "к" определяемое последними (текущими данными), а от него зависит реверс. Но при реальной работе этих (современных) данных бы небыло и очень возможно, что размер реверса был бы другой. Кроме того реверс может менятся при поступлении новых данных.

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


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

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

000 писал(а):
При тесте будет давать не совсем точные результаты. т.к. есть подглядывание
Код:

k = round(LastValue((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O))*1000)/10;

дает значение "к" определяемое последними (текущими данными), а от него зависит реверс. Но при реальной работе этих (современных) данных бы небыло и очень возможно, что размер реверса был бы другой. Кроме того реверс может менятся при поступлении новых данных.


не соглашусь, реверс использую с прошлого бара, т.е. имеющий полюбому конечное значение, К не расчитывается из текущих параметров Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1), а О итак неизмено.

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


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

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

Цитата:

не соглашусь, реверс использую с прошлого бара, т.е. имеющий полюбому конечное значение, К не расчитывается из текущих параметров Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1), а О итак неизмено.

Ну вот сейчас середина декабря 2008г. При тесте в 2007г он будет брать "к" и соответственно размер реверса расчитанное для конца 2008г (т.к. там берется последнее значение LastValue)

Такие дела...

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


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

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

000 писал(а):
Цитата:

не соглашусь, реверс использую с прошлого бара, т.е. имеющий полюбому конечное значение, К не расчитывается из текущих параметров Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1), а О итак неизмено.

Ну вот сейчас середина декабря 2008г. При тесте в 2007г он будет брать "к" и соответственно размер реверса расчитанное для конца 2008г (т.к. там берется последнее значение LastValue)

Такие дела...


Не обратил внимание, кстати не посоветуеш как обойти по другому, чтоб цикл не ругался, т.е. величина К должна быть изменяемой к примеру в зависимости от ATR.

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


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

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

Убери из "к" LastValue и в цикле поставь revers[i]
Ну и в Rev[0] = C[0] - C[0]*Revers; соответственно надо написать revers[0]

На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)

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



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

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

Цитата:
b = Optimize("b", 17, 1, 15, 1);

//k = round(LastValue((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O))*1000)/10;

k = round((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O)*1000)/10;


a = Optimize("a", 0.7, 0.1, 5, 0.1);

revers = (k*a)/100; ;

Trend = 1;
Rev[0] = C[0] - C[0]*Revers[0];
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> UPpik)
{
rev[i] = H[i] - H[i]*revers[i];
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[i];

}
else
{
Rev[i] = Uppik - uppik*revers[i];
}
}
}
//======================================
else //Down Trend
{
if(L[i] <DWpik> Rev[i-1])
{
Trend = 1;
Uppik = H[i];
k = CE;
CE = i;
ZigLine(k, i, trend);
Rev[i] = H[i] - H[i]*Revers[i];
}
else
{
Rev[i] = DWpik + DWpik*Revers[i];
}
}
}
}

Plot(Rev, "revers", ParamColor("Color", colorBlue ), ParamStyle("Style Revers", styleDashed) );
Plot(SwingLine, "ZigZag", IIf(SwingLine > Ref(SwingLine, -1), 27, 4), ParamStyle("Style Swing", styleThick) );

z = Ref(IIf(Ref(C>O,-1), LLV(H,3),HHV(L,3)),-1);
Plot(z,"z", 6,1);

p = 3;
p1 = 1;

Top1 = EMA(Ref(HHV(H,p), -1),3);
Bot1 = EMA(Ref(LLV(L,p1),-1),3);


Buy = Z<H>=Top1 AND H>Ref(Rev,-1);
Sell = Z>=L AND Bot1>=L AND Ref(Rev,-1)> L;
Short = Z>=L AND Bot1>=L AND Ref(Rev,-1)> L;
Cover = Z<H>=Top1 AND H>Ref(Rev,-1);



BuyPrice = Max(O,Max(Ref(Rev,-1),Max(z,top1)));
SellPrice = Min(O,Min(Ref(Rev,-1),Min(z,bot1)));
CoverPrice = Max(O,Max(Ref(Rev,-1),Max(z,top1)));

ShortPrice = Min(O,Min(Ref(Rev,-1),Min(z,bot1)));
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() );



Олег, как ты сказал, переделал.
Прогнал на 5 минутках Сбера. Сигналы дает.
Вроде ошибок нет.

А что если систему запускать после N минут от начала торгов?? (где N - человек сам может определить в зависимости от ТаймФрейма внутри дня)
Как добавить то, что ты написал:

Цитата:

На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

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

Плюсадин писал(а):
Цитата:



Олег, как ты сказал, переделал.
Прогнал на 5 минутках Сбера. Сигналы дает.
Вроде ошибок нет.

А что если систему запускать после N минут от начала торгов?? (где N - человек сам может определить в зависимости от ТаймФрейма внутри дня)
Как добавить то, что ты написал:

Цитата:

[color=blue]На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)


Ты ведь не собираешся по ней торговать надеюсь, система сырая для торговли в таком виде не подходит.

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



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

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

commenced писал(а):
Плюсадин писал(а):
Цитата:



Олег, как ты сказал, переделал.
Прогнал на 5 минутках Сбера. Сигналы дает.
Вроде ошибок нет.

А что если систему запускать после N минут от начала торгов?? (где N - человек сам может определить в зависимости от ТаймФрейма внутри дня)
Как добавить то, что ты написал:

Цитата:

[color=blue]На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)


Ты ведь не собираешся по ней торговать надеюсь, система сырая для торговли в таком виде не подходит.



я уже прикрутил Smile
жду сигналов..но ничего нет..ни свечек, ни зигзагов...

что то с кодом... Sad


а как мне торговать больше??

лучше по такой сырой системе, чем по стакану торговать =)

лучше систем я не видел..а всякие скользящие средние и прочее- это ерунда на нашем рынке.. когда каждый день почти гэпы..
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

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

Плюсадин писал(а):
commenced писал(а):
Плюсадин писал(а):
Цитата:



Олег, как ты сказал, переделал.
Прогнал на 5 минутках Сбера. Сигналы дает.
Вроде ошибок нет.

А что если систему запускать после N минут от начала торгов?? (где N - человек сам может определить в зависимости от ТаймФрейма внутри дня)
Как добавить то, что ты написал:

Цитата:

[color=blue]На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)


Ты ведь не собираешся по ней торговать надеюсь, система сырая для торговли в таком виде не подходит.



я уже прикрутил Smile
жду сигналов..но ничего нет..ни свечек, ни зигзагов...

что то с кодом... Sad


а как мне торговать больше??

лучше по такой сырой системе, чем по стакану торговать =)

лучше систем я не видел..а всякие скользящие средние и прочее- это ерунда на нашем рынке.. когда каждый день почти гэпы..


Пиши свою ни кто на блюдечке тебе ничего не принесет, да еще и нахаляву. Если нет свечек, то возможно ты в квике не включил экспорт.

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


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

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

Плюсадин писал(а):


Олег, как ты сказал, переделал.
Прогнал на 5 минутках Сбера. Сигналы дает.
Вроде ошибок нет.

А что если систему запускать после N минут от начала торгов?? (где N - человек сам может определить в зависимости от ТаймФрейма внутри дня)
Как добавить то, что ты написал:

Цитата:

На самом деле именно так работать не будет вообще потому, что на первых барах revers не определен (данных не достаточно) поэтому цикл надо начинать не с i = 1, а с i = b (период EMA). Соответственно надо переделать и начальные условия (которые перед циклом задаются)

Странно, что работает...
Реверс на первом баре еще нельзя расчитать т.к. для его расчета надо несколько баров
Код:

k = round((Ref(EMA(HHV(H,3),b)-EMA(LLV(L,3),b),-1)/O)*1000)/10;

минимум 3

Поэтому цикл надо начинать не раньше третьего бара
for(i = 3; i < BarCount; i++))
а если период EMA больше 3х, то еще позже. Типа так
for(i = b; i < BarCount; i++))
соответственно и начальные данные надо задать соответственно
Код:

Rev[0] = C[b-1] - C[b-1]*Revers[b-1];
UPpik = 0;
Dwpik = 0;
k = 1;
SwingLine = Null;
SwingLine[b-1] = C[b-1];


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

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen