Создание стационарного процесса синхронизированного с барами истории.

 

Давным – давно, когда еще занимался прогнозированием спорт лото, успешно применял разработанный мною метод модуляции стационарного процесса квази случайным, для повышения прогнозируемости последнего. Решил попробовать этот метод для Форекса, но столкнулся с проблемой создания такого стационарного процесса синхронизированного с барами истории. Может, кто делал что – либо похожее, или знает, как решить возникшую проблему. Точкой отсчета для создания процесса я взял 3 января 2005 года это соответствует серверному времени 1104710400, т.к. для обучения моделей я использую данные, начиная с 2005 года. Мне нужно создать стационарный процесс для каждого таймфрейма, для М1 я взял полупериод длиною в 1 день, для М5 – 5 дней, для М15 – 15 дней и т.д. Диапазон изменения сигнала взят от 0.1 до 0.9, шаг приращения рассчитывается по формуле с учетом коэффициента фазы для данного момента KF ( принимает значения 1 или – 1, в зависимости от того, - растущая полуволна, или спадающая) и таймфрейма.

На первом этапе в int init(), я рассчитываю знак KF для точки, с которой начинаю использовать историю котировок для конкретного таймфрейма на котором работаю, и начальное значение уровня сигнала для этой точки PF[0].

         ArraySetAsSeries(PF,false);

         prevtime=Time[LengthSample];
         NotLengthSample=iBarShift(NULL,PERIOD_D1,prevtime,FALSE);
         Not=iBarShift(NULL,PERIOD_D1,1104710400,FALSE);
         prevtimeX=iTime(NULL,PERIOD_D1,NotLengthSample);
         nn=iBarShift(NULL,0,prevtimeX,FALSE);
         KF=1;i=Not; mi=0;
     while (i-Period()>=NotLengthSample)
        {
       if (KF==1)
         KF=-1;
       else if (KF==-1)
         KF=1;  
         i-=Period();
        } 
       if (KF==1)
         PF[0]=0.1+0.00056*KF*(nn-LengthSample)/Period();
       else if (KF==-1)
        PF[0]=0.9+0.00056*KF*(nn-LengthSample)/Period();

Где:

prevtime – время для текущего таймфрейма в точке LengthSample с которой начинается использование истории;

NotLengthSample – порядковый номер бара на PERIOD_D1 соответствующий LengthSample на текущем таймфрейме;

Not – порядковый номер бара на PERIOD_D1 соответствующий 3 января 2005 года;

prevtimeX – время соответствующее моменту открытия дневного бара на PERIOD_D1, в день, в который попадает точка LengthSample на текущем таймфрейме;

nn – порядковый номер бара на текущем таймфрейме соответствующий началу дня в который попадает точка LengthSample;

На втором этапе в int start() я произвожу расчет знака фазы KF и значение уровня сигнала для каждого бара PF[mc0].

int start() 
   {//0 

    int limit;
    int Counted_bars=IndicatorCounted();

   i=Bars-Counted_bars-1;  

    if (i>LengthSample-1) 
       i=LengthSample-1;
   while(i>=0)   
    { 
     if(prevtime != Time[i])
      { 
         prevtime = Time[i];
         NotLengthSample=iBarShift(NULL,PERIOD_D1,prevtime,FALSE);
         prevtime0=iTime(NULL,PERIOD_D1,NotLengthSample);
       if (prevtimeX!=prevtime0)
        {
         prevtimeX=prevtime0; 
         mi++;
       if (mi>=Period())
        {
       if (KF==1)
         KF=-1;
       else if (KF==-1)
         KF=1;  
         mi=0;
        } 
        }
         mc0++; 
         ArrayResize(PF, mc0+1);  
         PF[mc0]=PF[mc0-1]+0.00056*KF;
     //    PF[mc0]=KF;        
       } 
/////...............
  }
return(0);
  }//0

Например, для М1 для 9000 баров истории получается следующая картина:

На рисунке видно, что точки смены фазы смещаются относительно начальных границ и не синхронны друг другу. Это связано с дырами в истории, чем старше таймфрейм, тем это меньше проявляется. Но простое латание дыр, что само по себе сложно в динамике при реальной работе, создаст другую проблему, нарушится синхронизация этого процесса с работой индикаторов, которые отрабатывают реальные котировки.

Если есть у кого какие идею по решению этой задачи – буду очень признателен.

 

Что-то последний год все мои вопросы быстренько уплывают в архив не получая ответа. Знак судьбы - определенно, надо что - то менять.

 
Piligrimm:

Что-то последний год все мои вопросы быстренько уплывают в архив не получая ответа. Знак судьбы - определенно, надо что - то менять.

Не мешайте народу сливать:)

 
Piligrimm:

Что-то последний год все мои вопросы быстренько уплывают в архив не получая ответа. Знак судьбы - определенно, надо что - то менять.

Задумка очень интересная, но к сожалению не знаю как это реализовать !
Причина обращения: