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

 
Aleksey Vyazmikin #:

Вот пример первых экспериментов, на рисунке вероятность выбора устойчивого квантового отрезка на каждой итерации - отдельно для каждого класса (думаю, по названию кривой понятно), где в названии кривой буква D - там использовался описанный метод - красная кривая.

В целом можно говорить о положительном эффекте. Да, пока он не значителен, но есть разные вариации по реализации процесса. Я доволен, предварительным положительным результатом.

Я опять ничего не понял. Что значат эти кривульки? :)

 
Maxim Dmitrievsky #:

Я опять ничего не понял. Что значат эти кривульки? :)

Ето нормально))) 
 
mytarmailS #:
А что такон nb в коде?
Не могли бы вы предоставить более воспроизводимый код

код в R

r <- read.delim("EURUSD60.txt", sep = " ")
# nb - число баров данного таймфрейма в сутках
# передаётся в первой строке файла после заголовка
nb <- r[1,2]
r <- r[-1,]
NBAR <- 1:nb

COR <- rep(0,nb)
for (i in 1:nb) {
indx <- which(r$n[-length(r$n)]==i)
COR[i] <- cor(r$r[indx],r$r[indx+1], method="p")}
plot(NBAR,COR,type="l")

SD <- rep(0,nb)
for (i in 1:nb) SD[i] <- sd(r$r[r$n==i])
plot(NBAR,SD,type="l")

# интерквартильный размах, как более робастный аналог
# среднеквадратичного отклонения
IQR <- rep(0,nb)
for (i in 1:nb) IQR[i] <- IQR(r$r[r$n==i])
plot(NBAR,IQR,type="l")
код на mql5 для скрипта для получения приращений (лог-ретурнов, если точнее)
//+------------------------------------------------------------------+
#property script_show_inputs
//+------------------------------------------------------------------+
input string smbl = "EURUSD";
input ENUM_TIMEFRAMES prd = PERIOD_M1;
input datetime t0 = D'2023.10.15 00:00';
input datetime t1 = D'2024.03.15 00:00';
//+------------------------------------------------------------------+
int SEC_IN_DAY = 24 * 60 * 60;
//+------------------------------------------------------------------+
void OnStart()
{  MqlRates rates[];
   int nbars = CopyRates(smbl, prd, t0, t1, rates);
   if (nbars < 1)
   {  Print("no history");
      return;
   }
   int tfs = PeriodSeconds(prd);
   string fn = "rtrns\\" + smbl + string(tfs) + ".txt";
   int f = FileOpen(fn, FILE_WRITE | FILE_TXT | FILE_ANSI | FILE_COMMON);
   if (f == INVALID_HANDLE)
   {  Print("File error!");
      return;
   }
   FileWriteString(f, "r n\n0 " + IntegerToString(SEC_IN_DAY / tfs));
   string s;
   for (int i = 0; i < nbars; ++i)
   {  s = "\n" + DoubleToString(log(rates[i].close / rates[i].open));
      s += " " + IntegerToString((rates[i].time % SEC_IN_DAY) / tfs + 1);
      FileWriteString(f, s);
   }
   Print(IntegerToString(nbars) + " bars recorded to file: " + fn);
   FileClose(f);
}
//+------------------------------------------------------------------+
 
Aleksey Nikolayev #:

код в R

код на mql5 для скрипта для получения приращений (лог-ретурнов, если точнее)

спасибо

 
Aleksey Nikolayev #:

код в R

код на mql5 для скрипта для получения приращений (лог-ретурнов, если точнее)

мелкая, гадкая, доставучая ошибка для расписаний, сессий и всего что про реальное время: реальное кол-во минутных баров в день != 1440 (точнее не всегда равно)..так-же для 5-ти минуток и даже для 15

надо или пропущенные бары дописывать до 1440 или добавлять в данные и рассчёты поле "время"

 
Maxim Dmitrievsky #:
на рисунке вероятность выбора устойчивого квантового отрезка на каждой итерации
на рисунке вероятность выбора устойчивого квантового отрезка на каждой итерации
 
Aleksey Vyazmikin #:
на рисунке вероятность выбора устойчивого квантового отрезка на каждой итерации

А что за итерации? Вряд ли обучение дополнительных деревьев. Какой то ваш собственный цикл. Что он делает?

 
Aleksey Vyazmikin #:
на рисунке вероятность выбора устойчивого квантового отрезка на каждой итерации
Да. На каждой итерации чего?
 
Maxim Dmitrievsky #:
Да. На каждой итерации чего?
Forester #:

А что за итерации? Вряд ли обучение дополнительных деревьев. Какой то ваш собственный цикл. Что он делает?

Вот описывал этот метод - ниже вставка - итерации по нему там показаны.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Aleksey Vyazmikin, 2024.05.05 08:24

Ну, розные подходы, в моём методе происходит дистилляция данных, особенно актуально при сильном дисбалансе классов. Вместе с процессом отсева происходит исследование данных на каждой итерации. Изначально - это метод разведывательный для отбора предикторов и квантовых таблиц. Дополнительная задача - облегчить обучения другим классификаторам за счет удаления примеров в выборке по сложно выявляемым диапазонам предикторов.

Процесс можно представить в виде такого вот дерева


На дереве прошло 2 итерации и пришли к третей. В овале данные, которые больше не исследуем далее при построении текущей модели - класс "0".

И вот так я делал 100 итераций и смотрел, какая вероятность сделать сплит, который будет так же эффективно отсеивать нули от единиц на новых данных.


 
Maxim Kuznetsov #:

мелкая, гадкая, доставучая ошибка для расписаний, сессий и всего что про реальное время: реальное кол-во минутных баров в день != 1440 (точнее не всегда равно)..так-же для 5-ти минуток и даже для 15

надо или пропущенные бары дописывать до 1440 или добавлять в данные и рассчёты поле "время"

Вполне знаком с этой (и кучей прочих) особенностей котировок. В данном коде пропуски учтены посредством того, что (а) приращения считаются по опен/клоуз одного бара, а не по соседним барам; (б) номер бара в сутках определён только его временем в сутках и не зависит от числа пропущенных в сутках баров до него; (в) корреляция считается со следующим наличествующим баром, который не всегда оказывается баром со следующим  суточным номером.

Такой подход заметно всё упрощает и оставляет точность достаточной. Если бы "расписание разворотов" существовало, то оно наверняка проявило бы себя при подобном анализе, который бы имело смысл уточнять далее. Пока же очевидно что "расписание" если и существует, то совсем не как фиксированное время суток для разворота.