Осциллятор Equity средствами MQL5 - страница 3

 

DV2010:

...Renat, показ индикатора на графике после завершения тестирования, как я понимаю, происходит именно на основании произведенных во время тестирования расчетов и заполнения массива индикатора. Но что значит, что результата из тестера на график кастомного индикатора из тестера не переносятся?

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

Индикатор должен сам себя считать самостоятельно.

 

sergey1294:
Отвечу вам одно, пока не появиться режим визуализации решить вашу задачу не так просто. Есть одно решение, это записывать данные эквити в файл при тесте. потом данные из этого файла записать в буфер индикатора тем самым построить график эквити.

Но где именно записать данные в буфер?

Я считал, что записать их можно только в OnCalculated, и пытался реализовать именно таким образом.

 
DV2010:

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


Пишите значения эквити в файл. Потом стройте индикатор по этим значениям. Но файл данных придется переносить вручную, так как при тестировании файлы пишутся в папку имя_агента/MQL5/Files.
 
DV2010:

Но где именно записать данные в буфер?

Я считал, что записать их можно только в OnCalculated, и пытался реализовать именно таким образом.

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

 
Renat:

Расчетные данные индикаторов из тестер-агента на график терминала конечно же не переносятся. Не будем же мы сотни мегабайт расчетных данных передавать в терминал, чтобы они сразу же (и на следующем же тике) были перерасчитаны индикатором (вызов функции OnCalculate никто не отменял).Индикатор должен сам себя считать самостоятельно.

Renat, индикатор должен сам себя считать самостоятельно

Поэтому в методе OnCalculated я и инициализирую значения массива индикатора определенными значениями . Но почему если ценами линию индикатора инициализировать (построить) таким образом удается, в то время, как значениями Equity – нет?

 
DV2010:

Renat, индикатор должен сам себя считать самостоятельно

Поэтому в методе OnCalculated я и инициализирую значения массива индикатора определенными значениями . Но почему если ценами линию индикатора инициализировать (построить) таким образом удается, в то время, как значениями Equity – нет?

потому что цены имеют историю а эквити нет. По этому для эквити вам нужно строить собственную историю записав ее в файл.
 
Rosh: Пишите значения эквити в файл. Потом стройте индикатор по этим значениям. Но файл данных придется переносить вручную, так как при тестировании файлы пишутся в папку имя_агента/MQL5/Files.

Писать в файл, как я понял, нужно в OnInit эксперта на основе определения через AccountInfoDouble(ACCOUNT_EQUITY), а считывать из файла - в OnCalculated индикатора.

Но почему же тогда данные по изменяющейся Equty  через через AccountInfoDouble(ACCOUNT_EQUITY) доступны непосредственно в OnCalculated?

Код в таком случае получится слишком громоздким…..

Не могу понять… В OnCalculated в Print AccountInfoDouble(ACCOUNT_EQUITY) выдает какое-то значение.

Что же именно мешает его тут же присвоить массиву значений Индикаторов?

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

 

sergey1294:
потому что цены имеют историю а эквити нет. По этому для эквити вам нужно строить собственную историю записав ее в файл.

Но как же тогда динамика Equty вообще выводится через AccountInfoDouble(ACCOUNT_EQUITY) в OnCalculated Индикатора (а не только в OnTick эксперта)? 

Или  OnCalculated Индикатора работает по-разному в режиме тестирования и в режиме отображения?

 

Объявите на глобальном уровне в эксперте два массива Equity[] и Time[]

Заносите значение эквити и время в соответствующем массиве при тестировании эксперта.

Скриптом прочитать файл по завершении тестирования и построить объектами эквити на на нужном чарте.

Для Ваших целей именно такой способ более всего и подходит, не понимаю - зачем Вам нужен индикатор.

 
DV2010:

 

Писать в файл, как я понял, нужно в OnInit эксперта на основе определения через AccountInfoDouble(ACCOUNT_EQUITY), а считывать из файла - в OnCalculated индикатора.

Но почему же тогда данные по изменяющейся Equty  через через AccountInfoDouble(ACCOUNT_EQUITY) доступны непосредственно в OnCalculated?

Код в таком случае получится слишком громоздким…..

Не могу понять… В OnCalculated в Print AccountInfoDouble(ACCOUNT_EQUITY) выдает какое-то значение.

Что же именно мешает его тут же присвоить массиву значений Индикаторов?

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

Даже не знаю как вам объяснить. AccountInfoDouble(ACCOUNT_EQUITY) хранит последнее значение эквити. После тестирования как сказал Ренат индикатор инициилизируется заново и пересчитывается. По этому данные эквити накопленные в буфере индикатора за время прогона стираются.