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

 
Aleksey Vyazmikin:

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

Смотри советник хоть и начинает работать при открытии бара, данные он всё равно берет с первого. У меня вернее даже со второго, ну это мой бзик потому как не нужно ждать этих 30 секунд для обновления значений на первом баре, второй то уже точно посчитан и достаточно давно. Поэтому запись первого значения ОИ в открытом баре в первый бар не так уж и страшно. Это получается наоборот я текущее значение пишу в историю. Заглядывания не происходит. И ведь не важно это, мы же не скопи тика это берем. И уж как записал советник так и записал, главное что бы индикатор считал корректно. У тебя в индикаторе появилась дополнительная функция для чтения файла, где есть условие дата труе. Для коректной загрузки истории из фала пришлось добавить вот такую строчку

 if(New_Data==true)
            {
               ArrayResize(oi,x+2,1000);
               if(cnt==0)
               {
               Arh_Time=StringToTime(str);///////////// Если честно в обще не понял зачем ты так это всё разделил
                  oi[x].time=Arh_Time;                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
               }

               else if(cnt==1)
               {
                  oi[x].oi=Arh_oi;   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и
                  New_Data=false;
                  x++;
               }
            }

И индюк начал работать и с данными записанными поминутно и по тиково, причём это всё в одном файле. Я даже сверил построение разных ТФ и всё сошлось на ура, но в основном теле пришлось изменить ещё и вот эту строчку

for(int s=f; s<count_size; s++)
            {
               //Print("Test_02");
               if(oi[s].time>time[i])
               {
                  //Print("Test_03");
                  if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже
                  //Print("s=",s);
                  f=s;
                  break;
               }
               if(s+1==count_size)
               {
                  BufOI[i]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
                  //Print("OI=",SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST));
                  if(BufOI[i]<1)BufOI[i]=BufOI[i-1];
                  if(BufOI[i]<1 && BufOI[i-1]<1)BufOI[i]=100;
                  f=s;
               }
            }

 В остальном закидываю советник на чарт и жду открытия буду смотреть минутки как пишет ну и индикатор троит ОИ не происходит ли изменение данных при перекомпиляции.

Вот держи индюк и не благодари :-)!!!! Шучу с премногими благодарностями. А ка кна счёт 37 баксов? Хочешь заработать?

Файлы:
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

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


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

Да будет дырка и по идее нужно переписать значение взяв его со второго бара. Но вопрос мой остался без ответа, выполнится ли условие нового бара труе когда откроется бал и пройдёт несколько тиков, как пример, и только потом изменится ОИ?
 
Печально в режиме рального времени не пишет ни первый ни второй бар. При перекомпилировании индикатора история подгружается но только до третьего бара ни второй ни первый не обновляется, хотя в файле они есть по факту.
 
Mihail Marchukajtes:

Смотри советник хоть и начинает работать при открытии бара, данные он всё равно берет с первого. У меня вернее даже со второго, ну это мой бзик потому как не нужно ждать этих 30 секунд для обновления значений на первом баре, второй то уже точно посчитан и достаточно давно. Поэтому запись первого значения ОИ в открытом баре в первый бар не так уж и страшно. Это получается наоборот я текущее значение пишу в историю. Заглядывания не происходит. И ведь не важно это, мы же не скопи тика это берем. И уж как записал советник так и записал, главное что бы индикатор считал корректно. У тебя в индикаторе появилась дополнительная функция для чтения файла, где есть условие дата труе. Для коректной загрузки истории из фала пришлось добавить вот такую строчку

И индюк начал работать и с данными записанными поминутно и по тиково, причём это всё в одном файле. Я даже сверил построение разных ТФ и всё сошлось на ура, но в основном теле пришлось изменить ещё и вот эту строчку

 В остальном закидываю советник на чарт и жду открытия буду смотреть минутки как пишет ну и индикатор троит ОИ не происходит ли изменение данных при перекомпиляции.

Вот держи индюк и не благодари :-)!!!! Шучу с премногими благодарностями. А ка кна счёт 37 баксов? Хочешь заработать?

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

Только меня смущает 

if (s>1)BufOI[i-1]=oi[s-1].oi; /// иначе всё бралось с минутой позже

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

Arh_Time=StringToTime(str);

обрезанное время до минуты из переменной NewTime.

А про вознаграждение - думал я уже заработал :)


Mihail Marchukajtes:
Да будет дырка и по идее нужно переписать значение взяв его со второго бара. Но вопрос мой остался без ответа, выполнится ли условие нового бара труе когда откроется бал и пройдёт несколько тиков, как пример, и только потом изменится ОИ?

Проверка на новый бар происходит после изменения объема, значит должны попасть в часть кода, где происходит запись.


Mihail Marchukajtes:
Печально в режиме рального времени не пишет ни первый ни второй бар. При перекомпилировании индикатора история подгружается но только до третьего бара ни второй ни первый не обновляется, хотя в файле они есть по факту.

Куда не пишет? Советник не пишет? Попробуйте старую версию советника, где писал по несколько раз в минуту, будет ли с ним корректно работать индикатор.

 
Aleksey Vyazmikin:

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

Только меня смущает 

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

обрезанное время до минуты из переменной NewTime.

А про вознаграждение - думал я уже заработал :)


Проверка на новый бар происходит после изменения объема, значит должны попасть в часть кода, где происходит запись.


Куда не пишет? Советник не пишет? Попробуйте старую версию советника, где писал по несколько раз в минуту, будет ли с ним корректно работать индикатор.

Сейчас разбираюсь с советником он почему то постоянно меняет значение первого бара в файле. Такое ощущение что новый бар всегда труе. Хотя нет сейчас проверил что то я затупил В общем картинка такая при перекомпилровании.

И так при каждом перекомпилировании. Что такое ХЗ? Уже много чего перепробовал иногда он его прогружает иногда нет...

 
Mihail Marchukajtes:

Сейчас разбираюсь с советником он почему то постоянно меняет значение первого бара в файле. Такое ощущение что новый бар всегда труе. Хотя нет сейчас проверил что то я затупил В общем картинка такая при перекомпилровании.

И так при каждом перекомпилировании. Что такое ХЗ? Уже много чего перепробовал иногда он его прогружает иногда нет...

У меня чет вообще советник не пишет Ваш советник - надо разбираться. Или сбросьте рабочую версию только по Si, что б писала.

 
Aleksey Vyazmikin:

У меня чет вообще советник не пишет Ваш советник - надо разбираться. Или сбросьте рабочую версию только по Si, что б писала.

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

Файлы:
 

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

Думаю источник получения ОИ должен быть один и это советник и дублирование запроса на биржу не допустимо иначе просто замучимся согласовывать, по мне так. Как думаете?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 

В общих чертах вижу это так. У нас есть есть общее число строк в файле и есть переменная s которая стремится от нуля до count_size в итоге при реальной торговле запускается скажем функция РидФайл один которая тупо переводит указатель на строку sи производит дочитывание данных до конца файла. Тем самым при обращении к индикатору он будет подгружать именно тот участок который отсутствует на графика. Ведь пишущий советник будет стоять с торгующим на одном терминале.

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

Два зайца в одном решении....

 
Mihail Marchukajtes:

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

А всё равно не пишет там куча инструментов, у меня столько нет в обзоре рынка - с кодом пока не могу разбираться, просто хотел удаленно поставить, что б посмотреть как индикатор работает.

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