Скрипт cm_script_OpenGread для МТ4

paukovitch

Общаюсь с выгодой
Регистрация
9 Окт 2018
Сообщения
1,996
Поблагодарили
552
Поинты
8.00
Пол
Муж.
Универсальный скрипт для установки отложенных ордеров.
Тут есть есть все, что нужно: и лимитные, и стоповые в любых направлениях; есть открытие через определенное количество пунктов, и есть открытие по определенной цене. Может быть, если бы было добавлена возможность открытия в определенное время, то это был бы суперуниверсальный скрипт. К слову сказать, время жизни отложенных ордеров тоже тут заложен.
Собственно, чтобы детальнее рассмотреть его, то лучше познакомиться с настройками.

extern datetime TimeSet = D'2013.10.01 00:00:00'; //Время выставления ордеров, если текущее время больше установленного, то выставляются сразу
extern bool Buy = true; //открыть Buy ордер
extern bool Sell = true; //открыть Sell ордеа
extern bool BuyStop = true; //открыть BuyStop ордера
extern bool BuyLimit = true; //открыть BuyLimit ордера
extern bool SellStop = true; //открыть SellStop ордера
extern bool SellLimit = true; //открыть SellLimit ордера
extern string __ = "";
extern double FirstBuyStop = 0; //цена выставления первого BuyStop ордера, если 0 то первый BuyStop будет выставлен по цене Ask+FirstStop
extern double FirstSellStop = 0; //цена выставления первого SellStop ордера, если 0 то первый SellStop будет выставлен по цене Bid-FirstStop
extern double FirstBuyLimit = 0; //цена выставления первого BuyLimit ордера, если 0 то первый BuyLimit будет выставлен по цене Bid-FirstLimit
extern double FirstSellLimit = 0; //цена выставления первого SellLimit ордера, если 0 то первый SellLimit будет выставлен по цене Ask+FirstLimit
extern int FirstStop = 100; //расстояние (в пунктах) от текущей цены до первого Stop ордера в случае First..Stop=0
extern int FirstLimit = 50; //расстояние (в пунктах) от текущей цены до первого Limit ордера в случае First..Limit=0
extern int StepStop = 30; //расстояние (в пунктах) между Stop ордерами
extern double K_StepStop = 1; //коэффициент расширения сетки
extern int StepLimit = 30; //расстояние (в пунктах) между Limit ордерами
extern double K_StepLimit = 1; //коэффициент расширения сетки
extern string _ = "";
extern int Orders = 5; //кол-во ордеров сетки
extern double LotMarket = 0.5; //объем рыночных ордеров
extern double LotStop = 0.5; //объем первого Stop ордера
extern double K_LotStop = 1; //умножение лота Stop ордеров
extern double Plus_LotStop = 0; //добавление лота Stop ордеров
extern double LotLimit = 0.1; //объем первого Limit ордера
extern double K_LotLimit = 2; //умножение лота Limit ордеров
extern double Plus_LotLimit = 0; //добавление лота Limit ордеров
extern int stoploss = 50; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 100; //уровень выставления TP, если 0, то TP не выставляется
extern int Expiration = 36000; //Срок истечения отложенного ордера в секундах, если 0, то срок не ограничен (86400 - сутки)
extern int attempts = 10; //кол-во попыток открытия ордера
extern int Magic = 0; //уникальный номер ордера
extern string Order_Comment = "https://cmillion.ru";

Начнем:
1.
extern bool Buy = true; //открыть Buy ордер
extern bool Sell = true; //открыть Sell ордеа

Эти строки регулируют возможность открытия. Если в обоих строках будет стоять false, то скрипт вообще не выставит ни чего и выдаст сообщение, что он завершил свою работу. Понятно, что если разрешено будет продавать, то на покупку ордера не откроются.
2.
extern bool BuyStop = true; //открыть BuyStop ордера
extern bool BuyLimit = true; //открыть BuyLimit ордера
extern bool SellStop = true; //открыть SellStop ордера
extern bool SellLimit = true; //открыть SellLimit ордера

Строки "разрешения собственных желаний". Если в настройках будет выставлен параметр true как сейчас в первых шести строках, то скрипт выставит и лимитные и стоповые сетки в обе стороны.
3.
extern double FirstBuyStop = 0; //цена выставления первого BuyStop ордера, если 0 то первый BuyStop будет выставлен по цене Ask+FirstStop
extern double FirstSellStop = 0; //цена выставления первого SellStop ордера, если 0 то первый SellStop будет выставлен по цене Bid-FirstStop
extern double FirstBuyLimit = 0; //цена выставления первого BuyLimit ордера, если 0 то первый BuyLimit будет выставлен по цене Bid-FirstLimit
extern double FirstSellLimit = 0; //цена выставления первого SellLimit ордера, если 0 то первый SellLimit будет выставлен по цене Ask+FirstLimit

Эти четыре строки устанавливают именно ЦЕНУ установки первого ордера. В этом скрипте сетка устанавливается не в указанном диапазоне, а отталкиваясь от первого ордера и с учетом их количества. (Количество будет рассмотрено дальше).

Но что значат в каждой строке слова "если 0 то первый BuyStop будет выставлен по цене Ask+FirstStop"?
FirstStop и FirstLimit,
это первые лимитные и стоповые ордера, но выраженные в пунктах от текущей цены.
Об этом следующие две строки.

4.
extern int FirstStop = 100; //расстояние (в пунктах) от текущей цены до первого Stop ордера в случае First..Stop=0
extern int FirstLimit = 50; //расстояние (в пунктах) от текущей цены до первого Limit ордера в случае First..Limit=0


Дальше идут параметры самой сетки.

5.
extern int StepStop = 30; //расстояние (в пунктах) между Stop ордерами
extern double K_StepStop = 1; //коэффициент расширения сетки
extern int StepLimit = 30; //расстояние (в пунктах) между Limit ордерами
extern double K_StepLimit = 1; //коэффициент расширения сетки


Если коэффициент расширения сетки будет "1", то расстояние в пунктах между ордерами будет "30"(как в данном примере). Но если коэффициент расширения будет (например) "2", то второй от первого ордера будет на расстоянии 30 пп, а третий от второго уже на 60, тогда четвертый от третьего на 120. Думаю принцип понятен.

6.
extern double LotMarket = 0.5; //объем рыночных ордеров
extern double LotStop = 0.5; //объем первого Stop ордера
extern double K_LotStop = 1; //умножение лота Stop ордеров
extern double Plus_LotStop = 0; //добавление лота Stop ордеров
extern double LotLimit = 0.1; //объем первого Limit ордера
extern double K_LotLimit = 2; //умножение лота Limit ордеров
extern double Plus_LotLimit = 0; //добавление лота Limit ордеров


В этом блоке так же как и с расширением сетки, только действия производятся с лотами.

7.
extern int stoploss = 50; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 100; //уровень выставления TP, если 0, то TP не выставляется


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

8.
extern int attempts = 10; //кол-во попыток открытия ордера


Судя по всему, этот параметр заставляет скрипт трудиться над вашим заданием, пока оно не будет выполнено. :D


9.
extern int Magic = 0; //уникальный номер ордера


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

Пропустил одну важную строчку.
10.
extern int Expiration = 36000; //Срок истечения отложенного ордера в секундах, если 0, то срок не ограничен (86400 - сутки)

Время жизни отложенных ордеров


В общем скрипт интересный.
 

Вложения

  • cm_script_OpenGread_30.12.13.mq4
    12.2 KB · Просмотры: 13

paukovitch

Общаюсь с выгодой
Регистрация
9 Окт 2018
Сообщения
1,996
Поблагодарили
552
Поинты
8.00
Пол
Муж.
По поводу жизни отложенных ордеров, появились некоторые сомнения. Так как раньше я просто использовал скрипт для установки сети, а ненужные потом просто удалял самостоятельно. Но при описании скрипта оказалось нужно обратить на все параметры, и я попробовал выставить сетку с временем жизни 1 минута.
Ну что ж сеть сама не удалилась... пришлось её удалять самому. И остались метки в местах удаленных отложников.
метки.jpg

Может это и будет кому-то полезным, чтобы потом можно проанализировать свою работу.
 
Сверху