Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1850

 
Mihail Marchukajtes:
Если обрыв идёт глобально со стороны брокера то никакие, тут уже ничего не поделаешь. Советник по сохранению данных стоит на ВПС сервере и скажу что писались данные без потерь.

Сейчас ожидается, что советник для записи истории будет сохранять данные параллельно с работой индикатора и торгового советника, таким образом, при обрыве связи или закрытии терминала, новые исторические данные возьмутся из файла, это позволит экстренно продолжить работу, а файл с VPS потом заменить и перезапустить советники.

 
Mihail Marchukajtes:

\Алексей спасибо за предоставленный индикатор, но у меня вопрос на счёт советника сохраняющего. Можно сделать так чтоб он то же писал поминутно, а не при каждом изменении ОИ внутри минуты?

Особо незаморачиваясь если, то такой вариант проверьте

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick))
      StartDate=last_tick.time;
   else StartDate=TimeCurrent();
   if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {
      for (int i=0; i<100 && !IsStopped(); i++)
      {
         h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
         if(h!=INVALID_HANDLE)
         {

            FileSeek(h,0,SEEK_END);
            FileWrite(h,StartDate,DoubleToString(interest,0));
            FileClose(h);
            Sleep(100);
            break;
         }
      }
      //inter=interest;
      // byOR=byORD;
      // sellOR=sellORD;
   }
 
Aleksey Vyazmikin:

Особо незаморачиваясь если, то такой вариант проверьте

Алексей премного благодарен. Я обязательно всё проверю и сообщу результат. По поводу заглядывания в будущее это абсолютно не важно и этого не произойдёт если советник будет писать так как будет читать индикатор. Если между ними разницы не будет то и не важно. Как вариант при появлении нового бара ждём первое изменение ОИ и это новое значение пишем для первого, предыдущего бара.  Можем даже писать не новое значение, а старое которое было последним для первого бара. То есть по сути будет идти запись на закрытии бара.

Важно не то какой ОИ мы присвоим минутному бару, а как будет происходить считывание индикатора из файла.

 
Mihail Marchukajtes:

Алексей премного благодарен. Я обязательно всё проверю и сообщу результат. По поводу заглядывания в будущее это абсолютно не важно и этого не произойдёт если советник будет писать так как будет читать индикатор. Если между ними разницы не будет то и не важно. Как вариант при появлении нового бара ждём первое изменение ОИ и это новое значение пишем для первого, предыдущего бара.  Можем даже писать не новое значение, а старое которое было последним для первого бара. То есть по сути будет идти запись на закрытии бара.

Важно не то какой ОИ мы присвоим минутному бару, а как будет происходить считывание индикатора из файла.

Посмотри пожалуйста привожу полный код и собственно вопрос

interest=SymbolInfoDouble(Name_instrFS,SYMBOL_SESSION_INTEREST); 


  if ((interest!=inter))
  {

   MqlTick last_tick;
   /*if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();*/
    StartDate=iTime(Name_instrFS,PERIOD_M1,1);
  if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {  
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(inter,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }
}


Если откроется новый бар и в течении 5 тиков не произойдёт изменения ОИ он зайдёт в условие нового бара?

По идеи думаю должен ведь это будет первый вызов функции нового бара и только после него результат поменяется на фальше? Да ведь?

 
Промоделировав работу кода в голове нашёл узкое место. Последний бар вчерашней сессии будет записан при первом изменении на открытии минутного бара сегодняшней сессии, в случае если произойдёт переинецилализация советника то значениее ОИ прилетит вноль что приведёт к неприятной записи нуля в последний бар вчерашней сессии. Думаю решается всё таки запись не предыдущего значения ОИ в первый бар, а именно текущего ОИ то есть того ОИ который будет первым в новом баре. Ладно хотелось идеально их синхронизировать, но и так думаю сойдёт и так...   Так...мысли в слух...
 
Aleksey Vyazmikin:

В том то и дело, воспроизвести идеально обучение и применение не получится, особенно на быстром рынке. Сейчас получается, что задержка до 10 секунд относительно новых данных (если речь об истории), а если писать только на открытии бара, то задержка уже будет 60 секунд и более. Если работать с данными полученными на открытии бара (не делать смещение), то погрешность будет в показателе, т.е. может получиться заглядывание в будущее. В общем тут надо ещё раз подумать над идеологией, сейчас данные более свежие, но всё это теория. Может и достаточно брать данные, записанные при появлении нового бара, и обучаться на них.

Ну и можно сделать скрипт, который просто уберет ненужные строки внутри минуты и размер файла будет в 10 раз меньше.

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

проверил индикатор на той истории что была и ошибка на лицо. Дело в том что первая минутная свеча имеет время 10:00 в окне котировок, однако значение для этой свечи берётся с предыдущей свечи. То есть у нас открылась свеча в 10:00:00, а закрылась в 10:00:59, вот это значение и нужно писать, разве нет? а индикатор при построении берет значение для этого бара с 23:59:59.
 
Mihail Marchukajtes:
проверил индикатор на той истории что была и ошибка на лицо. Дело в том что первая минутная свеча имеет время 10:00 в окне котировок, однако значение для этой свечи берётся с предыдущей свечи. То есть у нас открылась свеча в 10:00:00, а закрылась в 10:00:59, вот это значение и нужно писать, разве нет? а индикатор при построении берет значение для этого бара с 23:59:59.
Урра получилось. Теперь не важно пишется файл поминутно или потиково он записывает правильные значения для свечи. То есть если свеча имеет время открытия то пишем мы в нее значение на закрытии этой свечи...
 
Mihail Marchukajtes:
проверил индикатор на той истории что была и ошибка на лицо. Дело в том что первая минутная свеча имеет время 10:00 в окне котировок, однако значение для этой свечи берётся с предыдущей свечи. То есть у нас открылась свеча в 10:00:00, а закрылась в 10:00:59, вот это значение и нужно писать, разве нет? а индикатор при построении берет значение для этого бара с 23:59:59.

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


Mihail Marchukajtes:

Посмотри пожалуйста привожу полный код и собственно вопрос


Если откроется новый бар и в течении 5 тиков не произойдёт изменения ОИ он зайдёт в условие нового бара?

По идеи думаю должен ведь это будет первый вызов функции нового бара и только после него результат поменяется на фальше? Да ведь?

Где подсчет тут 5 тиков? Бывает, что в течении всех минуты не происходит совершения сделки, тогда у Вас пропуститься бар, поэтому я и убрал сравнение на изменение объема ОИ, что б сразу данные писались при открытии новой свечи. Возможно что т не учел, надо же на данных тестить, а вчера их не было, ну а сегодня рабочие дни :(

 
Mihail Marchukajtes:

Алексей премного благодарен. Я обязательно всё проверю и сообщу результат. По поводу заглядывания в будущее это абсолютно не важно и этого не произойдёт если советник будет писать так как будет читать индикатор. Если между ними разницы не будет то и не важно. Как вариант при появлении нового бара ждём первое изменение ОИ и это новое значение пишем для первого, предыдущего бара.  Можем даже писать не новое значение, а старое которое было последним для первого бара. То есть по сути будет идти запись на закрытии бара.

Важно не то какой ОИ мы присвоим минутному бару, а как будет происходить считывание индикатора из файла.

Ешё подумайте не только об обучении, а и о применении модели, когда данные будут браться с рынка - что б там были наиболее достоверные данные. Сейчас будут сохранятся данные на открытии свечи, т.е. на нулевом баре не будет изменений после открытия (если я правильно закодил :) ). Если нужны на закрытие, то можно и так потом переделать, по большому счету разница лишь в том, с какого бара получать информацию из советника - с последнего или предпоследнего.

 

неокогнитрон - типа сверточная сеть но без учителя

https://habr.com/ru/post/214317/

Кто понял как она работает , объясните мне пожалуйста

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