Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Скрипты

Broker Spec Inspector - скрипт для MetaTrader 5

Seckin Erkut
Seckin Erkut
Algo Trading Systems Developer. I develop strategies and portfolios not by hypes but from solid academic literature.

I put my money where my mouth is, be sure to check the performance of my EAs through my signals.
| Russian English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Просмотров:
12
Рейтинг:
(2)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Каждый трейдер, использующий автоматическую торговлю, рано или поздно сталкивается с ошибкой 130 «Недопустимые стоп-ордера» или с ситуацией, когда ордер просто так и не появляется. Обычно в таких случаях вину возлагают на советник. Однако в большинстве случаев советник работает исправно, а сервер просто придерживается ограничений, предусмотренных договором
, который никогда не отображается в окне терминала: уровень стопов, уровень заморозки или минимальный шаг лота, который не учитывается при расчете размера вашей позиции. Эти ограничения различаются в зависимости от инструмента и брокера и меняются без
предупреждения. Этот скрипт выводит их на экран.
Загрузите его на любой график. Он только считывает технические характеристики — никогда ничего не открывает, не изменяет и не закрывает, и нет необходимости включать алгоритмическую торговлю. Укажите список символов, разделенных запятыми, или оставьте поле ввода пустым, и он пройдет по вашему списку в «Market Watch».

ЧТО ОНО ПЕЧАТАЕТ

Для каждого символа: цифры, точка, шаг и стоимость, размер контракта, минимальный / шаг / максимальный лот, спред и его плавающий характер, режим исполнения, своп по длинной и короткой позиции, а также маржа, необходимая для одного минимального лота, в соотношении с вашей текущей свободной маржой. Затем часть, отвечающая на сам вопрос:

Предупреждение о брокерах

--- XAUUSD (bid 4402.15 / ask 4402.63) ---------------------
stops level 350 pts | freeze level 0 pts | EFFECTIVE band 351 pts
VERDICT: a stop/pending placed 100 pts from price would be REJECTED as 'Invalid price' (band is 351 pts)
buy at ask 4402.63: you asked SL 4401.63 -> nearest legal SL 4399.12 (moved out)
Полезная информация содержится в последней строке. Она не просто сообщает, что стоп-ордер на 100 пунктов не срабатывает для данного инструмента, но и указывает точный уровень, который сервер принял бы вместо него.
ПРАВИЛО
Два отдельных ограничения могут привести к отклонению стоп-ордера, а инструменты, проверяющие только одно из них, дают неверный результат у половины брокеров:
double MinStopDistance(const string sym)
{
long stops = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL);
long freeze = SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL);
long band = (stops > freeze ? stops : freeze) + 1;
return band * SymbolInfoDouble(sym, SYMBOL_POINT);
}

В этих четырех строках заключены три решения.
Этот диапазон представляет собой БОЛЬШЕЕ из двух ограничений, поскольку некоторые серверы оставляют значение freeze равным нулю и принудительно останавливают процесс, в то время как другие поступают наоборот. Выбор большего значения позволяет учесть оба варианта, не зная, на каком именно сервере вы находитесь.
Добавляется один балл, поскольку уровень, расположенный точно на границе диапазона, по-прежнему отклоняется многими серверами. Задокументированное правило гласит «ближе, чем», реализованное правило часто звучит как «ближе, чем или равно», а один балл ничего не стоит.
Результат возвращается в единицах PRICE, а не в пунктах. Именно это необходимо при расчете фактического уровня стопа, и это устраняет путаницу между пунктами и пунктами, которая приводит к ошибке в десять раз при работе с 5-значными символами.
ИСПОЛЬЗУЙТЕ ЭТО В СВОЕМ EA
Вторую функцию стоит скопировать. Она принимает нужную вам точку остановки и возвращает ближайшую точку, которую примет сервер, с правильной стороны цены:
double LegalStopLoss(const string sym, const bool isBuy,
const double price, const double wanted)
{
double dist = MinStopDistance(sym);
int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
double sl = wanted;
if(isBuy) { if(price - sl < dist) sl = price - dist; }
else { if(sl - price < dist) sl = price + dist; }
return NormalizeDouble(sl, digits);
}

Остановка, которая уже является законной, возвращается без изменений, поэтому можно безопасно прокладывать маршрут через каждую остановку. Объединение существующих вычислений занимает всего одну строку:
double sl = LegalStopLoss(_Symbol, true, ask, ask - atr * 1.5);
Это особенно важно в случаях, когда волатильность высока по сравнению с диапазоном. Стоп-ордер на основе ATR, который подходит для пары EURUSD, может оказаться внутри диапазона при торговле золотом или индексами во время спокойной сессии — именно в такие моменты отскок может застать вас врасплох, ведь вчера тот же код работал нормально.

ПРИМЕЧАНИЯ ПО ЧТЕНИЮ РЕЗУЛЬТАТОВ

Широкая полоса не означает, что брокер создает трудности. Обычно она отражает то, как определяется цена и осуществляется хеджирование данного инструмента, и именно это является причиной того, что советник для скальпинга, работающий на одном сервере, перестает работать на другом, причем без изменения ни одной строки кода.
Перед миграцией сравните данные. Экспорт в формат CSV включен по умолчанию и записывает файл BrokerSpecs.csv в папку MQL5\Files; в каждой строке для каждого символа указываются полоса, минимальное расстояние до стопа и ближайший допустимый уровень. Запустите скрипт для двух брокеров, сравните файлы бок о бок — и различия, на отладку которых у вас ушла бы неделя, станут видны за минуту.
Перед тем как изменять размер позиции, проверьте маржу. Столбец «Маржа» указан для одного минимального лота. Если это число уже близко к вашей свободной марже, размер вашей позиции имеет верхний предел, который вы еще не учли.

Символы должны присутствовать в окне «Market Watch» и должны иметь как минимум один тик. Если для символа нет данных о тиках, откройте его график один раз и запустите процедуру снова.


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/76178

Session Opening Range Breakout EA Session Opening Range Breakout EA

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

Reverse RSI Bands Reverse RSI Bands

«Reverse RSI Bands» — это опережающий индикатор, который математически реконструирует формулу RSI. Он выводит точные ценовые диапазоны целевых значений непосредственно на основном графике, показывая в режиме реального времени, при какой именно цене RSI достигнет указанных вами уровней перекупленности или перепроданности.

Custom Simple Moving Average Custom Simple Moving Average

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

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.