советник не проходит валидацию.. - страница 3

 
Artyom Trishkin #:

Так проверять же нужно (хотя бы приблизительно) хватит ли средств на такую позицию после срабатывания...

Сложно (если вообще возможно) подсчитать что будет когда цена доберётся до отложки, но хотя бы на текущих данных проверять.

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

 
Artyom Trishkin #:

Так проверять же нужно (хотя бы приблизительно) хватит ли средств на такую позицию после срабатывания...

Сложно (если вообще возможно) подсчитать что будет когда цена доберётся до отложки, но хотя бы на текущих данных проверять.

Дорогая проверка, к сожалению.

 
fxsaber #:

Дорогая проверка, к сожалению.

OrderCheck не подойдёт?

 
Artyom Trishkin #:

OrderCheck не подойдёт?

Нет, там гораздо сложнее.

 
fxsaber #:

Нет, там гораздо сложнее.

Я знаю и понимаю. Имел в виду OrderCheck как дешёвую приблизительную подмену.

Если сейчас нет возможности открыть позицию лотом 10.0, то и в будущем, вероятнее всего, её тоже нельзя будет открыть. А если и можно, то не страшно, что сейчас не получилось - потом получится. А если нельзя будет потом, то и хорошо - валидатор ругаться не будет.

А на реальном счёте можно и дорогой подсчёт использовать.

 

Можно не держать больших и/или много отложек на большой дистанции.

Запоминать "виртуально" на стороне терминала и по мере приближения цены выставлять. Там посчитать допустимость объема проще

Разумное техническое решение; но "не для всех," новичок в лёт не напишет; и тестер всё-таки на массу должен ориентироваться

 
fxsaber #:

Подтвердилось.

Как-то надо обходить.

Код воспроизведения.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

int OnInit()
{
  return(!(OrderSend(_Symbol, OP_BUYLIMIT, 10, Ask - 100 * _Point, 0, 0, 0) &&
           OrderSend(_Symbol, OP_SELLLIMIT, 10, Bid + 100 * _Point, 0, 0, 0))); 
}
Причина обращения: