Закрыть все ордера

zakryt_vse_orderaДобрый день. При работе с терминалом MetaTrader иногда возникает необходимость быстро закрыть все открытые сделки и уйти с рынка. Если сделок открыто достаточное количество, что закрытие вручную окажется делом продолжительным, за которое трейдер накопит упущенную прибыль. Решить подобную проблему можно двумя способами: быстрее работать руками, написать скрипт, который в автоматическом режиме закроет все ранее открытые ордера.

Если вы новичок в торговле, то возможно вам покажется лучшем первый вариант, тем более, это будет даже полезным с точки зрения изучения и тренировки на терминале MetaTrader. Но если Вы тот самый трейдер, которого уже ничем не удивишь, который торгует большими лотами, для которого важен каждый пип, то есть возможность закрывать все сделки на программном уровне, нажатием пары клавиш, благо, MetaTrader это позволяет.

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


Сегодня поступим намного проще, не будем объяснять и повторяться на том, что прошли ранее. Открываем редактор MetaEditor и создаем скрипт. В мастере создания советников подпишем какие-нибудь данные, да в путь!

Сразу же подметим, что return не будет возвращать ничего. Он просто даст MetaEditor знать, что скрипт завершил свои действия, поэтому значение (0) вычеркиваем, оставив лишь return; .

В задумке код должен звучать так: «До тех пор, пока имеются открытые и отложенные ордера на покупку, открытые и отложенные ордера на продажу, то нужно их закрыть».

Вся работа должна производиться внутри специальной функции int start(). Запишем логическое выражении

Этот код нужно читать следующим образом: «Пока общее количество ордеров равное всем открытым и отложенным ордерам больше или равно нулю, выбираем следующие действия…понижаем общее количество ордеров в счетчике на единичку и проверяем существует ли у нас будущий ордер, с которым мы будем работать (если его не существует — прерываем работу программы!) если ордер выставлен на покупку, то закрываем его с любым тикетом, любым объемом, по любой валютной паре и модификации, с возможным отклонением от котировки в 0 пипов (можно варьировать), если ордер выставлен на продажу, то закрываем его с любым тикетом, любым объемом, по любой валютной паре и модификации, с возможным отклонением от котировки в 0 пипов». Предварительно в начале пропишем общее количество лотов int=OrdersTotal(); . Таким образом наш будущий скрипт приобретет уже вот такой вид:

В принципе, этого кода уже достаточно, чтобы закрывать ордера. Вы даже можете его проверить. скомпилируйте скрипт, нажав на F5, зайдите в демо счет на MetaTrader и откройте несколько сделок в любом направлении (штук 10), затем зайдите в сервис-настройки-советники и разрешите советнику торговать. Затем перетащите скрипт на график и вы увидите, как ордера будут исчезать один за другим увеличивая тем самым маржу!


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

Язык MQL очень гибок и позволяет воплощать практически все идеи. Поэтому, чтобы не ошибиться в выборе скрипта, нам необходимо вывести уведомление о том, что собирается сделать тот или иной скрипт, а трейдер должен одобрить или отклонить последующее исполнение кода. Для этого существуют флаги возврата, находящиеся в файле WinUser32.mqh , для того, чтобы им воспользоваться пропишем следующую строчку перед специальной функцией int start() . эта строчка #include <WinUser32.mqh> . Таким образом у нас появилась возможность при подключении скрипта к графику вывести диалоговое окно. Теперь зададим некоторое условие, которое определяло бы это самое окно через MessageBox. Тогда пропишем еще одно условие:

Теперь, мы избежали некоторых недоразумений, вызванных случайным использованием не того скрипта, добавив проверку. И сейчас при присоединении скрипта к графику у вас появится всплывающее окно, дополнительно спрашивающее, нужно ли закрывать ордера или нет, если вы ответите «ДА» то скрипт начнет свою работу, в противном случае скрипт прекратит свою работу и не будет выполнять никаких торговых операций! Таким образом проблема человеческого фактора сведена к минимуму.

К сожалению, это не единственная причина по которой скрипт выполнит не те действия, которые вы ему указали. Эта причина — быстрая смена котировок. В этом случае могут закрыться не все ордера. В этом случае, вам нужно будет повторно запустить этот скрипт и он закроет незакрытые ордера повторно. Такая ситуация не является редкой, поэтому подобное недоразумение можно исправить дополнив программу следующим кодом:

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

Код скрипта «Закрыть все ордера»

01.11.2010 · Группа авторов · Комментариев нет
Метки: , , , , , ,  · Рубрика: MetaEditor

Комментировать