追踪止损和追踪利润 - 页 6 1234567 新评论 Arav007 2014.03.08 19:13 #51 deVries: OrderComment可以被你的经纪人所覆盖 你想要的...现在,按照我的要求,当价格达到7个点[103.603]的利润时,第一笔和第二笔交易的止损将变成1个点的利润[103.543],第三笔交易的止损将保持在103.386。 第1次和第2次交易的止损将变成1点利润[103.543],第3次交易的止损将保持在103.386。 使得extern int BreakEven = 7 (*10)在5位数的经纪商处修正,以获得点值 哦,是的,这确实是一个缺点。我从晚上开始的所有努力现在都白费了! 试着根据'订单注释'功能来区分交易,并写了一个代码。 总之,你给的代码会将止损部分移动到BE或所需的点,但我的'第三'交易的问题仍然没有解决。 我也有这个BE移动部分的代码,但我被第三个交易的非移动SL卡住了。 刚有了另一个想法,现在就去试试。 这是否有效? string comment_sell="Sell Order"。 SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red)。 如果(OrderComment()=="comment_sell")// ? Arav007 2014.03.08 19:21 #52 这是否有效? 假设我把EA附在欧元兑美元的图表 上。 如果(Order_Symbol()==EURUSD) 它是否会比较当前图表是否是欧元兑美元的? Arav007 2014.03.09 07:54 #53 这是我通过 "神奇数字 "来区分订单的一种方法。 大括号是不平衡的。 这有可能吗? 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 } 这样一来,你必须寻找3个不同的神奇数字。 在我看来,可以这样做 Arav007 2014.03.09 18:24 #55 好的,在持续努力工作之后(至少对我而言),让 EA '无错误'!简短地发布更改: 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 ); }我对 Set_Magic_Number() 函数感到困惑。我是否正确定义了它?同样在其他功能中调用它时,它会正常工作吗?问候 Tjipke de Vries 2014.03.09 23:09 #57 Arav007: 我对Set_Magic_Number()函数感到困惑。 我对它的定义正确吗?另外,在其他函数中调用它时,它是否能正常工作? 谢谢 我在这里看到你的符号不是 "EURUSD" 你必须使用正确的符号 Arav007 2014.03.10 05:57 #58 deVries: 我在这里看到你的符号不是 "EURUSD" 你必须使用正确的符号 这不是一个问题。我正在测试EA的经纪人的符号是EURUSD,GBPUSD....。 如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加 "pro"。 你看过我的代码吗? 最低利润功能是一个'失败'。 它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。 但我的目的不是这样的。 我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保 该交易以我所期望的最低利润关闭。 在这里,我也不希望 "第三笔 "交易受到这个功能的影响。 我试着写了一些类似的东西,但现在却不能用了。 Tjipke de Vries 2014.03.10 07:16 #59 Arav007: 这不是一个问题。我正在测试EA的经纪商的符号是EURUSD,GBPUSD....。 如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加'pro'。 你看过我的代码吗? 最低利润功能是一个'失败'。 它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。 但我的目的不是这样的。 我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保 该交易以我所期望的最低利润关闭。 在这里,我也不希望 "第三笔 "交易受到这个功能的影响。 我试着写了一些类似的东西,但现在却不能用了。 你把它弄得太复杂了,因为你不知道如何处理这个问题。 你读的书越多,并尝试自己编程,就越容易做出更复杂的东西。 但要从简单的事情做起,如果你开始让一个程序在一个交易中工作,然后再尝试更多的交易 你必须要学习很多东西。 如果你开始选择一个简单的程序,并在上面做一些修改来测试 你可能会了解到该程序是如何工作的 你的问题,你开始 看看我会怎么做 //+------------------------------------------------------------------+ //| 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 } } //--- } //+------------------------------------------------------------------+ 对Symbol()不需要不同的输入 3个不同的魔术数字... Tjipke de Vries 2014.03.10 11:26 #60 Arav007:这不是一个问题。我正在测试EA的经纪商的符号是EURUSD,GBPUSD....。如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加'pro'。 你看过我的代码吗?最低利润功能是一个'失败'。它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。但我的目的不是这样的。我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保 该交易以我所期望的最低利润关闭。在这里,我也不希望 "第三笔 "交易受到这个功能的影响。我试着写了一些类似的东西,但现在却不工作了。 我编译了你的代码,有80个错误6个警告 大部分是未声明的标识符 我需要你的代码,并声明所有的标识符。 如果文件太大,请附上 编译该文件并检查 你得到的错误。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
OrderComment可以被你的经纪人所覆盖
你想要的...现在,按照我的要求,当价格达到7个点[103.603]的利润时,第一笔和第二笔交易的止损将变成1个点的利润[103.543],第三笔交易的止损将保持在103.386。
第1次和第2次交易的止损将变成1点利润[103.543],第3次交易的止损将保持在103.386。
使得extern int BreakEven = 7
(*10)在5位数的经纪商处修正,以获得点值
哦,是的,这确实是一个缺点。我从晚上开始的所有努力现在都白费了!
试着根据'订单注释'功能来区分交易,并写了一个代码。
总之,你给的代码会将止损部分移动到BE或所需的点,但我的'第三'交易的问题仍然没有解决。
我也有这个BE移动部分的代码,但我被第三个交易的非移动SL卡住了。
刚有了另一个想法,现在就去试试。
这是否有效?
string comment_sell="Sell Order"。
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red)。
如果(OrderComment()=="comment_sell")// ?
这是否有效?
假设我把EA附在欧元兑美元的图表 上。
如果(Order_Symbol()==EURUSD)
它是否会比较当前图表是否是欧元兑美元的?
这是我通过 "神奇数字 "来区分订单的一种方法。
大括号是不平衡的。
这有可能吗?
这样一来,你必须寻找3个不同的神奇数字。
在我看来,可以这样做
好的,在持续努力工作之后(至少对我而言),让 EA '无错误'!
简短地发布更改:
我对 Set_Magic_Number() 函数感到困惑。
我是否正确定义了它?同样在其他功能中调用它时,它会正常工作吗?
问候
我对Set_Magic_Number()函数感到困惑。
我对它的定义正确吗?另外,在其他函数中调用它时,它是否能正常工作?
谢谢
我在这里看到你的符号不是 "EURUSD"
你必须使用正确的符号
我在这里看到你的符号不是 "EURUSD"
你必须使用正确的符号
这不是一个问题。我正在测试EA的经纪人的符号是EURUSD,GBPUSD....。
如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加 "pro"。
你看过我的代码吗?
最低利润功能是一个'失败'。
它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。
但我的目的不是这样的。
我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保
该交易以我所期望的最低利润关闭。
在这里,我也不希望 "第三笔 "交易受到这个功能的影响。
我试着写了一些类似的东西,但现在却不能用了。
这不是一个问题。我正在测试EA的经纪商的符号是EURUSD,GBPUSD....。
如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加'pro'。
你看过我的代码吗?
最低利润功能是一个'失败'。
它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。
但我的目的不是这样的。
我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保
该交易以我所期望的最低利润关闭。
在这里,我也不希望 "第三笔 "交易受到这个功能的影响。
我试着写了一些类似的东西,但现在却不能用了。
你把它弄得太复杂了,因为你不知道如何处理这个问题。
你读的书越多,并尝试自己编程,就越容易做出更复杂的东西。
但要从简单的事情做起,如果你开始让一个程序在一个交易中工作,然后再尝试更多的交易
你必须要学习很多东西。
如果你开始选择一个简单的程序,并在上面做一些修改来测试
你可能会了解到该程序是如何工作的
你的问题,你开始
看看我会怎么做
对Symbol()不需要不同的输入
3个不同的魔术数字...
这不是一个问题。我正在测试EA的经纪商的符号是EURUSD,GBPUSD....。
如果我将EA连接到符号为EURUSDpro的经纪商,我只需添加'pro'。
你看过我的代码吗?
最低利润功能是一个'失败'。
它只是在执行时关闭所有未完成的交易,而不考虑交易中的损失/利润!但我的目的不是这样。
但我的目的不是这样的。
我希望,如果一笔交易进入盈利区,然后市场开始回调,这个 "最低利润 "功能将确保
该交易以我所期望的最低利润关闭。
在这里,我也不希望 "第三笔 "交易受到这个功能的影响。
我试着写了一些类似的东西,但现在却不工作了。
我编译了你的代码,有80个错误6个警告
大部分是未声明的标识符
我需要你的代码,并声明所有的标识符。
如果文件太大,请附上
编译该文件并检查 你得到的错误。