トレーリングストップとトレーリングプロフィット - ページ 6 1234567 新しいコメント Arav007 2014.03.08 19:13 #51 deVries: OrderCommentはブローカーによって上書きされることがあります。 ということです。さて、私の要求通り、価格が7pip [103.603]の利益になったとき、1番目と2番目のトレードのストップロスは1pipの利益[103.543]になり 1番目と2番目のトレードのストップロスは1ピップの利益[103.543]になり、3番目のトレードのストップロスは103.386のままです。 extern int BreakEven = 7 とする。 (* 10 ) 5桁のブローカーで補正してpipvalueを取得する。 ああ、確かにこれは欠点だ。夕方からの苦労が水の泡です。 注文コメント」機能によってトレードを区別する方法を試して、コードを書きました。 とにかく、あなたのコードではストップロスの部分をBEや希望のポイントに移動させることができますが、まだ「3つ目」のトレードの問題が解決されていません。 私はこのBE移動のコードも持っていますが、3番目のトレードではSLが移動しないので困っています。 別のアイデアを思いつき、今それを試しています。 そして、これは有効だったのでしょうか? 文字列 comment_sell="Sell Order"; SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red).もし、if (OrderComment(), iOrderType_Sell(), iOrderType_Sell(), iMagicNumber, 0,Red); if (オーダーコメント()=="comment_sell")// ? Arav007 2014.03.08 19:21 #52 これは有効なのでしょうか? EURUSDのチャートに EAを取り付けたとします。 if (Order_Symbol()==EURUSD)とします。 現在のチャートが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...です。 もし私がEURUSDproのシンボルを持つブローカーにEAを取り付けるなら、私は「pro」を追加するだけです。 私のコードを見直しましたか? 最低利益機能は「Failure」です。 それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。 しかし、私の目的はこれではありません。 私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に 私の望む最小限の利益で取引を終了させることです。 そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。 そのようなことを書こうとしたのですが、今はうまくいきません。 Tjipke de Vries 2014.03.10 07:16 #59 Arav007: 問題ないです。私がEAをテストしているブローカーのシンボルはEURUSD,GBPUSD...です。 シンボルがEURUSDproのブローカーにEAを取り付けると、「pro」が追加されるだけです。 私のコードを見直しましたか? 最低利益機能は「Failure」です。 それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。 しかし、私の目的はこれではありません。 私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に 私の望む最小限の利益で取引を終了させることです。 そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。 このようなことを書こうとしたのですが、今はうまくいきません。 あなたは、これをどのように扱うかについて何も考えていないので、あまりにも複雑にしすぎです。 読めば読むほど、自分でプログラミングしようとすればするほど、より複雑なものを作るのが容易になります。 しかし、単純なものから始めると、1つの取引でプログラムを動作させるために開始し、後で多くの取引で試してみてください。 多くのことを学ばなければなりません。 もし、短い簡単なプログラムを選んで、それをテストするためにいくつかの変更を行う場合 そのプログラムがどのように動作しているのかを学ぶことができるかもしれません。 あなたが始めた問題 私ならどうするか //+------------------------------------------------------------------+ //| 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種類のMagicnumbers... Tjipke de Vries 2014.03.10 11:26 #60 Arav007:問題ないです。私がEAをテストしているブローカーのシンボルはEURUSD,GBPUSD...です。シンボルがEURUSDproのブローカーにEAを取り付けると、「pro」が追加されるだけです。 私のコードを見直しましたか?最低利益機能は「Failure」です。それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。しかし、私の目的はこれではありません。私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に 私の望む最小限の利益で取引を終了させることです。そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。私はそのようなものを書こうとしましたが、今はうまくいきません。 私はあなたのコードをコンパイルしました 80エラー 6警告 ほとんどが未宣言の識別子です。 すべての識別子が宣言されたあなたのコードが必要です。 ファイルが大きすぎる場合は、添付してください ファイルをコンパイルし、あなたが得るエラーをチェックして ください。 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
OrderCommentはブローカーによって上書きされることがあります。
ということです。さて、私の要求通り、価格が7pip [103.603]の利益になったとき、1番目と2番目のトレードのストップロスは1pipの利益[103.543]になり
1番目と2番目のトレードのストップロスは1ピップの利益[103.543]になり、3番目のトレードのストップロスは103.386のままです。
extern int BreakEven = 7 とする。
(* 10 ) 5桁のブローカーで補正してpipvalueを取得する。
ああ、確かにこれは欠点だ。夕方からの苦労が水の泡です。
注文コメント」機能によってトレードを区別する方法を試して、コードを書きました。
とにかく、あなたのコードではストップロスの部分をBEや希望のポイントに移動させることができますが、まだ「3つ目」のトレードの問題が解決されていません。
私はこのBE移動のコードも持っていますが、3番目のトレードではSLが移動しないので困っています。
別のアイデアを思いつき、今それを試しています。
そして、これは有効だったのでしょうか?
文字列 comment_sell="Sell Order";
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red).もし、if (OrderComment(), iOrderType_Sell(), iOrderType_Sell(), iMagicNumber, 0,Red);
if (オーダーコメント()=="comment_sell")// ?
これは有効なのでしょうか?
EURUSDのチャートに EAを取り付けたとします。
if (Order_Symbol()==EURUSD)とします。
現在のチャートがEURUSDかどうかを比較するのでしょうか?
ここで、私が考えた「マジックナンバー」による注文の見分け方を紹介します。
中括弧がバランスしていない。
これは可能なのでしょうか?
この方法では、3つの異なるマジックナンバーを探さなければなりません。
ということができそうです。
さて、(少なくとも私にとっては)継続的なハードワークスペルの後、EAを「エラーフリー」にしました!
簡単に変更を投稿する:
Set_Magic_Number() 関数と混同しています。
正しく定義しましたか?また、他の関数で呼び出している間、正しく機能しますか?
よろしく
Set_Magic_Number()関数について混乱しています。
この関数は正しく定義されていますか?また、他の関数で呼び出した場合、正しく動作するのでしょうか?
関係者各位
あなたのシンボルは "EURUSD "ではないことをここで読みました。
正しいシンボルを使用する必要があります。
あなたのシンボルは "EURUSD "ではないと書いてありました。
正しいシンボルを使用してください。
それは問題ではありません。私がEAをテストしているブローカーのシンボルはEURUSD,GBPUSD...です。
もし私がEURUSDproのシンボルを持つブローカーにEAを取り付けるなら、私は「pro」を追加するだけです。
私のコードを見直しましたか?
最低利益機能は「Failure」です。
それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。
しかし、私の目的はこれではありません。
私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に
私の望む最小限の利益で取引を終了させることです。
そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。
そのようなことを書こうとしたのですが、今はうまくいきません。
問題ないです。私がEAをテストしているブローカーのシンボルはEURUSD,GBPUSD...です。
シンボルがEURUSDproのブローカーにEAを取り付けると、「pro」が追加されるだけです。
私のコードを見直しましたか?
最低利益機能は「Failure」です。
それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。
しかし、私の目的はこれではありません。
私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に
私の望む最小限の利益で取引を終了させることです。
そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。
このようなことを書こうとしたのですが、今はうまくいきません。
あなたは、これをどのように扱うかについて何も考えていないので、あまりにも複雑にしすぎです。
読めば読むほど、自分でプログラミングしようとすればするほど、より複雑なものを作るのが容易になります。
しかし、単純なものから始めると、1つの取引でプログラムを動作させるために開始し、後で多くの取引で試してみてください。
多くのことを学ばなければなりません。
もし、短い簡単なプログラムを選んで、それをテストするためにいくつかの変更を行う場合
そのプログラムがどのように動作しているのかを学ぶことができるかもしれません。
あなたが始めた問題
私ならどうするか
Symbol()に異なる入力は必要ない
3種類のMagicnumbers...
問題ないです。私がEAをテストしているブローカーのシンボルはEURUSD,GBPUSD...です。
シンボルがEURUSDproのブローカーにEAを取り付けると、「pro」が追加されるだけです。
私のコードを見直しましたか?
最低利益機能は「Failure」です。
それは、取引の損失や利益に関係なく、それが実行されるたびに、すべてのオープントレードを閉じているだけです。
しかし、私の目的はこれではありません。
私は、トレードが利益ゾーンに入り、その後、相場が反転し始めた場合、この「最小利益」機能で、確実に
私の望む最小限の利益で取引を終了させることです。
そして、ここでもまた、「第3の」トレードがこの機能の影響を受けないようにしたいのです。
私はそのようなものを書こうとしましたが、今はうまくいきません。
私はあなたのコードをコンパイルしました 80エラー 6警告
ほとんどが未宣言の識別子です。
すべての識別子が宣言されたあなたのコードが必要です。
ファイルが大きすぎる場合は、添付してください
ファイルをコンパイルし、あなたが得るエラーをチェックして ください。