Введение
Как это ни парадоксально, но именно при активной алготоровле много времени уходит на вглядывание в монитор. Иногда возникают иллюзии, будто что-то полезное уловил глазом.
Так произошло и в этот раз. Давно была гипотеза, что какие-то движения внтури дня имеют связь с движениями после в этом же дне.
Например, может показаться, что микрогепы в первые минуты открытия европейской сессии могут с высокой вероятностью указать на дальнейшее движение цены в течение дня.
Среди большого количества заданий для себя, была задача проверить нечто подобное. И вот руки дошли.
Исследование
Проще всего объяснить на примере. Возьмем два суточных интервала: Интервал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(); }
Из простейших комбинаторных соображений следует, что на минутном ТФ количество только пар интервалов исчисляется многими триллионами. А ведь для каждой пары нужно еще пройтись по всей истории и собрать статистику. В общем, вычисления огромны. Поэтому в некоторых местах реализации пришлось отказаться от ООП ради производительности.
Задача великолепно параллелится, поэтому будет замечательно, если появятся соответствующие методы ускорения.
Результат
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%. Т.е. движение было неопределенным. Так что в данном случае имеем дело с подгонкой.
Выводы
По одному запуску скрипта делать какие-то выводы преждевременно. Инструментарий готов, поэтому нужно позапускать и посмотреть, сколько и какая пара показывает. Возможно, это удобно делать через МультиТестер ночами, чтобы утром разбирать результат.
Если кто-то будет запускать и получит что-то интересное. Или же при множестве запусков ни разу не получит ничего интересного, дайте знать.