Research03: находим простые связи между движениями цены в разных частях суток

3 декабря 2019, 21:48
fxsaber
1
140

Введение


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

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

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

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


Исследование

Проще всего объяснить на примере. Возьмем два суточных интервала: Интервал1 09:00-09:03 и Интервал2 10:30-11:22. Каждый день будем смотреть. Если цена на Интервале1 выросла, то выросла (или упала) ли цена на Интервале2? Результат каждого дня будем суммировать и в итоге выведем статистику, на сколько совпадение (или контр-совпадение) движения цены в этих интервалах имело место быть.

Допустим, движение в 90% суток повторялось. Тогда логично написание ТС, которая в начале Интервала2 делает вход в том направлении, как до этого шла цена в Интервале1.

Ну а само исследование будем проводить, конечно, обобщенно - для всех возможных Интервалов1/2.

Для этого был написан такой скрипт (в приложении).

#property script_show_inputs

input datetime inFromDate = D'2019.09.01';       // С какой даты
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // Период баров
input uint inMaxLength1 = 0;                     // Максимальная длина (в барах) исходного интервала
input uint inMaxLength2 = 0;                     // Максимальная длина (в барах) проверяемого интервала

#ifdef __MQL5__

#define MACROS(A, B)               \
  int Time##A( const datetime dt ) \
  {                                \
    MqlDateTime mdts;              \
                                   \
    TimeToStruct(dt, mdts);        \
                                   \
    return(mdts.B);                \
  }                                \

  MACROS(DayOfWeek, day_of_week)
#undef MACROS

#endif // __MQL5__

#include <fxsaber\Research\Research03\Research03.mqh> // Находим простые связи между движениями цены в разных частях суток.

#property description RESEARCH03_DESCRIPTION

void OnStart()
{  
  RESEARCH03 Research(_Symbol, inFromDate, inPeriod, inMaxLength1, inMaxLength2);
  
  Research.Run();
}


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

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


Результат

Запуск на EURUSD M15 MQ-Beta.
Research's Days = 67: 2019.09.02-2019.12.03. OOS's Days = 66: 2019.06.03-2019.09.02
56.7%, 9: 00:00(0)-00:15(1) 00:15, 00:15(1)-00:30(2) 00:15, OOS:: 5, 66 days - 53.8%
60.4%, 14: 00:00(0)-00:15(1) 00:15, 00:15(1)-00:45(3) 00:30, OOS:: 0, 66 days - 50.0%
64.2%, 19: 00:00(0)-00:15(1) 00:15, 00:15(1)-01:00(4) 00:45, OOS:: 4, 66 days - 53.0%
64.2%, 19: 00:00(0)-00:15(1) 00:15, 12:45(51)-15:00(60) 02:15, OOS:: 8, 66 days - 56.1%
64.2%, 19: 00:00(0)-00:15(1) 00:15, 20:00(80)-04:30(114) 08:30, OOS:: 1, 66 days - 50.8%
64.9%, 20: 00:00(0)-00:15(1) 00:15, 21:30(86)-05:45(119) 08:15, OOS:: 5, 66 days - 53.8%
64.9%, 20: 00:00(0)-00:15(1) 00:15, 22:00(88)-07:00(124) 09:00, OOS:: 3, 66 days - 52.3%
64.9%, 20: 00:00(0)-00:15(1) 00:15, 22:15(89)-05:15(117) 07:00, OOS:: 1, 66 days - 50.8%
64.9%, 20: 00:00(0)-00:15(1) 00:15, 22:30(90)-07:15(125) 08:45, OOS:: 3, 66 days - 52.3%
64.9%, 20: 00:00(0)-00:15(1) 00:15, 22:45(91)-05:45(119) 07:00, OOS:: 5, 66 days - 53.8%
66.4%, 22: 00:00(0)-00:15(1) 00:15, 22:45(91)-06:15(121) 07:30, OOS:: 7, 66 days - 55.3%
66.4%, 22: 00:00(0)-00:15(1) 00:15, 23:00(92)-05:30(118) 06:30, OOS:: 7, 66 days - 55.3%
67.2%, 23: 00:00(0)-00:15(1) 00:15, 23:00(92)-06:15(121) 07:15, OOS:: 1, 66 days - 50.8%
67.9%, 24: 00:00(0)-00:15(1) 00:15, 23:00(92)-08:30(130) 09:30, OOS:: 3, 66 days - 52.3%
67.9%, 24: 00:00(0)-00:15(1) 00:15, 23:15(93)-01:00(100) 01:45, OOS:: 0, 66 days - 50.0%
68.7%, 25: 00:00(0)-00:15(1) 00:15, 23:15(93)-02:00(104) 02:45, OOS:: 11, 66 days - 58.3%
69.4%, 26: 00:00(0)-00:15(1) 00:15, 23:45(95)-07:30(126) 07:45, OOS:: 1, 66 days - 50.8%
73.9%, 32: 00:00(0)-00:30(2) 00:30, 21:45(87)-23:15(93) 01:30, OOS:: 15, 66 days - 61.4%
74.6%, 33: 00:00(0)-09:30(38) 09:30, 13:45(55)-15:00(60) 01:15, OOS:: 9, 66 days - 56.8%
74.6%, 33: 00:00(0)-13:45(55) 13:45, 08:45(131)-11:45(143) 03:00, OOS:: 1, 66 days - 50.8%
74.6%, 33: 00:00(0)-13:45(55) 13:45, 08:45(131)-12:00(144) 03:15, OOS:: 5, 66 days - 53.8%
75.4%, 34: 00:00(0)-20:30(82) 20:30, 06:15(121)-08:00(128) 01:45, OOS:: 17, 66 days - 62.9%
76.1%, 35: 00:15(1)-03:15(13) 03:00, 04:45(19)-09:30(38) 04:45, OOS:: 3, 66 days - 52.3%
76.1%, 35: 00:15(1)-13:45(55) 13:30, 07:45(127)-11:30(142) 03:45, OOS:: 14, 66 days - 60.6%
76.1%, 35: 00:15(1)-16:00(64) 15:45, 20:00(80)-04:45(115) 08:45, OOS:: 10, 66 days - 57.6%
79.1%, 39: 00:30(2)-10:00(40) 09:30, 13:00(52)-15:00(60) 02:00, OOS:: 9, 66 days - 56.8%
79.1%, 39: 06:15(25)-07:45(31) 01:30, 23:00(92)-15:45(159) 16:45, OOS:: 2, 66 days - 51.5%
79.9%, 40: 06:15(25)-07:45(31) 01:30, 23:45(95)-15:45(159) 16:00, OOS:: 4, 66 days - 53.0%
79.9%, 40: 06:15(25)-07:45(31) 01:30, 00:00(96)-15:45(159) 15:45, OOS:: 4, 66 days - 53.0%
79.9%, 40: 06:15(25)-07:45(31) 01:30, 00:15(97)-15:45(159) 15:30, OOS:: 6, 66 days - 54.5%
79.9%, 40: 06:15(25)-07:45(31) 01:30, 00:45(99)-15:30(158) 14:45, OOS:: 2, 66 days - 51.5%
79.9%, 40: 06:45(27)-07:45(31) 01:00, 16:30(66)-16:00(160) 23:30, OOS:: 13, 66 days - 59.8%
80.6%, 41: 14:15(57)-21:45(87) 07:30, 07:15(125)-08:00(128) 00:45, OOS:: 5, 66 days - 53.8%
81.3%, 42: 14:15(57)-01:45(103) 11:30, 07:15(125)-08:00(128) 00:45, OOS:: 1, 66 days - 50.8%
82.1%, 43: 14:30(58)-05:00(116) 14:30, 07:15(125)-08:00(128) 00:45, OOS:: 1, 66 days - 50.8%
82.8%, 44: 19:00(76)-05:45(119) 10:45, 05:45(119)-09:00(132) 03:15, OOS:: 4, 66 days - 53.0%

Поиск классных пар интервалов шел на данных за осень 2019, а проверялся на данных за лето 2019.

Нижняя строка показывает, что в 82.8% случаев осенью 2019 года EURUSD цена на интервале 05:45-09:00 имела тот же результат движения, что и на интервале до этого: 19:00-05:45.

Летом же эта "вероятность" была 53%. Т.е. движение было неопределенным. Так что в данном случае имеем дело с подгонкой.


Выводы

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

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


Файлы:
Поделитесь с друзьями: