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

 
Maxim Dmitrievsky #:

Да, выделенное 

Нужно запускать много раз, много символов.


Пример своего переборщика показал выше. Он просто рандомно выдергивает семплы для обучения из одного и того же ряда и результаты всегда разные на ООС.

На реальном символе у меня не наблюдается такого эффекта. Т.е. выбираю любые 40% интервала оптимизации и после этого результаты сильно совпадают на ООС.

Именно такой символ выбрал для рандомизации и привел его графики обучения.

Точно такие же резкие провалы на ООС.

Не вижу их всегда.

 
fxsaber #:

На реальном символе у меня не наблюдается такого эффекта. Т.е. выбираю любые 40% интервала оптимизации и после этого результаты сильно совпадают на ООС.

Именно такой символ выбрал для рандомизации и привел его графики обучения.

Не вижу их всегда.

Все-таки значит, что в тиках больше альфы. Нашел способ быстро искать в них (через МО это было бы очень долго). Потом выкачу результаты, когда закончу.

 

Посмотрел несколько видов симуляций временных рядов по и их характеристикам, создал синтетичесский ряд из синусоид и шума (синусоиды взял для лучшей наглядности)

Вывод такой.. В этим симуляциях надо еще нормально разбираться..


Первый ряд оригинальный (левый сверху), все остальные ряды это симуляции построеные по характеристикам первого ряда

еще прогон


par(mar=c(2,2,2,2),mfrow=c(3,2))

n <- 1:1000
# original series
s <- sin(n/50+1) + sin(n/20+15)/2 + rnorm(n,sd = 0.1) 
s |> plot(t="l", main = "original series (2 sin + noise)")

s |> rnorm(mean = mean(s),sd = sd(s)) |> cumsum() |> plot(t="l",main = "random generation")
library(forecast)
s |> ets() |> simulate() |> plot(t="l",main = "Exponential smoothing state space model")
s |> ar() |> simulate() |> plot(t="l",main = "Fit Autoregressive Models to Time Series")
s |> nnetar() |> simulate() |> plot(t="l",main = "Neural Network Time Series Forecasts")
s |> Arima() |> simulate() |> cumsum() |> plot(t="l",main = "ARIMA model to univariate time series")
 
Maxim Dmitrievsky #:

Ну, проблемы никакой не вижу.

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


Сам я сильно обломался в своем предположении.

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

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

fxsaber, 2023.08.19 00:50

Если допилить, то для Монте-Карло, возможно, наилучший вариант генерации random-символа с нужными стат. характеристиками.

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

 
Maxim Dmitrievsky #:

Все-таки значит, что в тиках больше альфы.

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

 
mytarmailS #:

Первый ряд оригинальный (левый сверху), все остальные ряды это симуляции построеные по характеристикам первого ряда

Ни одну симуляцию использовать не стал бы. Что они делают:

  1. Находят несколько (пусть их будет 100) стат. характеристик в баровой истории.
  2. Генерируют ряды баров, чтобы эти 100 стат. характеристик совпадали.

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


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

Звучит, что все круто. Но я не могу обучить скальпингу даже после такой рандомизации. И пока у меня нет объяснения этому.


ЗЫ Выложил бы EX5-скрипт, что создает нужный random-символ, но по правилам форума запрещено. Формировать для этого блог-запись пока не готов. Если кому интересно покрутить - ЛС.

 
fxsaber #:

не было того, что нужно решить.

Хотел бы решить следующее.


Задача.

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


Цель.

Монте-Карлить.

 
fxsaber #:
Но получил полный провал, что, как минимум, заставило задуматься, а что же в реальной истории было такого, что она отлично скальпируется?

Думаю отличие в серийности или повторяемости подряд идущих баров/тиков. Во время тренда большинство из них в одном направлении, рандомизатор их делает в среднем через 1.

 
Forester #:

Думаю отличие в серийности или повторяемости подряд идущих баров/тиков. Во время тренда большинство из них в одном направлении, рандомизатор их делает в среднем через 1.

Есть несколько гипотез. На всякий случай проверил MathRand, запустив на реальном и рандомном символе такой скрипт.

#property script_show_inputs

input datetime inFrom = D'2023.01.01';

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void OnStart()
{
  MqlTick Ticks[];
  
  int Amount1 = 0;
  int Amount2 = 0;
  
  for (uint i = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, inFrom * 1000) - 1; (bool)i--;)
  {
    const double Diff = NormalizeDouble(GetAvgPrice(Ticks[i]) - GetAvgPrice(Ticks[i + 1]), 8);
    
    if (Diff > 0)
      Amount1++;
    else if (Diff < 0)
      Amount2++;
  }
  
  Print(Amount1);
  Print(Amount2);
}

Оба символа показали почти одинаковые значения. Интересно, что Amount1 ~ Amount2. Т.е. трендовость формируется не количеством приращений одного знака, а абсолютными величинами самих приращений.

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

 
fxsaber #:

Есть несколько гипотез. На всякий случай проверил MathRand, запустив на реальном и рандомном символе такой скрипт.

Оба символа показали почти одинаковые значения. Интересно, что Amount1 ~ Amount2. Т.е. трендовость формируется не количеством приращений одного знака, а абсолютными величинами самих приращений.

Amount1 - Amount2 -  это скорее волатильность. Трендовость - это если их много сложить. В реальных данных тренды одни, в рандомизированных (до примерно через1), тренды скорее случаные выбросы за счет повышения волатильности. Предполагаю, что они по амплитуде в разы меньше, чем реальные.

UPD: не разглядел сразу, что там у вас ~ а не -

Про ~. Их приблизительное равество означает только что, реально хорошо перемешали, в среднем через 1.