Оценка "будущего" одним числом. Самотестирующиеся индикаторы

 

В процессе разработки одного хитрого индикатора, который делает кучу вычислений и выдаёт вердикт — Buy или Sell, появилось желание заодно оценить правдивость прогноза в реальном времени. Так сказать, провести самотестирование и узнать, с какой примерно вероятностью он сбудется. Индикатор пытается угадать, куда уйдёт цена - вверх или вниз - на фиксированное количество пунктов.
Суть такова: у нас есть текущая цена, есть горизонтальный коридор, образованный двумя линиями на Х пунктов выше и ниже текущей цены (пусть Х=100), и график её последующего движения. Задача: оценить график одним числом, условно назовём его "вероятностью со знаком": от 1 (вверх) до -1 (вниз).
Как же его можно оценить?

Рассмотрим простые случаи.
Пусть цена идёт от значения 0, возрастает и пробивает линию +100. Тогда результат равен +1.
Пусть цена идёт от значения 0, убывает и пробивает линию -100. Тогда результат, очевидно, равен -1. 
Допустим, цена идёт вниз до -20, разворачивается и пробивает +100. Тогда результат будет примерно +0,8. 
Если график беспорядочно колеблется то вверх, то вниз, то результат должен быть около 0. Ни туда, ни сюда.

Если вначале падает до -60, а потом растёт до +80, то как считать? Будем считать, что вероятность ухода вниз при падении (down) равна 0,6. Тогда вероятность "не ухода" равна 1-0,6=0,4. После этого вероятность роста равна 0,8, а с учётом условия "не ухода вниз" равна 0,8*0,4=0,32 (up). Вероятность того, что цена не выйдет за границу ни при первом, ни при втором движении, равна (1-0,6)*(1-0,8)=0,08 (none).

В сумме: up + down + none = 1, пока всё вроде правильно.

Как теперь посчитать эту "вероятность со знаком"? Я думаю, так: result = up – down. Это при none, стремящемся к нулю. Линия рано или поздно куда-нибудь уйдёт.

Собственно, то, что получилось — в аттаче. График индикатора очень дёрганый :D 

У кого-нибудь есть какие-нибудь мысли по этому поводу? Буду рад замечаниям и предложениям. 

Файлы:
 

1. Жене говоришь, что ушёл к любовнице. 

2. Любовнице говоришь, что вернулся к жене.

3. И учиться, учиться и еще раз учиться.

ЗЫ Достоверностью называется; только все там совсем не так.  

 

Этот код начал обрастать всё большим количеством правок, пока не стало ясно, что появление "костылей" — признак изначально неправильной реализации :)

Текущая версия сделана прямо по условию и как-то уже позволяет предварительно оценить перспективность такого подхода. График всё равно заметно дёрганый, с разрывами и скачками к нулю / от нуля, очевидно, это вызвано "пороговым" алгоритмом.

To do:

1. придумать какой-нибудь "гладкий" алгоритм и устранить скачки на графике

2. сделать как можно больше зависимостей в функции (а это же функция?) линейными.

 

_______________________ 

Пользуясь случаем, хотелось бы спросить совета у знатоков: как вы считаете, как лучше рассчитывать индикаторы -

на основе обратной таймсерии ArraySetAsSeries(array,true), с нумерацией от последнего бара к первому, как в старых версиях MQL4,

или на основе прямой таймсерии ArraySetAsSeries(array,false), с нумерацией от первых баров к последним, как в MQL5?

И так, и так получается много путаницы. Хотя со вторым методом путаницы меньше, но легко выхватить "array index out of range" при обращении типа double cprice=open[rates_total-1].

Файлы:
 
Интересная идея.