Алгоритмическая ''центрифуга'' - страница 13

 
Aleksei Stepanenko:

Ок, ...

- возможно что-то ещё... 

Нужно как то задействовать ГА для поиска ИТ (идеальных точек). Думаю над этим.
 
Igor Makanu:

идеальные точки входа на истории - ЗигЗаг, Вы отвергли

Не хочу использовать ЗигЗаг, потому что он профанирует идею. Если ЗЗ - идеальный индикатор идеальных точек, то он самый ИДЕАЛЬНЫЙ индикатор из всех, потому что он точнее других попадает в идеальные точки. Получается - ЗигЗаг должен быть в каждой сборке Торгового Сигнала в КАЖДОЙ стратегии. А это - бред. 

Считаю, что участки сделок на истории нужно определять по критериям: время/прибыль/риск и использовать ГА. 

 
Реter Konow:

Не хочу использовать ЗигЗаг, потому что он профанирует идею. Если ЗЗ - идеальный индикатор идеальных точек, то он самый ИДЕАЛЬНЫЙ индикатор из всех, потому что он точнее других попадает в идеальные точки. Получается - ЗигЗаг должен быть в каждой сборке Торгового Сигнала в КАЖДОЙ стратегии. А это - бред. 

Считаю, что участки сделок на истории нужно определять по критериям: время/прибыль/риск и использовать ГА. 

ничего не имею против

не вижу, что обсуждать, я пока офф 

 
Реter Konow:
Нужно как то задействовать ГА для поиска ИТ (идеальных точек). Думаю над этим.

Не понял. Идеальные точки и так известны на истории. Это экстремумы, и их видно глазами. Для поиска экстремумов не требуется сложных алгоритмов. Нужно только определить условия для их поиска (например превышение определённого количества пунктов между противоположными соседними экстремумами). Дальше можно создать массив этих экстремумов (цена, дата) и проверять на той же истории значение любого индикатора в точке каждого экстремума (ну или на подходе к этой точке). Так?

Вот Вам для примера код на коленке для поиска и хранения экстремумов истории (без гарантии работоспособности):

input double Distance=100;

//каждый элемент массива будет содержать три поля: дата, цена и положение экстремума (верх, низ) 
struct sextr{datetime time; double price; int position;} Extremes[];

void OnStart()
   {
   int Total=iBars(Symbol(),0);
   for(int i=Total-1; i>=0; i--)
      {
      WriteExtremum(Extremes,Distance,Symbol(),0,i);
      }
   }   

//здесь записываем экстремумы в массив
void WriteExtremum(sextr &eExtremes[], double eDistance, string eSymbol, int eTimeFrame, int eShift)
   {
   int eFinish=ArraySize(eExtremes)-1;
   double eHigh=iHigh(eSymbol,eTimeFrame,eShift);
   double eLow=iLow(eSymbol,eTimeFrame,eShift);
   datetime eTime=iTime(eSymbol,eTimeFrame,eShift);
   //если массив пустой
   if(eFinish<0)
      {
      ArrayResize(eExtremes,++eFinish+1);
      eExtremes[eFinish].time=eTime;
      //пока мы не знаем какой из экстремумов будет в первом элементе, поэтому берём цену по середине
      //можно сделать более грамотнее, но лень. Поэтому первый экстремум у нас будет бракованный 
      //и мы его потом затрём 
      eExtremes[eFinish].price=(eHigh+eLow)/2;
      eExtremes[eFinish].position=0;
      }
   //если в массиве есть элементы
   else
      {
      //текущий элемент - максимум
      if(eExtremes[eFinish].position==1)
         {
         //произошло обновление текущего экстремума
         if(eHigh-eExtremes[eFinish].price>0)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if(eExtremes[eFinish].price-eLow>eDistance)
            {
            ArrayResize(eExtremes,++eFinish+1);
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=-1;
            }
         }
      //текущий элемент - минимум
      if(eExtremes[eFinish].position==-1)
         {
         //произошло обновление текущего экстремума
         if(eExtremes[eFinish].price-eLow>0)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if(eHigh-eExtremes[eFinish].price>eDistance)
            {
            ArrayResize(eExtremes,++eFinish+1);
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position=1;
            }
         }
      //эта ситуация, когда первый элемент не закрылся, и не понятно максимум это будет или минимум
      //если произошло превышение в любую сторону, тогда затираем значения первого элемента
      if(extremes[eFinish].position==0)
         {
         //произошло превышение расстояния между противоположными экстремумами
         if(eHigh-eExtremes[eFinish].price>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position=1;
            }            
         if(eExtremes[eFinish].price-eLow>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=-1;
            }
         }
      }   
   }

Дополнительно, в этом коде нужно отлавливать и обрабатывать шпильки, это когда одна свеча перекрывает одновременно и максимум и минимум. А так же минимальное время между экстремумами.

Теперь когда массив с экстремумами заполнен, Вы знаете где и когда смотреть на Ваши индикаторы. Но сомнения в полезности остались:)

 
Реter Konow:

Не хочу использовать ЗигЗаг, потому что он профанирует идею. Если ЗЗ - идеальный индикатор идеальных точек, то он самый ИДЕАЛЬНЫЙ индикатор из всех, потому что он точнее других попадает в идеальные точки. Получается - ЗигЗаг должен быть в каждой сборке Торгового Сигнала в КАЖДОЙ стратегии. А это - бред. 

Считаю, что участки сделок на истории нужно определять по критериям: время/прибыль/риск и использовать ГА. 

Вы не понимаете СУТИ индикатора Зиг-Заг...

Индикатор ЗЗ действительно ИДЕАЛЬНЫЙ индикатор, но только в качестве настройки других индикаторов...

 
Serqey Nikitin:

Вы не понимаете СУТИ индикатора Зиг-Заг...

Индикатор ЗЗ действительно ИДЕАЛЬНЫЙ индикатор, но только в качестве настройки других индикаторов...

Проблема ЗЗ в том, что он не учитывает соотношение времени/прибыли/риска сделок.
 Точки входа по ЗЗ дадут непропорциональные сделки. В них не будет учёта тренда/флета. Коридоры будут помещаться внутрь участков сделок, наравне с пиками. 
ЗЗ вмещает в себя любую динамику, и подбирать по нему другие индикаторы кажется бессмысленным. По крайней мере - не умным.

Нужен другой подход. Не только идеальные точки входа/выхода, но и соблюдение внутренних пропорций сделок - времени продолжительности позиции, ее прибыли и риска. 

Под риском, в этом контексте, я понимаю не соотношение лота, стопа и депозита, а устойчивость изменения цены при открытой позиции. Чем менее устойчиво изменение (молотилка), тем больше риска потери прибыли. 

Поэтому, идеальные точки входа/выхода нужно искать не по принципу "чем выше прибыль, тем лучше", а по принципу "идеальная сделка - это сделка с лучшим соотношением времени, прибыли и риска". 

Таково мое мнение.
 
Aleksei Stepanenko:

Не понял. Идеальные точки и так известны на истории. Это экстремумы, и их видно глазами. Для поиска экстремумов не требуется сложных алгоритмов. Нужно только определить условия для их поиска (например превышение определённого количества пунктов между противоположными соседними экстремумами). Дальше можно создать массив этих экстремумов (цена, дата) и проверять на той же истории значение любого индикатора в точке каждого экстремума (ну или на подходе к этой точке). Так?

Вот Вам для примера код на коленке для поиска и хранения экстремумов истории (без гарантии работоспособности):

Дополнительно, в этом коде нужно отлавливать и обрабатывать шпильки, это когда одна свеча перекрывает одновременно и максимум и минимум. А так же минимальное время между экстремумами.

Теперь когда массив с экстремумами заполнен, Вы знаете где и когда смотреть на Ваши индикаторы. Но сомнения в полезности остались:)

Спасибо за код. Хотя, не уверен, что с поиском ИТ все так просто. 
 

Пётр, Вы можете нарисовать на графике пример нескольких сделок от руки? Вход и выход. Желательно взять кусок графика с разнообразным движением цены. И поясните почему в этих точках. Какое здесь соотношение времени/прибыли/риска сделок? 

А то я не совсем понимаю Ваше представление об идеальной точке.

 
Aleksei Stepanenko:

Пётр, Вы можете нарисовать на графике пример нескольких сделок от руки? Вход и выход. Желательно взять кусок графика с разнообразным движением цены. И поясните почему в этих точках. Какое здесь соотношение времени/прибыли/риска сделок? 

А то я не совсем понимаю Ваше представление об идеальной точке.

Да, я позже сделаю. Я сам ещё до конца не разобрался. Могу изменить точку зрения. Так что, если что - сорри. ))
 

Нет проблем.

То что Вы катите бочку на Зиг-Заг, в этом есть здравый смысл. Зиг-Заг ничего не знает о тренде. От просто тикает как часы и в тренде и во флете. Его волны(колена) не волны тренда. Волны тренда строятся по следующему правилу: тренд считается продолжающимся, если он покоряет новые вершины. Это значит, что следующая волна тренда всегда перебивает предыдущую, а если не перебивает, значит это не волна.

Причина обращения: