半分の区画を閉鎖する。 - ページ 12

 
DomGilberto:
ああ、そうだ、わかったよ。どうすればいいのか、わかった気がします。)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
それでうまくいくのでしょうか?そこから1ティック ごとにチェックするのでしょうか?(CloseHalfOrder() )

下の更新 - それは動作します:)
 

申し訳ありません - 私は物事を試してみる前に101の質問をするのをやめるべきです :P

はい - それは動作します。私は今、ティックが入り、買値が>=指定されたOrderClose価格であるとすぐに閉じるように動作させています :D

正しい方向への素晴らしい大きな一歩です!今、価格がOrderClose関数で 指定された同じ価格を再訪するたびに、常に半分を閉じることからこれを停止するクランプを置くこと:)

(迷惑なOrderModifyエラー1も取り除いた!) うーん、最初のターゲット(1:1)がそのクローズオーダーを行った後、待機するための正しいロジックが思いつきません...。何かいいアイデアはないでしょうか?OrderTicket()の番号は同じなので...そんなはずはないのですが?今、その部分で行き詰っています :) この部分ができてから、かなり割れました :)

私はあなたの助けを借りて、とても感謝しています

 
DomGilberto:


マンさん......本当にありがとうございました!

どういたしまして。私は、話を聞いて、喜んで自分自身を助けようとする人を、まず助けることに問題はありません。
 
アンビリーバボー 1 2 3 4 5 6 7 8 9 10 11 12

なんという大きな話題

半地下を閉鎖する。

あなたが知っている瞬間に、他の人にどうすればいいか説明できることを望みます。

101の質問...誰がそれらをすべて読みたいと思う...

のために (あまりにもその迷惑なOrderModifyエラー1を取り除いた!)

これは、すでに持っている設定で取引を変更しようとすると、ほとんどの場合発生します。

 

でも、一度理解すると、とてもやりがいがありますよ。もちろん、あなたの意見にも感謝します。

最後の1つは、OrderClose()の終了値で新規注文を半分にするループを継続的に停止させることです。正直言って、このロジックは理解できません。いつ、どのような価格で部分的にクローズするかという点では、ぴったりなのです。ただ、一回注文を半分にした時点で停止するように指示する必要があるのでしょうか?

問題は、OrderClose()がオープンポジションの半分をクローズした後、int startがOP_BUYがオープンするたびにCloseHalfOrder()を呼び出すため、何度も何度も呼び出されることです...。何かいい方法はないでしょうか?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   //Print("The minimum lots are: ",DoubleToStr(minLot,Digits));

   double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   //Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));

   double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
   Print("The Lots to close is: ",DoubleToStr(half,Digits));

for(int c=OrdersTotal()-1; c>=0; c--)
      {
      if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
         {
         Print("Order Ticker Number = ",OrderTicket());
         Print("Order Lots Open = ",OrderLots());
         }
      else
          {
          Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?
          continue;
          }

      double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
      Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
      
      if(OrderMagicNumber()==MagicNumber)
         if(OrderSymbol()==Symbol())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
               {
               Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
               bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
unbelievable 1 2 3 4 5 6 7 8 9 10 11 12

なんという大きな話題

半地下を閉鎖する。

あなたが知っている瞬間に、他の人にどうすればいいか説明できることを願っています。

101の質問...誰がそれらをすべて読みたいと思う...

のために (あまりにもその迷惑なOrderModifyエラー1を取り除いた!)

これは、すでに持っている設定で取引を変更しようとすると、ほとんどの場合発生します。


仝囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮囮々は〆冱~に竃栖ない。私は他の人が使用するために1つの簡潔なトピック/スレッドにそれをすべて照合されます?(私はこれを行うことについて行くだろうどのようにわからない?)

上記の最後のポストを参照してください - 私はほぼそれを行っている、ちょうど継続的に同じOrderClose()終了価格で半分を閉じてループを停止するように指示するロジックを把握することはできません?

OrderModifyのエラー1に関してもヒントをありがとうございます :)
 
DomGilberto:

メイト私は部分的に開いている順序を閉じるためのシンプルで効果的な方法を説明するスレッドを書くことが幸せよりもなります - 私はちょうど1つの最後のビットで立ち往生している、それはミントを動作している!私はすべての1つの簡潔なトピック/スレッドを照合します他の人が使用する。私は他の人が使用するために1つの簡潔なトピック/スレッドにそれをすべて照合されます?(私はこれを行うことについて行くだろうどのようにわからない?)

上記の最後のポストを参照してください - 私はほぼそれを行っている、ちょうど継続的に同じOrderClose()終了価格で半分を閉じてループを停止するように指示するロジックを把握することはできません?

OrderModifyのエラー1に関してもヒントをありがとうございます :)

まずブレイクイーブンまでチケットを移動させ、それから取引の一部をクローズするのはどうでしょう。
 
deVries:

まずブレイクイーブンまでチケットを移動させてから、トレードの一部をクローズするのはどうでしょう。

これのせい?まずブレイクイーブンに動けば問題ないのですが・・・。最初の障害は、私が理解できないこの部分です?先にブレイクイーブンに移動して、その後半分を決済しても、これはANYオープンポジションを再度呼び出し、「CloseHalfOrder();」を呼び出して再度同じ価格でOrderClose()するのでしょうか?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

これのせい?まず収支が合うように動けば問題ないのですが...。最初の障害は、私が理解できないこの部分です?先にブレイクイーブンに移動して、その後半分を決済しても、これはANYオープンポジションを再度呼び出し、「CloseHalfOrder();」を呼び出して再度同値でOrderClose()するのでしょうか?


SLがすでにBEにない場合のみ、BEに移動して半分をクローズします。