I have just written this EA as I could not find anything like it only scripts. The purpose is to close all trades when the preset profit is reached. With the setting of 1.2 it is to close when Equity is 20% greater than the Balance. With the wild swings ATM I am getting high profits on multiple charts that are often evaporating just as quick and I am leaving too much profit on the table. Just needs to be dropped on a separate chart in your MT4 Platform.
WARNING I have not tried this on a live account yet, just demo but it seems to be doing what it is supposed to. If anyone sees any bugs please speak up, but please be gentle I am not an expert coder.
WARNING I have not tried this on a live account yet, just demo but it seems to be doing what it is supposed to. If anyone sees any bugs please speak up, but please be gentle I am not an expert coder.
Inserted Code
//+------------------------------------------------------------------+ //| Close when profit level reached.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern double ProfitMultiplier = 1.2; int Profit; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- ObjectCreate("BALANCE", OBJ_LABEL, 0, 0, 0); ObjectSetText("BALANCE"," BALANCE = "+ round (AccountBalance()) ,20 , "Arial BOLD", clrFloralWhite); ObjectSet("BALANCE", OBJPROP_CORNER, 1); ObjectSet("BALANCE", OBJPROP_XDISTANCE, 10); ObjectSet("BALANCE", OBJPROP_YDISTANCE, 50); ObjectCreate("EQUITY", OBJ_LABEL, 0, 0, 0); ObjectSetText("EQUITY"," EQUITY = "+ round (AccountEquity()) ,20 , "Arial BOLD", clrFloralWhite); ObjectSet("EQUITY", OBJPROP_CORNER, 1); ObjectSet("EQUITY", OBJPROP_XDISTANCE, 10); ObjectSet("EQUITY", OBJPROP_YDISTANCE, 100); ObjectCreate("PROFIT", OBJ_LABEL, 0, 0, 0); ObjectSetText("PROFIT"," PROFIT = "+ round (AccountProfit()) ,20 , "Arial BOLD", clrFloralWhite); ObjectSet("PROFIT", OBJPROP_CORNER, 1); ObjectSet("PROFIT", OBJPROP_XDISTANCE, 10); ObjectSet("PROFIT", OBJPROP_YDISTANCE, 150); ObjectCreate("TARGET", OBJ_LABEL, 0, 0, 0); ObjectSetText("TARGET"," TARGET = "+ round ( AccountBalance() * ProfitMultiplier) ,20 , "Arial BOLD", clrFloralWhite); ObjectSet("TARGET", OBJPROP_CORNER, 1); ObjectSet("TARGET", OBJPROP_XDISTANCE, 10); ObjectSet("TARGET", OBJPROP_YDISTANCE, 200); Profit = ( AccountBalance() * ProfitMultiplier); if (AccountEquity() >= Profit) { //Update the exchange rates before closing the orders RefreshRates(); //Log in the terminal the total of orders, current and past Print(OrdersTotal()); //Start a loop to scan all the orders //The loop starts from the last otherwise it would miss orders for(int i=(OrdersTotal()-1);i>=0;i--){ //If the order cannot be selected throw and log an error if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false){ Print("ERROR - Unable to select the order - ",GetLastError()); break; } //Create the required variables //Result variable, to check if the operation is successful or not bool res=false; //Allowed Slippage, which is the difference between current price and close price int Slippage=0; //Bid and Ask Price for the Instrument of the order double BidPrice=MarketInfo(OrderSymbol(),MODE_BID); double AskPrice=MarketInfo(OrderSymbol(),MODE_ASK); //Closing the order using the correct price depending on the type of order if(OrderType()==OP_BUY){ res=OrderClose(OrderTicket(),OrderLots(),BidPrice,Slippage); } if(OrderType()==OP_SELL){ res=OrderClose(OrderTicket(),OrderLots(),AskPrice,Slippage); } //If there was an error log it if(res==false) Print("ERROR - Unable to close the order - ",OrderTicket()," - ",GetLastError()); } } return; }
Attached File(s)
CloseAllWhenProfitLevelReached.mq4
4 KB
|
1,735 downloads