//+------------------------------------------------------------------+ //| Locker.mq4 | //| Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷ | //| vitalya_1983@list.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷" #property link "vitalya_1983@list.ru" extern double NeedProfit = 0.001, //Íà ñêîëüêî ïðîöåíòîâ Ìû óâåëè÷èâàåì áàëàíñ? StepLot = 0.2, //Âòîðè÷íûå ëîòû Lot = 0.5; //Ñòàðòîâûé ëîò extern int Step = 50; //Øàãè ìåæäó ëîêèðîâàíèåì extern bool spasenie = true; string text = "Locker.mq4"; int i,ticket1,ticket2; double ChekPoint,Profit1,Profit2,HighBuy,LowSell; bool mode_buy,mode_sell,Stop=false; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { double buy_profit=0; double sell_profit=0; //---- for (i=OrdersTotal();i>=1;i--) //Ñþäà ìû âòûêàå èíäèêàòîðà { OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES); if(OrderType() == OP_SELL && OrderSymbol () ==Symbol()) { sell_profit=sell_profit+OrderProfit(); Lot=OrderLots(); StepLot = NormalizeDouble (Lot/1.2,2); } if(OrderType() == OP_BUY && OrderSymbol () ==Symbol()) { buy_profit=buy_profit+OrderProfit(); Lot=OrderLots(); StepLot = NormalizeDouble (Lot/1.2,2); } if (sell_profit<buy_profit) mode_buy=true; if (sell_profit>buy_profit) mode_sell=true; } //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if ((spasenie&&!Stop)||!spasenie) { int orders=0; bool Otkryt_orders = false; for (i=OrdersTotal();i>=1;i--) //Ñþäà ìû âòûêàå èíäèêàòîðà { OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES); if((OrderType() == OP_SELL||OrderType() == OP_BUY) && OrderSymbol () ==Symbol()) Otkryt_orders = true; orders++; } if (!Otkryt_orders||mode_buy||mode_sell) { if (!Otkryt_orders&&(!mode_buy&&!mode_sell)) { RefreshRates(); OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0,text,0,Blue); } if (mode_buy&&!mode_sell) { mode_buy = false; RefreshRates(); OrderSend(Symbol(),OP_BUY,StepLot,Ask,5,0,0,text,0,Blue); } if (!mode_buy&&mode_sell) { mode_sell=false; RefreshRates(); OrderSend(Symbol(),OP_SELL,StepLot,Bid,5,0,0,text,0,Blue); } ChekPoint = Ask; HighBuy=Ask; LowSell=Bid; } if (Otkryt_orders) { double CurrentProfit=0; //Ïîäñ÷èòûâàåì äîõîäíîñòü ñåðèè for (i=OrdersTotal();i>=1;i--) { OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES); if((OrderType() == OP_SELL||OrderType() == OP_BUY) && OrderSymbol () ==Symbol()) CurrentProfit=CurrentProfit+OrderProfit(); } if (orders>=8) //Åñëè îðäåðîâ ìíîãî, çàêðûâàåì ïåðåêðûòûå îðäåðà { for (i=OrdersTotal();i>=1;i--) { ticket1 = 0; Profit1 = 0; OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES); if(OrderType() == OP_SELL&& OrderSymbol () ==Symbol()) { ticket1 = OrderTicket(); Profit1 = OrderProfit(); } for (int n=OrdersTotal();n>=1;n--) { ticket2 = 0; Profit2 = 0; OrderSelect(n-1, SELECT_BY_POS, MODE_TRADES); if(OrderType() == OP_BUY&& OrderSymbol () ==Symbol()&&(ticket1!=0&&ticket2!=0)) { ticket2 = OrderTicket(); Profit2 = OrderProfit(); if (Profit1==Profit2*(-1)) { RefreshRates(); OrderSelect(ticket1, SELECT_BY_TICKET); OrderClose(OrderTicket() ,OrderLots(),Ask,5,Blue); RefreshRates(); OrderSelect(ticket2, SELECT_BY_TICKET); OrderClose(OrderTicket() ,OrderLots(),Bid,5,Blue); break; } } } } } if (CurrentProfit>=NeedProfit*AccountBalance()) //Åñëè íàø ïðîôèò ó íàñ â êàðìàíå, çàêðûâàåìñÿ { for (i=OrdersTotal();i>=1;i--) { OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES); if(OrderType() == OP_SELL && OrderSymbol () ==Symbol()) { RefreshRates (); OrderClose(OrderTicket() ,OrderLots(),Ask,5,Blue); } if(OrderType() == OP_BUY && OrderSymbol () ==Symbol()) { RefreshRates (); OrderClose(OrderTicket() ,OrderLots(),Bid,5,Red); } } if (spasenie) Stop=false; } if (CurrentProfit<-1*NeedProfit*AccountBalance()) //Åñëè â ìèíóñå, ñòàâèì Ëîêè. { if (Ask>ChekPoint+(Step*Point)&&Ask>HighBuy) { Alert (ChekPoint+(Step*Point)); RefreshRates(); OrderSend(Symbol(),OP_BUY,StepLot,Ask,5,0,0,text,0,Blue); ChekPoint = Ask; HighBuy=Ask; } if (Bid<ChekPoint-(Step*Point)&&Bid<LowSell) { RefreshRates(); OrderSend(Symbol(),OP_SELL,StepLot,Bid,5,0,0,text,0,Blue); ChekPoint = Bid; LowSell=Bid; } } } } //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
Other Features: