これはたくさんのコード行を含む長いポストになるでしょう...
私は、複数の位置をとり、隠されたSLレベルとTPレベルで閉じる、意図したとおりに動作する既存のコードを持っています。
私は、SLまたはTPがヒットする前にシグナルが生成された場合に、EAが閉じて後退することを可能にする既存のコード機能を追加したいと考えています。
ここでうまくいく既存のコードです:
挿入されたコード//---------------------------------------------- ----/取引パラメータ//---------------------------------------- ---------- RefreshRates(); {if((購入するカスタム取引信号){if((時間()== 0)(分()== 0))スリープ(60000); {fBuy1(); fBuy2(); fBuy3(); fBuy4(); fBuy5(); fBuy6(); }} if(売買のためのカスタム取引信号){if((Hour()== 0)(Minute()== 0))Sleep(60000); {fSell1(); fSell2(); fSell3(); fSell4(); fSell5(); fSell6(); }}}}/-------------------------------------------- ------/購入//--------------------------------------- ----------- void fBuy1(){int result = OrderSend(ST1、OP_BUY、Lots、Slippage、0,0、Open LONG Magic1、Magic1,0、Blue); OrderSelect(結果、SELECT_BY_TICKET、MODE_TRADES); DoubleToStr(OrderOpenPrice()、Digits)、、DoubleToStr(OrderStopLoss()、Digits)、TP:DoubleToStr(OrderTakeProfit()、Digits)、、OpenTrades :、OrdersTotal()、Close#91; 1#93 ;:、Close#91; 1#93;); 、SL: DoubleToStr(OrderStopLoss()、Digits) 、TP( )、( )、 : DoubleToStr(OrderTakeProfit()、Digits)); if(result == -1){int e = GetLastError();印刷(e); }} void fBuy2(){int result = OrderSend(ST1、OP_BUY、Lots、Ask、Slippage、0,0、Open LONG Magic2、Magic2,0、Blue); OrderSelect(結果、SELECT_BY_TICKET、MODE_TRADES); DoubleToStr(OrderOpenPrice()、Digits)、、DoubleToStr(OrderStopLoss()、Digits)、TP:DoubleToStr(OrderTakeProfit()、Digits)、、OpenTrades :、OrdersTotal()、Close#91; 1#93 ;:、Close#91; 1#93;); 、SL: DoubleToStr(OrderStopLoss()、Digits) 、TP( )、( )、 : DoubleToStr(OrderTakeProfit()、Digits)); if(result == -1){int e = GetLastError();印刷(e); }} ETC ...繰り返しコードはVoidfBuy6を介して続きます//------------------------------------- -------------/SELL/-------------------------------- ------------------ void fSell1(){int result = OrderSend(ST1、OP_SELL、Lots、Bid、Slippage、0,0、ショートSHORT Magic1、Magic1,0、赤); OrderSelect(結果、SELECT_BY_TICKET、MODE_TRADES); DoubleToStr(OrderOpenPrice()、Digits)、、OpenTrades(OrderOpenPrice()、Digits)、DoubleToStr(OrderOpenPrice()、Digits) :、OrdersTotal()、Close#91; 1#93 ;:、Close#91; 1#93;); 、SL: DoubleToStr(OrderStopLoss()、Digits) 、TP( )、( )、 : DoubleToStr(OrderTakeProfit()、Digits)); if(result == -1){int e = GetLastError();印刷(e); }} void fSell2(){int result = OrderSend(ST1、OP_SELL、Lots、Bid、Slippage、0,0、ショートSHORT Magic2、Magic2,0、Red); OrderSelect(結果、SELECT_BY_TICKET、MODE_TRADES); DoubleToStr(OrderOpenPrice()、Digits)、、OpenTrades(OrderOpenPrice()、Digits)、DoubleToStr(OrderOpenPrice()、Digits) :、OrdersTotal()、Close#91; 1#93 ;:、Close#91; 1#93;); 、SL: DoubleToStr(OrderStopLoss()、Digits) 、TP( )、( )、 : DoubleToStr(OrderTakeProfit()、Digits)); if(result == -1){int e = GetLastError();印刷(e); }} void fSell3(){int result = OrderSend(ST1、OP_SELL、Lots、Bid、Slippage、0,0、ショートSHORT Magic3、Magic3,0、Red); OrderSelect(結果、SELECT_BY_TICKET、MODE_TRADES); DoubleToStr(OrderOpenPrice()、Digits)、、OpenTrades(OrderOpenPrice()、Digits)、DoubleToStr(OrderOpenPrice()、Digits) :、OrdersTotal()、Close#91; 1#93 ;:、Close#91; 1#93;); 、SL: DoubleToStr(OrderStopLoss()、Digits) 、TP( )、( )、 : DoubleToStr(OrderTakeProfit()、Digits)); if(result == -1){int e = GetLastError();印刷(e); }} ETC ...繰り返しコードはVoidfSell6を介して続きます//------------------------------------- -------------/HIDDEN SL TP関数//----------------------------- --------------------- void hidden_stop_loss(){int totalorders = OrdersTotal(); for(int i = totalorders-1; igt; = 0; i--){OrderSelect(i、SELECT_BY_POS);ブール結果=偽; (OrderOpenPrice()/100)* StopLossLong1)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); (OrderOpenPrice()/100)* StopLossShort1)、3))結果= OrderClose(OrderTicket()、OrderLots()、OrderLots ()、Ask、50、Red); (OrderOpenPrice()/100)* StopLossLong2)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); (OrderOpenPrice()/100)* StopLossShort2)、3))結果= OrderClose(OrderTicket()、OrderLots()、OrderLots ()、Ask、50、Red); (OrderOpenPrice()/100)* StopLossLong3)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); (OrderOpenPrice()/100)* StopLossShort3)、3))結果= OrderClose(OrderTicket()、OrderLots()、OrderLots ()、Ask、50、Red); } ETC ...リピートコードMagic6を介して継続}} return; } void hidden_take_profit(){int totalorders = OrdersTotal(); for(int i = totalorders-1; igt; = 0; i--){OrderSelect(i、SELECT_BY_POS);ブール結果=偽; {OrderOpenPrice()/(OrderOpenPrice()/100)* TakeProfitLong1)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); OrderOpenPrice() - ((OrderOpenPrice()/100)* TakeProfitShort1)、3))result = OrderClose(OrderTicket()、OrderLots ()、Ask、50、Red); (OrderOpenPrice()/100)* TakeProfitLong2)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); OrderOpenPrice() - ((OrderOpenPrice()/100)* TakeProfitShort2)、3))result = OrderClose(OrderTicket()、OrderLots ()、Ask、50、Red); (OrderOpenPrice()/100)* TakeProfitLong3)、3(正規化されていない) ))結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); OrderOpenPrice() - ((OrderOpenPrice()/100)* TakeProfitShort3)、3))result = OrderClose(OrderTicket()、OrderLots ()、Ask、50、Red); } ETC ...繰り返しコードはMagic6を介して続きます}} return; }
上記の作品は素晴らしいですが、逆の信号と逆機能の場合は、近くに追加したいと思います...
EAは複数のマジックナンバーを入力し、隠れたSLとTPを複数のマジックナンバーで終了しますが、SLまたはTPがヒットする前に反対の反対の信号が生成されれば、すべてのオープンポジションを終了したいので、新しい一連の反対の位置。
これは私がこれまでに試したことですが、期待どおりに動作しません...他のアイデアですか?私は既存のフレームワークを使用したいと思います...私はここで何が間違っていますか?
挿入されたコード{if((購入時のカスタム取引信号){if((時間()== 0)(分()== 0))スリープ(60000); {CloseSell(); lt- ;-これは論理的には...スリープ(10000)より下の追加論理;新しい位置を実行する前に既存の位置を閉じるバッファを与えるために追加されたものは、出口fBuy1()に影響するとは考えない。 fBuy2(); fBuy3(); fBuy4(); fBuy5(); fBuy6(); }など.../------------------------------------------- -------/fOpenPostionsの前に既存の関数を閉じる//---------------------------------- ---------------- void CloseSell(){int totalorders = OrdersTotal(); for(int i = totalorders-1; igt; = 0; i--){OrderSelect(i、SELECT_BY_POS);ブール結果=偽; {if(OrderType()== OP_SELL){結果= OrderClose(OrderTicket()、OrderLots()、Ask、50、Red); }}}} void CloseBuy(){int totalorders = OrdersTotal(); for(int i = totalorders-1; igt; = 0; i--){OrderSelect(i、SELECT_BY_POS);ブール結果=偽; {if(OrderType()== OP_BUY){結果= OrderClose(OrderTicket()、OrderLots()、Bid、50、Red); }}}/戻ります。 }
私が思ったように、追加されたコードは機能しません。その他の回避策?