Trailing Stops and Trailing Profit - page 6 1234567 New comment Arav007 2014.03.08 19:13 #51 deVries: OrderComment can be overwritten by your broker you are wanting... Now, as per my requirement, when the price would be say 7 pip [103.603] in profit, the Stop Loss of 1st and 2nd trade will become say 1 pip profit [103.543] and 3rd trade's Stop Loss will remain at 103.386. make extern int BreakEven = 7 (* 10 ) correction at 5 digit broker to get pipvalue ohh, Yes, this is certainly a Shortcoming. All my hard work since evening gone into vain now! Tried a way to distinguish the trades depending on 'order comment' function and wrote a code. Anyway, your given code will do the moving of Stop Loss part to BE or at desired point but still my problem with the 'Third' trade isn't solving. I have also this BE moving part of code but I got stuck with the Non-moving SL for third trade. Just got another idea, trying it now. And was this Valid? string comment_sell="Sell Order"; SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red); if (OrderComment()=="comment_sell") // ? Ticket changes after OrderSend OrderSend not sending order Coding help Arav007 2014.03.08 19:21 #52 Is this Valid? Say I have attached the EA to EURUSD chart. if (Order_Symbol()==EURUSD) Will it compare whether the current chart is of EURUSD or not? Arav007 2014.03.09 07:54 #53 Here is a way of distinguishing orders via 'Magic Number' I though. Braces are not Balanced. Is this Possible? if (Order_Symbol==EURUSD) { int Magic_Number_3=1303 int Magic_Number_2=1302 int Magic_Number_1=1301 } if (Order_Symbol==GBPUSD) { int Magic_Number_3=1603 int Magic_Number_2=1602 int Magic_Number_1=1601 } if (Order_Symbol==GBPUSD) { int Magic_Number_3=8703 int Magic_Number_2=8702 int Magic_Number_1=8701 } if (count==3) { BuyOrder_1=OrderSend("EURUSD", iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1,NULL,Magic_Number_3, 0,Blue); if (BuyOrder_1>0) //Checking if the order was opened or not { sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Buy order 1 sent successfully. Ticket=" + BuyOrder_1; count = count - 1; } else { iLastError = GetLastError(); sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Error sending buy order 1. Error code=" + ErrorDescription(iLastError); } } if (count==2) { BuyOrder_2=OrderSend("EURUSD", iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2,NULL,Magic_Number_2, 0,Blue); if (BuyOrder_2>0) { sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Buy order 2 sent successfully. Ticket=" + BuyOrder_2; count = count - 1; } else { iLastError = GetLastError(); sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Error sending buy order 2. Error code=" + ErrorDescription(iLastError); } } if (count==1) { BuyOrder_3=OrderSend(EURUSD, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3,NULL,Magic_Number_1, 0,Blue); if (BuyOrder_3>0) { sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Buy order 2 sent successfully. Ticket=" + BuyOrder_3; count = count - 1; } else { iLastError = GetLastError(); sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Error sending buy order 2. Error code=" + ErrorDescription(iLastError); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number_3) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)) { tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid); } else{ iLastError = GetLastError(); } }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){ }//end if(OrderType()==OP_BUY){ if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number_2) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)) { tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid); } else{ iLastError = GetLastError(); } }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){ }//end if(OrderType()==OP_BUY){ if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number_1) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("Stop Loss Unchanged"); } else{ iLastError = GetLastError(); } }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){ }//end if(OrderType()==OP_BUY){ Tjipke de Vries 2014.03.09 09:59 #54 if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way { //==EURUSD) fails int Magic_Number_3=1303 int Magic_Number_2=1302 int Magic_Number_1=1301 } this way you have to look for 3 different magicnumbers it looks to me possible to do Arav007 2014.03.09 18:24 #55 Ok, after a Continuous Hard Working Spell (at least for me), made the EA 'Error Free'! Posting the changes in short: extern string Order_Symbol="EURUSD"; int init() { } int start() { int Magic_Number_1,Magic_Number_2,Magic_Number_3; bool bOrderClosed; //////////////////////////////////////SETTING MAGIC NUMBER/////////////////////////////////////////////////// Set_Magic_Number(); //////////////////////////////////////SETTING MAGIC NUMBER COMPLETED///////////////////////////////////////// //////////////////////////////////////LOCKING MINIMUM PROFIT///////////////////////////////////////////////// if(OrdersTotal()>0) { for(int cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue; //----------------------------------------------------------------------------------------------------------------------- if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1) { if (OrderProfit()<0.03) { if(OrderType()==OP_BUY) { bOrderClosed = closeBuyOrder(iOrderType_Buy); //Closing Buy order if(bOrderClosed) { Print("Buy Order 1 Closed"); } else { iLastError = GetLastError(); }//end else if(bOrderClosed) }//end if(OrderType()==OP_BUY) //========================================================================================================================== if(OrderType()==OP_SELL) { bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order if(bOrderClosed) { Print("Sell Order 1 Closed"); } else{ iLastError = GetLastError(); }//end else if(bOrderClosed) }//end if(OrderType()==OP_SELL) }// if (OrderProfit()<0.03) }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1) //------------------------------------------------------------------------------------------------------------------------- if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2) { if (OrderProfit()<0.02) { if(OrderType()==OP_BUY) { bOrderClosed = closeBuyOrder(iOrderType_Buy); //Closing Buy order if(bOrderClosed) { Print("Buy Order 2 Closed"); } else{ iLastError = GetLastError(); }//end else if(bOrderClosed) }//end if(OrderType()==OP_BUY) //========================================================================================================================== if(OrderType()==OP_SELL) { bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order if(bOrderClosed) { Print("Sell Order 1 Closed"); } else{ iLastError = GetLastError(); }//end else if(bOrderClosed) }//end if(OrderType()==OP_SELL) }// if (OrderProfit()<0.02) }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2) //------------------------------------------------------------------------------------------------------------------------------ if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3) { Print("Don't Close this Third Order"); }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3) //------------------------------------------------------------------------------------------------------------------------------- } //end for(cnt=OrdersTotal()-1;cnt>=0;cnt--) }// if(OrdersTotal()>0) //////////////////////////////////////MINIMUM PROFIT LOCKED////////////////////////////////////////////////// if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop); //count open buy orders. iOpenOrders_Buy = CntOrd(iOrderType_Buy,Symbol()); //count open sell orders. iOpenOrders_Sell = CntOrd(iOrderType_Sell,Symbol()); //Conditional Part for Trade if(Buy condition Met) { //Close Open Sell Positions double OpenPrice=Ask; int count=3; double dTakeProfitPrice_1,dTakeProfitPrice_2,dTakeProfitPrice_3; dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits); dTakeProfitPrice_1 = NormalizeDouble(OpenPrice + TakeProfit_1 * dPip,Digits); dTakeProfitPrice_2 = NormalizeDouble(OpenPrice + TakeProfit_2 * dPip,Digits); dTakeProfitPrice_3 = NormalizeDouble(OpenPrice + TakeProfit_3 * dPip,Digits); iLastError = 0; if (count==3) { BuyOrder_1=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",Magic_Number_1, 0,Blue); if (BuyOrder_1>0) //Checking if the order was opened or not { count = count - 1; } else { iLastError = GetLastError(); } } if (count==2) { BuyOrder_2=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",Magic_Number_2, 0,Blue); if (BuyOrder_2>0) { count = count - 1; } else { iLastError = GetLastError(); } } if (count==1) { BuyOrder_3=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",Magic_Number_3, 0,Blue); if (BuyOrder_3>0) { count = count - 1; } else { iLastError = GetLastError(); } } } if (Sell condition met) { //Close Open Buy Orders OpenPrice=Bid; count=3; double SellOrder_1,SellOrder_2,SellOrder_3; dStopLossPrice = NormalizeDouble(OpenPrice + StopLoss * dPip,Digits); dTakeProfitPrice_1 = NormalizeDouble(OpenPrice - TakeProfit_1 * dPip,Digits); dTakeProfitPrice_2 = NormalizeDouble(OpenPrice - TakeProfit_2 * dPip,Digits); dTakeProfitPrice_3 = NormalizeDouble(OpenPrice - TakeProfit_3 * dPip,Digits); iLastError = 0; if (count==3) { SellOrder_1=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_1 , "Sell Order",Magic_Number_1, 0,Red); if (SellOrder_1>0) //Checking if the order was opened or not { count = count - 1; } else { iLastError = GetLastError(); } } if (count==2) { SellOrder_2=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_2 , "Sell Order",Magic_Number_2, 0,Red); if (SellOrder_1>0) //Checking if the order was opened or not { count = count - 1; } else { iLastError = GetLastError(); } } if (count==1) { SellOrder_3=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice,dTakeProfitPrice_3 , "Sell Order",Magic_Number_3, 0,Red); if (SellOrder_3>0) //Checking if the order was opened or not { count = count - 1; } else { iLastError = GetLastError(); } } } } void TrailOrder(double Trailingstart,double Trailingstop) { int ticket = 0; double tStopLoss; int cnt; double vPoint,vSlippage; double sl; int Magic_Number_1,Magic_Number_2,Magic_Number_3; Set_Magic_Number(); if (Digits == 3 || Digits == 5) {vPoint = Point * 10; vSlippage = Slippage * 10;} else {vPoint = Point; vSlippage = Slippage;} RefreshRates(); if(OrdersTotal()>0) { for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue; ////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)) { tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid); } else{ iLastError = GetLastError(); } }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){ }//end if(OrderType()==OP_BUY){ //------------------------------------------------------------------------------------------------------------------------------------- Arav007 2014.03.09 18:31 #56 if (OrderType()==OP_SELL) { if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits) && (sl >(NormalizeDouble(Ask+(TrailingStop+TrailingStep)*vPoint,Digits))) || (OrderStopLoss()==0)) { sl = NormalizeDouble(Ask+TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red); if (ticket > 0) { Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask); } else{ iLastError = GetLastError(); } }//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits) }//end if (OrderType()==OP_SELL) }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)) { tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid); } else{ iLastError = GetLastError(); } }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){ }//end if(OrderType()==OP_BUY){ //------------------------------------------------------------------------------------------------------------------------------------- if (OrderType()==OP_SELL) { if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits) && (sl >(NormalizeDouble(Ask+(TrailingStop+TrailingStep)*vPoint,Digits))) || (OrderStopLoss()==0)) { sl = NormalizeDouble(Ask+TrailingStop*vPoint,Digits); ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red); if (ticket > 0) { Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask); } else{ iLastError = GetLastError(); } }//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits) }//end if (OrderType()==OP_SELL) }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3) { sl = OrderStopLoss(); // Stop Loss. tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. if(OrderType()==OP_BUY) { ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue); if (ticket > 0) { Print ("Stop Loss Unchanged"); } else{ iLastError = GetLastError(); } }//end if(OrderType()==OP_BUY) //------------------------------------------------------------------------------------------------------------------------------ if (OrderType()==OP_SELL) { sl= OrderStopLoss(); // Stop Loss. ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red); if (ticket > 0) { Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask); } else{ iLastError = GetLastError(); } }//end if (OrderType()==OP_SELL) }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// }//end for(cnt=OrdersTotal()-1;cnt>=0;cnt--) }// end if(OrdersTotal()>0) return(0); }// end void TrailOrder(double Trailingstart,double Trailingstop) bool closeBuyOrder(int iBuytype) { bool bClosed_; int Magic_Number_1,Magic_Number_2,Magic_Number_3; Set_Magic_Number(); if(OrdersTotal()>0) { for(int Counter=OrdersTotal()-1;Counter>=0;Counter--) { OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES); if(iBuytype==OP_BUY && OrderType()==OP_BUY) { //------------------------------------------------------------------------------------------------------------------------------------ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage); } //------------------------------------------------------------------------------------------------------------------------------------- if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage); } //------------------------------------------------------------------------------------------------------------------------------------- if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3) { RefreshRates(); Print("Don't Close this Thrid Order"); } //------------------------------------------------------------------------------------------------------------------------------------- }//if(iBuytype==OP_BUY && OrderType()==OP_BUY) }//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--) }//if(OrdersTotal()>0) return(bClosed_); }//end bool closeBuyOrder(int iBuytype) //========================================================================================== bool closeSellOrder(int iSelltype) { bool bClosed_; int Magic_Number_1,Magic_Number_2,Magic_Number_3; Set_Magic_Number(); if(OrdersTotal()>0) { for(int Counter=OrdersTotal()-1;Counter>=0;Counter--) { if(!OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES)) continue; if(iSelltype==OP_SELL && OrderType()==OP_SELL) { //------------------------------------------------------------------------------------------------------------------------------------ if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1) { RefreshRates(); bClosed_ = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage); } //------------------------------------------------------------------------------------------------------------------------------------- if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2) { RefreshRates(); bClosed_ = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage); } //------------------------------------------------------------------------------------------------------------------------------------- if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3) { RefreshRates(); Print("Don't Close this Thrid Order"); } //------------------------------------------------------------------------------------------------------------------------------------- }//end if(iSelltype==OP_SELL && OrderType()==OP_SELL) }//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--) }//end if(OrdersTotal()>0) return(bClosed_); }//end bool closeSellOrder(int iSelltype) //========================================================================================== void Set_Magic_Number() { int Magic_Number_1,Magic_Number_2,Magic_Number_3; if (Order_Symbol=="EURUSD") { Magic_Number_1=1301; Magic_Number_2=1302; Magic_Number_3=1303; } if (Order_Symbol=="GBPUSD") { Magic_Number_1=1601; Magic_Number_2=1602; Magic_Number_3=1603; } if (Order_Symbol=="AUDUSD") { Magic_Number_1=8701; Magic_Number_2=8702; Magic_Number_3=8703; } return (0); } I have confusion with Set_Magic_Number() function. Have I defined it correctly? Also while calling it in other functions, will it work correctly? Regards Tjipke de Vries 2014.03.09 23:09 #57 Arav007: I have confusion with Set_Magic_Number() function. Have I defined it correctly? Also while calling it in other functions, will it work correctly? Regards i read here your symbol is not "EURUSD" you have to use the right symbol Arav007 2014.03.10 05:57 #58 deVries: i read here your symbol is not "EURUSD" you have to use the right symbol It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD.... If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'. Have you reviewed my code? The minimum profit feature is a 'Failure'. It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades! But my aim is not like this. I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure that trade got closed with my desired minimum profit. And here also I don't want that 'Third' trade to be affected by this feature. I tried to write something like that but now it's not working. Limit Trade / Orders How to handle this EA Must Open trade/s Tjipke de Vries 2014.03.10 07:16 #59 Arav007: It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD.... If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'. Have you reviewed my code? The minimum profit feature is a 'Failure'. It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades! But my aim is not like this. I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure that trade got closed with my desired minimum profit. And here also I don't want that 'Third' trade to be affected by this feature. I tried to write something like that but now it's not working. You make it far too complex because you have no idea how to handle this the more you read and try to program yourself the easier it becomes to make more complex things but start with simple things if you start to make a program work for one trade then later you try with more trades you have to learn a lot. if you start picking a short simple written program and do some changes on that for testing you might learn how that program is working Your problem you started See how i would do it //+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| https://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "https://www.mql4.com" input double TakeProfit =50; input double Lots =0.1; input int MagicNumber =16384; input int TakeProfit1 = 15; input int TakeProfit2 = 25; input int TakeProfit3 = 0; input int StopLoss = 100; input double BreakEven =10; input double BreakEvenSL =5; input double TrailingStop =30; input double TrailingStep =30; input int SlippagePips =3; input double MACDOpenLevel =3.0; input double MACDCloseLevel=2; input int MATrendPeriod =26; int count,countbuy,countsell; //++++ These are adjusted for 5 digit brokers. int pips2points; // slippage 3 pips 3=points 30=points double pips2dbl; // Stoploss 15 pips 0.015 0.0150 int Digitspips; // DoubleToStr(dbl/pips2dbl, Digitspips) int Slip; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262 {pips2dbl = Point*10; pips2points = 10; Digitspips = 1;} else {pips2dbl = Point; pips2points = 1; Digitspips = 0;} // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl Slip = pips2points * SlippagePips; //Slippage //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick(void) { double MacdCurrent,MacdPrevious; double SignalCurrent,SignalPrevious; double MaCurrent,MaPrevious; int cnt,ticket,total; //--- // initial data checks // it is important to make sure that the expert works with a normal // chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit // on a chart of less than 100 bars //--- if(Bars<100) { Print("bars less than 100"); return; } //--- if((countbuy>0)||(countsell>0)) { int CMD; double SL,TP,price; int LastError = 0; RefreshRates(); if (countbuy>0) { count=countbuy; CMD = OP_BUY; price = Ask; if(StopLoss>0)SL= price-StopLoss*pips2dbl; if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl; if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl; if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl; } else { count=countsell; CMD = OP_SELL; price = Bid; if(StopLoss>0)SL= price+StopLoss*pips2dbl; if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl; if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl; if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl; } ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green); if (ticket>0) //Checking if the order was opened or not { OrderPrint(); countbuy--; countsell--; } else { LastError = GetLastError(); if(CMD==OP_BUY)Print("Error sending buy order "+count+ ". Error code= " + LastError); if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code= " + LastError); } if((countbuy>0)||(countsell>0))return; } //--- to simplify the coding and speed up access data are put into internal variables MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); //--- it is important to enter the market correctly, but it is more important to exit it correctly... total=0; for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)break; if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue; if(OrderType()<=OP_SELL) // check for opened position { total++; //--- long position is opened if(OrderType()==OP_BUY) { //--- should it be closed? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*pips2dbl)) { //--- close order OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet); } //--- check for breakeven if(BreakEven>0) { if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven) { if(OrderStopLoss()<OrderOpenPrice()) { //--- modify order if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green); } } } //--- check for trailing stop if(TrailingStop>0) { if(OrderOpenPrice()<OrderStopLoss()) { if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep)) { //--- modify order OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green); } } } } else // go to short position { //--- should it be closed? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl)) { //--- close order and exit OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Violet); } //--- check for breakeven if(BreakEven>0) { if(OrderOpenPrice()-Ask>pips2dbl*BreakEven) { if(OrderStopLoss()>OrderOpenPrice()) { //--- modify order if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green); } } } //--- check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point)) { if(OrderStopLoss()>(Ask+pips2dbl*(TrailingStop+TrailingStep))) { //--- modify order OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pips2dbl*TrailingStop,OrderTakeProfit(),0,Red); } } } } } } if(total<1) { countbuy = 0; countsell = 0; //--- no opened orders identified if(AccountFreeMargin()<(3000*Lots))//3trades*1000 { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } //--- check for long position (BUY) possibility if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious) { countbuy = 3;//we can open } //--- check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious) { countsell = 3;//we can open } } //--- } //+------------------------------------------------------------------+ not needed different inputs for Symbol() 3 different Magicnumbers.. Get Profit Need help on stopping Any rookie question, so Tjipke de Vries 2014.03.10 11:26 #60 Arav007: It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD.... If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'. Have you reviewed my code? The minimum profit feature is a 'Failure'. It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades! But my aim is not like this. I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure that trade got closed with my desired minimum profit. And here also I don't want that 'Third' trade to be affected by this feature. I tried to write something like that but now it's not working. I compiled your code 80 errors 6 warnings mostly undeclared identifier i need the code yours with all identifier declared if the file is too big then attach compile the file and check the errors you get 1234567 New comment
OrderComment can be overwritten by your broker
you are wanting... Now, as per my requirement, when the price would be say 7 pip [103.603] in profit, the Stop Loss of
1st and 2nd trade will become say 1 pip profit [103.543] and 3rd trade's Stop Loss will remain at 103.386.
make extern int BreakEven = 7
(* 10 ) correction at 5 digit broker to get pipvalue
ohh, Yes, this is certainly a Shortcoming. All my hard work since evening gone into vain now!
Tried a way to distinguish the trades depending on 'order comment' function and wrote a code.
Anyway, your given code will do the moving of Stop Loss part to BE or at desired point but still my problem with the 'Third' trade isn't solving.
I have also this BE moving part of code but I got stuck with the Non-moving SL for third trade.
Just got another idea, trying it now.
And was this Valid?
string comment_sell="Sell Order";
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);
if (OrderComment()=="comment_sell") // ?
Is this Valid?
Say I have attached the EA to EURUSD chart.
if (Order_Symbol()==EURUSD)
Will it compare whether the current chart is of EURUSD or not?
Here is a way of distinguishing orders via 'Magic Number' I though.
Braces are not Balanced.
Is this Possible?
this way you have to look for 3 different magicnumbers
it looks to me possible to do
Ok, after a Continuous Hard Working Spell (at least for me), made the EA 'Error Free'!
Posting the changes in short:
I have confusion with Set_Magic_Number() function.
Have I defined it correctly? Also while calling it in other functions, will it work correctly?
Regards
I have confusion with Set_Magic_Number() function.
Have I defined it correctly? Also while calling it in other functions, will it work correctly?
Regards
i read here your symbol is not "EURUSD"
you have to use the right symbol
i read here your symbol is not "EURUSD"
you have to use the right symbol
It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....
If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.
Have you reviewed my code?
The minimum profit feature is a 'Failure'.
It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!
But my aim is not like this.
I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure
that trade got closed with my desired minimum profit.
And here also I don't want that 'Third' trade to be affected by this feature.
I tried to write something like that but now it's not working.
It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....
If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.
Have you reviewed my code?
The minimum profit feature is a 'Failure'.
It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!
But my aim is not like this.
I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure
that trade got closed with my desired minimum profit.
And here also I don't want that 'Third' trade to be affected by this feature.
I tried to write something like that but now it's not working.
You make it far too complex because you have no idea how to handle this
the more you read and try to program yourself the easier it becomes to make more complex things
but start with simple things if you start to make a program work for one trade then later you try with more trades
you have to learn a lot.
if you start picking a short simple written program and do some changes on that for testing
you might learn how that program is working
Your problem you started
See how i would do it
not needed different inputs for Symbol()
3 different Magicnumbers..
It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....
If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.
Have you reviewed my code?
The minimum profit feature is a 'Failure'.
It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!
But my aim is not like this.
I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure
that trade got closed with my desired minimum profit.
And here also I don't want that 'Third' trade to be affected by this feature.
I tried to write something like that but now it's not working.
I compiled your code 80 errors 6 warnings
mostly undeclared identifier
i need the code yours with all identifier declared
if the file is too big then attach
compile the file and check the errors you get