Индикаторы: Предсказание цены методом ближайшего соседа (с учетом взвешенных коэффициентов корреляции) - страница 3

 
Amos Tsopotsa #:

Этот код нуждается в незначительных улучшениях, но OKjustask ваша идея имеет смысл

Я внес очень незначительные улучшения в код:

  • Добавил переменную в глобальной области видимости для b, и
  • добавив переменную lastPatternStartTime, условие, которое сравнивает ее с временем начала нового паттерна и вызывает ChartRedraw(), если они не совпадают.
(Из того, что мне удалось обнаружить за несколько часов тестирования, вертикальная линия хаоса появлялась, когда был найден новый паттерн).
 

Еще пара небольших улучшений:

  • Изменил OnInit() с void на int, так что теперь он возвращает INIT_SUCCEEDED,
  • Добавлена глобальная переменная GlobalVariable (GV), хранящая первое будущее значение цены индикатора (CopyBuffer() не работает в советнике с "будущими значениями индикатора Buffer "), и
  • добавлена функция OnDeinit(), при которой GV автоматически удаляется из терминала.

Цель этих изменений - сделать индикатор более подходящим для автоматической торговли. Если вам нужно больше значений будущей цены для ваших целей, просто пройдитесь по барам с 0 по 48 в конце кода и обновите значение GV.

 
Ryan L Johnson #:


  • Добавлена терминальная GlobalVariable (GV), которая хранит первое будущее значение цены индикатора(CopyBuffer() не работает в советнике с "будущими значениями индикатора Buffer"),

Цель этих изменений - сделать индикатор более подходящим для автоматической торговли. Если вам нужно больше значений будущей цены для ваших целей, просто пройдитесь по барам с 0 по 48 в конце кода и обновите значение GV.

Почему так? Вы можете получить доступ к любым значениям из буферов индикатора, даже из будущего.
MQL5 Book: Getting timeseries data from an indicator: CopyBuffer / Creating application programs
MQL5 Book: Getting timeseries data from an indicator: CopyBuffer / Creating application programs
  • www.mql5.com
An MQL program can read data from the indicator's public buffers by its handle. Recall that in custom indicators, such buffers are arrays specified...
 
Stanislav Korotky #:
Почему так? Вы можете получить доступ к любым значениям из буферов индикаторов, даже из будущего.

Я смог сделать это в индикаторах, но не в советниках. Есть ли у вас другой пример/статья, в которой это делается в советнике, пожалуйста?

 
Ryan L Johnson #:

Я смог сделать это в индикаторах, но не в советниках. Есть ли у вас другой пример/статья, в которой это делается в советнике, пожалуйста?

Пожалуйста, не обращайте внимания на мое сообщение #24. Я подозреваю, что использовал неправильную форму Copybuffer() в советнике. Правильный вариант выглядит следующим образом:

"[I]в параметрах CopyBuffer ( первая форма) необходимо задатьсмещение, равное (- N)..."

int CopyBuffer(int handle, int buffer, int offset, int count, double &array[])
 

@Stanislav Korotky, Спасибо, что направили меня к документации. Первая форма" очень полезна для копирования будущих значений буфера - особенно на пользовательских графиках.

@Vladimir, Спасибо, хоть и с запозданием, за выложенный исходный код этого индикатора. Я даже не представлял, насколько актуальны сегодня такие ценовые паттерны десятилетней давности. Я использовал его, чтобы поймать 2 выигрышные сделки прямо из ворот. Одна была примерно в 1999 году, а другая - в 2005-м.

Вот код индикатора, который я использую сейчас (с удаленным GV):

 

Вполне возможно, что может возникнуть новый ценовой паттерн с тем же временем начала, но другим временем окончания, чем у текущего паттерна, поэтому я добавил время окончания паттерна в условную функцию ChartRedraw() - прилагается. Либо разница во времени начала, либо разница во времени окончания вызовет ChartRedraw().

 

Этот индикатор можно протестировать

Необходимо добавить в индикатор две вертикальных линии - начало расчета и конец расчета

И сразу можно увидеть где будет красная линия и как сформировался график, то есть работоспособен ли прогноз?

 
Renat Akhtyamov вертикальные линии - начало расчета и конец расчета

И сразу видно, где будет красная линия и как сформировался график, т.е. работает ли прогноз?

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