#property strict extern string BASIC = "- - - - -"; extern double Lot = 0.01; extern int StopLoss = 333; extern int TakeProfit = 0; input int TargetProfit = 33; extern string ADDITIONAL = "- - - - -"; extern int bars_pause = 3; extern int max_orders = 33; extern int close_losses = 1; extern string SPECIAL = "- - - - -"; extern bool use_transform_4_dig = true; extern int Slippage = 3; extern int Magic_1 = 123; extern int Magic_2 = 456; string comment = "- - - - -"; int MaxAttempts = 64; double pause_if_busy = 0.2; bool use_data_from_closed_candle = true; int magic; extern string TS_1 = "- - - - -"; extern bool use_traling_stop = true; extern int TrailingStart = 33; extern int TrailingStop = 33; extern int TrailingStep = 33; extern string TS_2= "- - - - -"; extern bool use_traling_stop2 = true; extern int TrailingStart2 = 33; extern int TrailingStop2 = 33; extern int TrailingStep2 = 33; int buy,sell,Orders_Total,Sig_p; datetime prevtime; double point; int clo_can; bool last_buy; bool last_sell; datetime last_open_time; double startEquity; ////////////////////////////////////////////////////////////// int OnInit() { point=Point; if(use_transform_4_dig && (Digits==3 || Digits==5)) point*=10; prevtime = Time[0]; if(use_data_from_closed_candle) clo_can=1; startEquity=AccountEquity(); return(INIT_SUCCEEDED); } //////////////////////////////////////////////////////////// void OnTick() { if(use_traling_stop) Traling_Stop_f(); if(use_traling_stop2) Traling_Stop_f2(); if(AccountEquity()-startEquity>=TargetProfit){ CLOSEALL(); startEquity=AccountEquity(); } //Comment(OrdersProfit()); //SL && TP if(StopLoss!=0 || TakeProfit!=0) SL_TP(); //del max lose max if(close_losses!=0) { CountOpenedPositions(); if(Orders_Total==max_orders) close_max_loses(); } if(use_data_from_closed_candle) { if (Time[0] == prevtime) return; prevtime = Time[0]; } Sig_p =Sig_f(); if(Sig_p!=0) open(); } ///////////////////////////////////////////////////////////////////////////////////////////// char Sig_f() { int bar_open=iBarShift(Symbol(),0,last_open_time); if(bar_open=max_orders) return(0); char sigg=0; if(!last_buy) { sigg=1; last_buy=true; } else if(last_buy) { sigg=-1; last_buy=false; } ////////////////////////// if(sigg==1) return(1); if(sigg==-1) return(-1); return(0); } /////////////////////////////////////////////////////////////////////////////////////////////// void open() { CountOpenedPositions(); double Lotss=Lot; int ticket_op=-1; for (int j_op = 0; j_op < MaxAttempts; j_op++) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); if(OpenOrdersThisPair(Symbol(),0)+OpenOrdersThisPair(Symbol(),1)0) ticket_op=OrderSend(Symbol(),OP_BUY,Lotss,Ask,Slippage,0,0,comment,magic,0,clrNONE); if(OpenOrdersThisPair(Symbol(),1)%2==0){magic=Magic_1;}else{magic=Magic_2;} if(Sig_p<0) ticket_op=OrderSend(Symbol(),OP_SELL,Lotss,Bid,Slippage,0,0,comment,magic,0,clrNONE); if(ticket_op>-1) { last_open_time=Time[0]; break; } } } } /////////////////////////////////////////////////////////////////////////// void Traling_Stop_f() { for(int i=0; i=NormalizeDouble(OrderOpenPrice()+TrailingStart*point+TrailingStop*point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)NormalizeDouble(Ask+(TrailingStop+TrailingStep)*point,Digits)) || OrderStopLoss()==0) { if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Ask+TrailingStop*point,Digits)) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*point,Digits), OrderTakeProfit(), 0, clrNONE)) continue; } } } } } } } } } /////////////////////////////////////////////////////////////////////////// void Traling_Stop_f2() { for(int i=0; i=NormalizeDouble(OrderOpenPrice()+TrailingStart2*point+TrailingStop2*point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)NormalizeDouble(Ask+(TrailingStop2+TrailingStep2)*point,Digits)) || OrderStopLoss()==0) { if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Ask+TrailingStop2*point,Digits)) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop2*point,Digits), OrderTakeProfit(), 0, clrNONE)) continue; } } } } } } } } } //////////////////////////////////////////////////////////////////////////////////// void CountOpenedPositions() { buy=0; sell=0; Orders_Total=0; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS)) { if(OrderMagicNumber()==Magic_1||OrderMagicNumber()==Magic_2) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) buy++; if(OrderType()==OP_SELL) sell++; } } } } Orders_Total=buy+sell; } /////////////////////////////////////////////////////////////////////////// void SL_TP() { double modify_price_SL; double modify_price_TP; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==Magic_1||OrderMagicNumber()==Magic_2) { if(OrderSymbol()==Symbol()) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); ///////////////////////////////////////////////// if(OrderType()==OP_BUY) { modify_price_SL=OrderOpenPrice()-StopLoss*point; if(StopLoss==0) modify_price_SL=OrderStopLoss(); modify_price_TP=OrderOpenPrice()+TakeProfit*point; if(TakeProfit==0) modify_price_TP=OrderTakeProfit(); if(((StopLoss>0 && OrderStopLoss()==0) || StopLoss==0) && ((TakeProfit>0 && OrderTakeProfit()==0) || TakeProfit==0)) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(modify_price_SL,Digits),NormalizeDouble(modify_price_TP,Digits),0,clrNONE)) continue; else if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrNONE)) continue; } ///////////////////////// if(OrderType()==OP_SELL) { modify_price_SL=OrderOpenPrice()+StopLoss*point; if(StopLoss==0) modify_price_SL=OrderStopLoss(); modify_price_TP=OrderOpenPrice()-TakeProfit*point; if(TakeProfit==0) modify_price_TP=OrderTakeProfit(); if(((StopLoss>0 && OrderStopLoss()==0) || StopLoss==0) && ((TakeProfit>0 && OrderTakeProfit()==0) || TakeProfit==0)) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(modify_price_SL,Digits),NormalizeDouble(modify_price_TP,Digits),0,clrNONE)) continue; else if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrNONE)) continue; } //////////////////////////////////////////////// } } } } } ////////////////////////////////////////////////////////////// void close_max_loses() { //buf double loses_orders[1,2]; ArrayResize(loses_orders,Orders_Total); //loses in buf int counter=0; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS)) { if(OrderMagicNumber()==Magic_1||OrderMagicNumber()==Magic_2) { if(OrderSymbol()==Symbol()) { loses_orders[counter,0]=OrderProfit()+OrderSwap()+OrderCommission(); loses_orders[counter,1]=OrderTicket(); counter++; } } } } //close loses ArraySort(loses_orders); for (int i=0; i= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()== Symbol()){ profit+=OrderProfit(); } } return(profit); } void CLOSEALL() { for(int x=OrdersTotal()-1;x>=0;x--) {if(!OrderSelect(x,SELECT_BY_POS,MODE_TRADES))continue; if(OrderSymbol()!=Symbol())continue; if(OrderMagicNumber()==Magic_1||OrderMagicNumber()==Magic_2){ if(OrderType()>1)if(OrderDelete(OrderTicket(),clrNONE))continue; if(OrderType()==0)if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,clrNONE))continue; if(OrderType()==1)if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,clrNONE))continue; } } } //+------------------------------- //+ Check Open Orders //+------------------------------- int OpenOrdersThisPair(string pair, int type) { int total=0; for(int i=OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==pair && (OrderMagicNumber()==Magic_1||OrderMagicNumber()==Magic_2) && OrderType()==type){ total++; } } } return (total); }