#property copyright "xxx" #property link "http://www.mql5.com" #property version "1.00" #property strict extern double lots1 = 0.01; extern double lots2 = 0.02; extern double lots3 = 0.03; extern double lots4 = 0.04; extern double lots5 = 0.05; input int TakeProfit1 = 1000 ; input int StopLoss1 = 3 ; input int TakeProfit2 = 1000 ; input int StopLoss2 = 2 ; input int TakeProfit3 = 1000 ; input int StopLoss3 = 3 ; input int TakeProfit4 = 1000 ; input int StopLoss4 = 4 ; input int TakeProfit5 = 1000 ; input int StopLoss5 = 4 ; extern int magic = 111112; //extern double Level = 1.3509; //extern double MaxDeviation = 9; // Max Deviation, points bool RunOnce=false; int last_order_check = false; datetime EaStartTime=TimeCurrent(); double takeprofit1=TakeProfit1; double stoploss1 =StopLoss1; double takeprofit2=TakeProfit2; double stoploss2 =StopLoss2; double takeprofit3=TakeProfit3; double stoploss3 =StopLoss3; double takeprofit4=TakeProfit4; double stoploss4 =StopLoss4; double takeprofit5=TakeProfit5; double stoploss5 =StopLoss5; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { RunOnce=false; MathSrand(GetTickCount()); if(Digits==5 || Digits==3) { takeprofit1 =TakeProfit1*10; stoploss1 =StopLoss1*10; takeprofit2 =TakeProfit2*10; stoploss2 =StopLoss2*10; takeprofit3 =TakeProfit3*10; stoploss3 =StopLoss3*10; takeprofit4 =TakeProfit4*10; stoploss4 =StopLoss4*10; takeprofit5 =TakeProfit5*10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnTimer() { OnTick(); } void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(IsLastOrderClose()) { OnInit(); Print("Ea Closed Manually "); EaStartTime=TimeCurrent(); } int ticet; int t=MathRand(); if(CountVsego()==0) { if(t>16384) { if(Counts()==0)// && (RunOnce || (Ask >=Level && Ask<=Level+(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_BUY,lots1,Ask,3,Bid-stoploss1*Point,Ask+takeprofit1*Point,"1",magic,0,clrGreen); if(ticet>0) { RunOnce=true; } } } // Partie 1 else if(t<16384) { if(Counts()==0)// && (RunOnce || (Bid <=Level && Bid >= Level-(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_SELL,lots1,Bid,3,Ask+stoploss1*Point,Bid-takeprofit1*Point,"1",magic,0,clrRed); if(ticet>0) { RunOnce=true; } } } if(t>16384) { if(Counts()==1)// && (RunOnce || (Ask >=Level && Ask<=Level+(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_BUY,lots2,Ask,3,Bid-stoploss2*Point,Ask+takeprofit2*Point,"2",magic,0,clrGreen); if(ticet>0) { RunOnce=true; } } } // Partie 2 else if(t<16384) { if(Counts()==1)// && (RunOnce || (Bid <=Level && Bid >= Level-(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_SELL,lots2,Bid,3,Ask+stoploss2*Point,Bid-takeprofit2*Point,"2",magic,0,clrRed); if(ticet>0) { RunOnce=true; } } } if(t>16384) { if(Counts()==2)// && (RunOnce || (Ask >=Level && Ask<=Level+(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_BUY,lots3,Ask,3,Bid-stoploss3*Point,Ask+takeprofit3*Point,"3",magic,0,clrGreen); if(ticet>0) { RunOnce=true; } } } //Partie 3 else if(t<16384) { if(Counts()==2)// && (RunOnce || (Bid <=Level && Bid >= Level-(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_SELL,lots3,Bid,3,Ask+stoploss3*Point,Bid-takeprofit3*Point,"3",magic,0,clrRed); if(ticet>0) { RunOnce=true; } } } if(t>16384) { if(Counts()==3)// && (RunOnce || (Ask >=Level && Ask<=Level+(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_BUY,lots4,Ask,3,Bid-stoploss4*Point,Ask+takeprofit4*Point,"4",magic,0,clrGreen); if(ticet>0) { RunOnce=true; } } } // Partie 4 else if(t<16384) { if(Counts()==3)// && (RunOnce || (Bid <=Level && Bid >= Level-(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_SELL,lots4,Bid,3,Ask+stoploss4*Point,Bid-takeprofit4*Point,"4",magic,0,clrRed); if(ticet>0) { RunOnce=true; } } } if(t>16384) { if(Counts()==4)// && (RunOnce || (Ask >=Level && Ask<=Level+(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_BUY,lots5,Ask,3,Bid-stoploss5*Point,Ask+takeprofit5*Point,"5",magic,0,clrGreen); if(ticet>0) { RunOnce=true; } } } // Partie 5 else if(t<16384) { if(Counts()==4)// && (RunOnce || (Bid <=Level && Bid >= Level-(MaxDeviation*_Point) && Level !=0))) { ticet=OrderSend(Symbol(),OP_SELL,lots5,Bid,3,Ask+stoploss5*Point,Bid-takeprofit5*Point,"5",magic,0,clrRed); if(ticet>0) { RunOnce=true; } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountSELL() { int count=0; int i; for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountBUY() { int count=0; int i; for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ int Counts() { int count=0,i; for(i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderCloseTime()>=EaStartTime) count++; if(count > 4 && OrderCloseTime()>=EaStartTime) count=0; } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountVsego() { int Vsego; Vsego=CountBUY()+CountSELL(); return(Vsego); } //+------------------------------------------------------------------+ bool IsLastOrderClose() { bool signal = false; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { bool select = OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(select && OrderSymbol()==_Symbol && OrderMagicNumber()==magic) { if(OrderType()==OP_BUY && OrderCloseTime()>=EaStartTime) { if(OrderClosePrice()>OrderStopLoss() && OrderClosePrice()<OrderTakeProfit()) { signal = true; } break; } else if(OrderType()==OP_SELL && OrderCloseTime()>=EaStartTime) { if(OrderClosePrice()<OrderStopLoss() && OrderClosePrice()>OrderTakeProfit()) { signal = true; } break; } break; } } return(signal); }
the other EA that closes the positions.
//+------------------------------------------------------------------+ //| TakeProfit 1 | //+------------------------------------------------------------------+ #property copyright "" #property link "" extern double My_Money_Equity_Target=0.10; int Slippage=4; int i; double EquityTarget; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int init() { //---- EquityTarget = AccountBalance()+My_Money_Equity_Target; //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int start() { if (AccountEquity()>= EquityTarget) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { bool Res=false; if(OrderType()==OP_BUY) { Res = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,clrNONE); }else if(OrderType()==OP_SELL) { Res = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,clrNONE); }else { Res = OrderDelete(OrderTicket()); } } } Print ("Equity reached to ",DoubleToStr(AccountEquity(),2)); if(!Res) return(0); EquityTarget = AccountBalance()+My_Money_Equity_Target; } Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(), "\nMy Account Equity Target: ",EquityTarget); return(0); }