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

 
elibrarius:

Для всех High и Low Надо сохранить порядок их прихода по вемени, т.е. они могут быть не в таком порядке, как я их написал.

именно это и делает мой скрипт

for(int i = ArraySize(ticks) - 1; i >= 0; i--)
   {
      ticks[i].bid = ticks[i].ask;
   }

Вы ы чем тестируете? в Python или в R ? - выгружайте OHLC оригинального символа, затем бросьте скрипт на чарт .... упс , писал на лету, нужно вынести время D'2021.01.01' в настройки

и выгружайте этот кастомный чарт к себе - эти OHLC  полностью синхронны

 

В общем моя идея сыровата, и могут быть подводные камни - типа цена пошла вниз чуть чуть не дошла до Low, потом пошла вверх до High, потом только до Low.
Без всех тиков не оценить, что будет первым ТП или СЛ.

Хотя в своих МО моделях, я считаю, что если на баре и ТП и СЛ сработали, то сработал первым именно невыгодный вариант, т.е. СЛ.


Но обдумать можно, если кроме меня кому-то такие реальные OHLC пригодилось бы...

 
Igor Makanu:

именно это и делает мой скрипт

Вы ы чем тестируете? в Python или в R ? - выгружайте OHLC оригинального символа, затем бросьте скрипт на чарт .... упс , писал на лету, нужно вынести время D'2021.01.01' в настройки

и выгружайте этот кастомный чарт к себе - эти OHLC  полностью синхронны

Я в файлы выгружаю, а потом, хоть в R, хать в питон, хоть в DLL, хоть на удаленный сервер.
 
elibrarius:

В общем моя идея сыровата, и могут быть подводные камни - типа цена пошла вниз чуть чуть не дошла до Low, потом пошла вверх до High, потом только до Low.
Без всех тиков не оценить, что будет первым ТП или СЛ.

Хотя в своих МО моделях, я считаю, что если на баре и ТП и СЛ сработали, то сработал первым именно невыгодный вариант, т.е. СЛ.


Но обдумать можно, если кроме меня кому-то такие реальные OHLC пригодилось бы...

конечно без времени прихода тика Вы не сможете оценить, что было раньше High или low только по OHLC

вот делал себе эту же задачу https://www.mql5.com/ru/forum/282062/page34#comment_20079886

#define OPEN   0
#define HIGH   1
#define LOW    2
#define CLOSE  3

MqlTick HistoryData[];
MqlTick bar[4];
const datetime t_bar[] = {0, 20, 40, 59};
//+------------------------------------------------------------------+
int OnInit()
{
   ArrayResize(HistoryData, 1, 2000000);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   int handle = FileOpen(_Symbol + "_tick.bin", FILE_WRITE | FILE_BIN | FILE_COMMON);
   if(handle < 0)
   {
      Print("Erorr write array # ", GetLastError());
      return;
   }
   FileWriteArray(handle, HistoryData, 1);
}
//+------------------------------------------------------------------+
void OnTick()
{
   MqlTick tick;
   if(!SymbolInfoTick(_Symbol, tick)) return;
   static datetime LastBarM1 = 0;
   datetime d_minutes = tick.time / 60;
   if(LastBarM1 == 0)   // первый запускt
   {
      for(int i = 0; i < 4; i++) bar[i] = tick; // проинициализируем
      LastBarM1 = d_minutes;
   }

   if(d_minutes != LastBarM1) //--- если новая минута
   {
      if(bar[HIGH].time_msc > bar[LOW].time_msc)   // поменяем местами по времени тика
      {
         MqlTick tmp = bar[LOW];
         bar[LOW] = bar[HIGH];
         bar[HIGH] = tmp;
      }
      datetime t = LastBarM1 * 60;  // посчитаем вренмя, sec = 0
      for(int i = 0; i < 4; i++)    // подменим время тика
      {
         bar[i].time = t + t_bar[i];
         bar[i].time_msc = bar[i].time * 1000;
      }
      ArrayInsert(HistoryData, bar, ArraySize(HistoryData));   // добавим в массив
      for(int i = 0; i < 4; i++) bar[i] = tick;                // проинициализируем
      LastBarM1 = d_minutes;                                   // запомним минуты
   }

   if(tick.ask > bar[HIGH].ask) bar[HIGH] = tick;
   if(tick.ask < bar[LOW].ask)  bar[LOW]  = tick;
   bar[CLOSE] = tick;
}
//+------------------------------------------------------------------+

это скрипт выгрузит в нужной последовательности хай/лоу в зависимости от того, кто раньше был

 
Igor Makanu:

конечно без времени прихода тика Вы не сможете оценить, что было раньше High или low только по OHLC

вот делал себе эту же задачу https://www.mql5.com/ru/forum/282062/page34#comment_20079886

это скрипт выгрузит в нужной последовательности хай/лоу в зависимости от того, кто раньше был

Спасибо, что-то такое буду делать скоро.
 
elibrarius:

В общем нужна вторая версия реальных тиков, но в котором всего 6 тиков:
Open: Bid и Ask

High Bid

High Ask

Low Bid

Low Ask

Close: Bid и Ask

Для всех High и Low Надо сохранить порядок их прихода по вемени, т.е. они могут быть не в таком порядке, как я их написал.

Таким инструментом можно Бары оценивать с точностью реальных тиков. С гораздо меньшим траффиком. И тестер научить торговать с ними конечно надо - но думаю, что движок реальных тиков подойдет без переделок.

fxsaber это делал еще для МТ4 когда-то.

Сейчас вообще нет проблем — из реальных тиков можно собрать любую прореженную версию в кастум-инструмент, и тестировать на нем.

 
Renat Fatkhullin:

Мы будем развивать прямую интеграцию с WinML, как это сделали для OpenCL и DirectX.

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

Матричные операции как минимум на CPU/Multithreads/AVX, но возможно и с GPU.

Выделенное звучит вдохновляюще. Особенно если на С++ есть подобные Keras или хотя бы Tenzor Flow библиотеки. Спасибо.

з.ы. WinML это же только про онлайн работу, без обучения же? Но и то хорошо, модели всё тяжелее и тяжелее. поддержка от ОС АПИ не помешает.

 
Maxim Dmitrievsky:

Где реальный график, а где сгенереный?


Вверху сгенерированный, внизу рыночный

 

Можно генерить длиннющие синтетические ряды, соответсвенно

интересно, что небольшое смещение среднего в исходном ряде дает очень сильный трендовый эффект, если данных нагенерить много

получается, что такая модель работала бы только на реал. рынке с явно смещенным средним

Но это легко исправить, получив ряд с теми же закономерностями, но падающий


 

Обучил на сгенеренных, проверил на реальных.. пока в кач-ве эксперимента

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


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