Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 102

 
STARIJ:

Цена на графике по вертикальной оси снизу вверх, а время и нумерация баров - по горизонтальной оси вправо

Нулевой бар - последний доступный в данный момент. Следующие бары существуют в истории, но для тестера пока отсутствуют. Чуть позже, когда этот бар будет обсчитан, тестер приступит к следующему бару, который и станет для него нулевым.


Значит я правильно понял, как только в тестере появилась цена Open следующего бара - он становится нулевым[0]. И если индикатор сделан так, что он начинает считаться за 500 до текущего[0], значит тестер посчитает индикатор за ~ 2 года (500 баров D1) до текущего [0] бара...

В связи с эти возникает такой вопрос:

Сейчас индикатор построен на обработке события Start() - древняя версия. По ощущению, при тестировании в каждом вызове iCustom() индикатор считается на  предыдущих 500 барах, 1600 прогонов тестера считались полтора часа.
Можно построить индикатор на обработке события OnCalculate(), которое позволяет организовать расчет только нерассчитанных баров до очередного OnCalculate() - но это на реальном потоке данных в текущем времени - как я понял из справочника MQL4.
А в тестере это даст сокращение числа рассчитываемых баров каждом вызове iCustom() ?

 
MikeZv:

Значит я правильно понял, как только в тестере появилась цена Open следующего бара - он становится нулевым[0]. И если индикатор сделан так, что он начинает считаться за 500 до текущего[0], значит тестер посчитает индикатор за ~ 2 года (500 баров D1) до текущего [0] бара...

В связи с эти возникает такой вопрос:

Сейчас индикатор построен на обработке события Start() - древняя версия. По ощущению, при тестировании в каждом вызове iCustom() индикатор считается на  предыдущих 500 барах, 1600 прогонов тестера считались полтора часа.
Можно построить индикатор на обработке события OnCalculate(), которое позволяет организовать расчет только нерассчитанных баров до очередного OnCalculate() - но это на реальном потоке данных в текущем времени - как я понял из справочника MQL4.
А в тестере это даст сокращение числа рассчитываемых баров каждом вызове iCustom() ?


 Индикатор просто написан криво, поэтому он медленный, нужно профессиональное переписывание, тогда он будет считать всю историю и очень быстро.. вот и все.. 

 
Nikolay Ivanov:


 Индикатор просто написан криво, поэтому он медленный, нужно профессиональное переписывание, тогда он будет считать всю историю и очень быстро.. вот и все.. 


Уже переписал ... :)

 

Написал новый индикатор [на OnCalculate()] на основе старого [на Start()], выше был поднят этот вопрос.
Запускаю скрипт сравнения их между собой за 5 лет (период D1) - один в один, все значения совпадают.
Те же самые ICustom() скопировал в эксперт и сделал вывод в файл при тестировании эксперта.
Значения старого индикатора выводятся как в скрипте,  значения нового индикаторов отличаются все !!!
Почему iCustom() в эксперте для индикатора на Start() выводит то же самое, что и в скрипте,
а для индикатора на OnCalculate() вывод в эксперте отличается от вывода в скрипте ?


 

Всем привет.

Ребят, подскажите, кто сталкивался.

Некоторые бинарные брокеры, например, Гранд Капитал, начисляют доход и списывают деньги со счета не через прибыль по сделке, а как поступление на/списание с баланс(а) счета.


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

В связи с этим вопрос - как это можно сделать "в моменте", но по всей истории сделок? То есть интересует меня какая-нибудь (встроенная в MQL4) функция, которая могла бы перебирать все записи типа balance, читать соответственно комментарий и само значение. Что-то я за несколько лет программирования первый раз с такой задачей сталкиваюсь.

 
MikeZv:

Написал новый индикатор [на OnCalculate()] на основе старого [на Start()], выше был поднят этот вопрос.
Запускаю скрипт сравнения их между собой за 5 лет (период D1) - один в один, все значения совпадают.
Те же самые ICustom() скопировал в эксперт и сделал вывод в файл при тестировании эксперта.
Значения старого индикатора выводятся как в скрипте,  значения нового индикаторов отличаются все !!!
Почему iCustom() в эксперте для индикатора на Start() выводит то же самое, что и в скрипте,
а для индикатора на OnCalculate() вывод в эксперте отличается от вывода в скрипте ?


Угадывать можно долго.

Я бы проверил код на неверное преобразование типов данных, дублирование имен переменных (т.е. в старом коде используются имена, которые сейчас являются зарезервированными) - в результате переменная цепляет не те значения, которые должна получать (в первую очередь проверить имена переменных, используемых в OnCalculate - open, high, low, close и т.д. - их в старых кодах можно встретить сплошь и рядом).
А что касается iCustom, то это самый простой вариант, и ошибки здесь скорее всего могут быть связаны с неверно переданными параметрами (опять-таки по причинам, указанным выше).

Принтуйте все значения, либо запускайте в режиме отладки и проверяйте, где идет расхождение.
 
Artyom Kuraev:

Угадывать можно долго.

Я бы проверил код на неверное преобразование типов данных, дублирование имен переменных (т.е. в старом коде используются имена, которые сейчас являются зарезервированными) - в результате переменная цепляет не те значения, которые должна получать (в первую очередь проверить имена переменных, используемых в OnCalculate - open, high, low, close и т.д. - их в старых кодах можно встретить сплошь и рядом).
А что касается iCustom, то это самый простой вариант, и ошибки здесь скорее всего могут быть связаны с неверно переданными параметрами (опять-таки по причинам, указанным выше).

Принтуйте все значения, либо запускайте в режиме отладки и проверяйте, где идет расхождение.
В скрипте вывод обоих индикаторов совпадает.

В эксперт СКОПИРОВАНЫ строки с iCustom() из скрипта. Передаются те же самые параметры.

 
MikeZv:

В эксперт СКОПИРОВАНЫ строки с iCustom() из скрипта. Передаются те же самые параметры.

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

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

Я совершенно не настаиваю ни на чем, а при ответе руководствуюсь своим опытом. Если Вы уверены, что ни один из предложенных мною вариантов не подошел, то просто подождите других ответов или давайте значительно больше исходной информации :)

 
Artyom Kuraev:

Всем привет.

Ребят, подскажите, кто сталкивался.

Некоторые бинарные брокеры, например, Гранд Капитал, начисляют доход и списывают деньги со счета не через прибыль по сделке, а как поступление на/списание с баланс(а) счета.


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

В связи с этим вопрос - как это можно сделать "в моменте", но по всей истории сделок? То есть интересует меня какая-нибудь (встроенная в MQL4) функция, которая могла бы перебирать все записи типа balance, читать соответственно комментарий и само значение. Что-то я за несколько лет программирования первый раз с такой задачей сталкиваюсь.


#define OP_BALANCE 6
#define OP_CREDIT  7

плюс

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)

     

 
Taras Slobodyanik:

плюс

СПАСИБО!

Все сработало!
Причина обращения: