Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 590

 

Здравствуйте!

 Покажите, пожалуйста, как можно запретить советнику, основанному на индикаторе Triple Exponential Average, открывать позиции, если последняя сделка выбита по SL?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

MQL5
В обычном режиме советник работает без нареканий, как только начинаю оптимизацию - на каждый проход жалоба что выход на пределы массива.

Но дело в том что он даже не исполняет код. Я расставил Print'ы по программе, никакого вывода, просто ошибка на каждый прогон, что выход. 

Почему Print не работает?

 
Roman Sharanov:

MQL5
В обычном режиме советник работает без нареканий, как только начинаю оптимизацию - на каждый проход жалоба что выход на пределы массива.

Но дело в том что он даже не исполняет код. Я расставил Print'ы по программе, никакого вывода, просто ошибка на каждый прогон, что выход. 

Почему Print не работает?

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

НО! Делайте всё это в тестере в визуальном реиме, а не оптимизаторе - в оптимизаторе (и тестере в не визуальном режиме) принты все отключены для ускорения.

 
Artyom Trishkin:

Выход за пределы массива происходит до того, как дойдёт до Print().

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

НО! Делайте всё это в тестере в визуальном реиме, а не оптимизаторе - в оптимизаторе (и тестере в не визуальном режиме) принты все отключены для ускорения.

вот и проблема что при любых параметрах  в визуале все работает, а на оптимизации при любых выход за пределы

 
Roman Sharanov:

вот и проблема что при любых параметрах  в визуале все работает, а на оптимизации при любых выход за пределы

В массиве что лежит? Я лишь могу догадываться, что либо данных в массиве ещё нету, либо он имеет меньший размер, чем вы думаете. Есть проверки в программе на размер массива?

 
Artyom Trishkin:

В массиве что лежит? Я лишь могу догадываться, что либо данных в массиве ещё нету, либо он имеет меньший размер, чем вы думаете. Есть проверки в программе на размер массива?

Последние N, у меня 500, значений macd, а пределы цикла строго ограничены и никак не могу быть меньше 0 и больше N, это я и отладкой прогонял и на бумаге считал

 
Roman Sharanov:

Последние N, у меня 500, значений macd, а пределы цикла строго ограничены и никак не могу быть меньше 0 и больше N, это я и отладкой прогонял и на бумаге считал

Вы уверены, что массив заполнен данными когда вы к нему обращаетесь? Есть проверка на доступность данных и на то, что массив имеет нужную величину?

То, что написано и посчитано на бумажке, вовсе не значит, что оно совпадает с тем, что получил (не получил) советник.

 
Artyom Trishkin:

Вы уверены, что массив заполнен данными когда вы к нему обращаетесь? Есть проверка на доступность данных и на то, что массив имеет нужную величину?

То, что написано и посчитано на бумажке, вовсе не значит, что оно совпадает с тем, что получил (не получил) советник.

да, в самом начале, до все операций, копируется из буфера

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

Есть простая формула которая работает для котировок с 5 знаками и депозита в usd

Лот x прибыль в пунктах = прибыль в $.

Если это бай и в сделке есть свопы и комиссии то цена безубытка будет немного выше цены открытия
(Если свопов и комиссий не, то безубыток это цена открытия)

Но если инструмен экзотический, или котировка 4 или 2 знака, или валюта депозита фунты. То формула выше не поможет.
Есть ли универсальная формула?
 
Roman Sharanov:

да, в самом начале, до все операций, копируется из буфера

Копируется. А сколько скопировано проверяется?

Если вы используете индикатор со сглаживанием, то для его расчёта требуется несколько больше баров, чем вы предполагаете. Поэтому то, что вы скопировали, ещё не говорит о том, что данные скопированы и доступны в полном объёме.

Вам проще сделать проверку на размер массива и, если он не имеет требуемый объём, то выходить из OnTick()