Хай всем!
Помогите переписать хороший скрипт по выставлению ордеров по сетке с языка MQL4 в MQL5.
Буду признателен!
поменять extern на input
и start() на OnTick() (поздний фикс: OnStart() это-ж скрипт, не советник)
для MT5 - include библиотеку от fxsaber MT4Orders
и вроде как всё - дальше возможно справитесь..
---
сам автор к сожалению не сможет помочь :-(
если кому есть что добавить, вот код чтобы видно и не скачивать отдельным файлом (он короткий)
#property copyright "Copyright © 2013, Хлыстов Владимир" #property link "cmillion@narod.ru" #property show_inputs //-------------------------------------------------------------------- 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-FirstStop extern double FirstSellLimit = 0; //цена выставления первого SellLimit ордера, если 0 то первый SellLimit будет выставлен по цене Ask+FirstStop 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 = "http://cmillion.narod.ru"; //-------------------------------------------------------------------- string txt; int n,slippage=3,STOPLEVEL; datetime expiration; //-------------------------------------------------------------------- int start() { //=========================================================================================================================================== //=========================================================================================================================================== //=========================================================================================================================================== /*============================================*/if (IsTesting() && OrdersTotal()>0) return(0);/*===============================================*/ //=========================================================================================================================================== //=========================================================================================================================================== //=========================================================================================================================================== if (Expiration>0) expiration=TimeCurrent()+Expiration; else expiration=0; Comment("Запуск скрипта OpenStopOrderNetTime ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL); if (Digits==3 || Digits==5) slippage=30; while (TimeCurrent()<TimeSet) { Sleep(1000); Comment("Скрипт выставления сетки отложенных ордеров Copyright © 2013 cmillion@narod.ru\n", TimeToStr(TimeCurrent(),TIME_SECONDS)," До выставления сетки осталось ",TimeToStr(TimeSet-TimeCurrent(),TIME_SECONDS)); RefreshRates(); } double PriceBS,PriceBL,PriceSS,PriceSL; double LOTs=LotStop; double LOTl=LotLimit; if (FirstBuyStop==0) PriceBS = NormalizeDouble(Ask+FirstStop*Point,Digits); else PriceBS = NormalizeDouble(FirstBuyStop,Digits); if ((PriceBS-Ask)/Point<STOPLEVEL) {Alert("Первый ордер BuyStop не может быть установлен ближе чем ",STOPLEVEL," п");return(0);} if (FirstSellStop==0) PriceSS = NormalizeDouble(Bid-FirstStop*Point,Digits); else PriceSS = NormalizeDouble(FirstSellStop,Digits); if ((Bid-PriceSS)/Point<STOPLEVEL) {Alert("Первый ордер SellStop не может быть установлен ближе чем ",STOPLEVEL," п");return(0);} if (FirstBuyLimit==0) PriceBL = NormalizeDouble(Bid-FirstLimit*Point,Digits); else PriceBL = NormalizeDouble(FirstBuyLimit,Digits); if ((Bid-PriceBL)/Point<STOPLEVEL) {Alert("Первый ордер BuyLimit не может быть установлен ближе чем ",STOPLEVEL," п");return(0);} if (FirstSellLimit==0) PriceSL = NormalizeDouble(Ask+FirstLimit*Point,Digits); else PriceSL = NormalizeDouble(FirstSellLimit,Digits); if ((PriceSL-Ask)/Point<STOPLEVEL) {Alert("Первый ордер SellLimit не может быть установлен ближе чем ",STOPLEVEL," п");return(0);} double Step_Stop=StepStop; double Step_Limit=StepLimit; if (Buy) OPENORDER (OP_BUY,Ask,LotMarket,0); if (Sell) OPENORDER (OP_SELL,Bid,LotMarket,0); for (int i=1; i<=Orders; i++) { if (BuyStop||SellStop) { Step_Stop=Step_Stop*K_StepStop; if (BuyStop) { OPENORDER (OP_BUYSTOP,PriceBS,LOTs,i); PriceBS = NormalizeDouble(PriceBS+Step_Stop*Point,Digits); } if (SellStop) { OPENORDER (OP_SELLSTOP,PriceSS,LOTs,i); PriceSS = NormalizeDouble(PriceSS-Step_Stop*Point,Digits); } } LOTs=LOTs*K_LotStop+Plus_LotStop; if (BuyLimit||SellLimit) { Step_Limit=Step_Limit*K_StepLimit; if (BuyLimit) { OPENORDER (OP_BUYLIMIT,PriceBL,LOTl,i); PriceBL = NormalizeDouble(PriceBL-Step_Limit*Point,Digits); } if (SellLimit) { OPENORDER (OP_SELLLIMIT,PriceSL,LOTl,i); PriceSL = NormalizeDouble(PriceSL+Step_Limit*Point,Digits); } } LOTl=LOTl*K_LotLimit+Plus_LotLimit; } Comment("Скрипт закончил свою работу, выставлено ",n," ордеров ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); return(0); } //-------------------------------------------------------------------- void OPENORDER(int ord,double Price,double LOT,int i) { int error,err; double SL,TP; while (true) { error=true; if (ord==OP_BUY) { if (takeprofit!=0) TP = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Blue); } if (ord==OP_SELL) { if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Red); } if (ord==OP_BUYSTOP) { if (takeprofit!=0) TP = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Blue); } if (ord==OP_SELLSTOP) { if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Red); } if (ord==OP_SELLLIMIT) { if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Blue); } if (ord==OP_BUYLIMIT) { if (takeprofit!=0) TP = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0; error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,Order_Comment,Magic,expiration,Red); } if (error==-1) { txt=StringConcatenate(txt,"\nError ",GetLastError()); if (ord==OP_BUY) txt = StringConcatenate(txt," OPENORDER BUY Price =",DoubleToStr(Price,Digits),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),") STOPLEVEL=",STOPLEVEL); if (ord==OP_SELL) txt = StringConcatenate(txt," OPENORDER SELL Price =",DoubleToStr(Price,Digits),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),") STOPLEVEL=",STOPLEVEL); if (ord==OP_BUYSTOP) txt = StringConcatenate(txt," OPENORDER BUYSTOP ", i," Ask =",DoubleToStr(Ask,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),") STOPLEVEL=",STOPLEVEL); if (ord==OP_SELLSTOP) txt = StringConcatenate(txt," OPENORDER SELLSTOP ", i," Bid =",DoubleToStr(Bid,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),") STOPLEVEL=",STOPLEVEL); if (ord==OP_SELLLIMIT) txt = StringConcatenate(txt," OPENORDER SELLLIMIT ",i," Ask =",DoubleToStr(Ask,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),") STOPLEVEL=",STOPLEVEL); if (ord==OP_BUYLIMIT) txt = StringConcatenate(txt," OPENORDER BUYLIMIT ", i," Bid =",DoubleToStr(Bid,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),") STOPLEVEL=",STOPLEVEL); Print(txt); Comment(txt," ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); err++;Sleep(1000);RefreshRates(); } else { Comment("Ордер ",error," успешно выставлен ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); n++; return; } if (err>attempts) return; } return; }
поменять extern на input
и start() на OnTick() (поздний фикс: OnStart() это-ж скрипт, не советник)
для MT5 - include библиотеку от fxsaber MT4Orders
и вроде как всё - дальше возможно справитесь..
---
сам автор к сожалению не сможет помочь :-(
если кому есть что добавить, вот код чтобы видно и не скачивать отдельным файлом (он короткий)
Благодарю!!!
Буду пробовать)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хай всем!
Помогите переписать хороший скрипт по выставлению ордеров по сетке с языка MQL4 в MQL5.
Буду признателен!