Обсуждение статьи "Эконометрический подход к поиску рыночных закономерностей: автокорреляция, тепловые карты и диаграммы рассеяния" - страница 2

 

Close[-1] = (Close[0]-Close[lag]) - ((Close[lag]-Close[lag*2]) - (Close[lag-1]-Close[lag*2-1]))

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

Что я делал, брал МА большого периода, предсказывал на бар вперед, затем из этого вычислял предсказание цены. Считал ско ошибки предсказания (реальная цена-прогноз). Считал ско приращений цены. В результате ошибка получалась хуже приращений. Таким образом можно сказать, "сегодня будет как вчера" лучший прогноз.

 
Rorschach:

Close[-1] = (Close[0]-Close[lag]) - ((Close[lag]-Close[lag*2]) - (Close[lag-1]-Close[lag*2-1]))

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

Что я делал, брал МА большого периода, предсказывал на бар вперед, затем из этого вычислял предсказание цены. Считал ско ошибки предсказания (реальная цена-прогноз). Считал ско приращений цены. В результате ошибка получалась хуже приращений. Таким образом можно сказать, "сегодня будет как вчера" лучший прогноз.

Там используется авторегрессия по отфильтрованному ряду (конкретным, условно, часам). За регрессоры берутся приращения соседних часов. Да, это предсказание на шаг вперёд. Более подробных экспериментов не делал. Если создать кастомный символ в мт5 для рандом волк, то можно проверить ботом из статьи. К сожалению, не дружу с ними. Может, кто-нибудь сделает.
 
#property script_show_inputs
#include <Math\Stat\Math.mqh>
#include <rndxor128.mqh>//https://www.mql5.com/ru/articles/273
//--- input parameters
input string   symbol_origin="EURUSD";// имя символа, на основе которого будет создан пользовательский символ 
input string   symbol_name="MySymbol";// имя пользовательского символа 
input datetime From=D'2019.01.01';
input datetime To=D'2020.01.01';

void OnStart()
  {
   CustomSymbolCreate(symbol_name,"",symbol_origin);
   SymbolSelect(symbol_name,true);
   int count=100;//StdDev m1=sqrt(count)
   RNDXor128 xor;
   //xor.SRand(6);//(GetTickCount());
   MqlRates A[];
   double B[]; ArrayResize(B,count);
   int total=CopyRates(symbol_origin,PERIOD_M1,From,To,A);
   for(int i=0;i<total;i++)
     {for(int j=0;j<count;j++) {B[j]=(xor.Rand()<2147483648)?_Point:-_Point;}
      MathCumulativeSum(B);
      A[i].open=(i>0) ? A[i-1].close : 1.1;
      A[i].high=MathMax(B)+A[i].open;
      A[i].low=MathMin(B)+A[i].open;
      A[i].close=B[count-1]+A[i].open;
      A[i].tick_volume=count;
     }
   Print(CustomRatesReplace(symbol_name,From,To,A));
  }
В настройках чарта (Ctrl+O) нужно выбрать необходимое количество баров.
 
Rorschach:
В настройках чарта (Ctrl+O) нужно выбрать необходимое количество баров.

попозже сделаю по той методе с авторегрессией, выгружу ряд в питон, модель построю

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

Добрый день! Поясните, пожалуйста, про построение тепловой карты:

Мы берем приращения от часа одного дня до часа другого дня таким образом:

ratesH = rates.drop(rates.index[~rates.index.hour.isin([i])]).diff(lag).dropna()

Если потом функция вызывается со значением лага 25, то мы в rateH получаем разницу не соседних суток, а 25 дней между сутками, потому что до этого мы выкинули все часы, не совпадающие с i, и получили ряд вида 2020-01-01 00:00:00|90, 2020-01-02 00:00:00|87,   2020-01-03 00:00:00|88,  и потом если применить на него лаг 25 и посчитать дифф, а потом выкинуть na - получим ряд  2020-01-25 00:00:00|1, 2020-01-26 00:00:00|3,  2020-01-27 00:00:00|-2 - и так для каждого часа. В итоге что за тепловую карту мы построили?

Возможно, я где-то запуталась, помогите распутаться, пожалуйста.