[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 6

 
DhP:


各ティックで保留中の注文数を再計算します。

少ない場合は、1つの保留中の注文が成行注文になったことを意味します。

残ったもの(不要になったもの)は、すべて削除することができます。


削除された時点では、両方の注文は成行注文です。しかし、最後の保留中の注文を 削除したり、トリガーをかけたりしても、そのチケットはトリガーされ、エラーを発生させます。そして、最後から二番目のものは、まだ保留中です。
 
Andreev:

リンクありがとうございます!!!調べてみます :)時間、マジックナンバーだけでなく、注文の種類別(bylimitまたはselllimit)にするとよいでしょう。でも、おそらく私のことをよく理解していなかったのでしょう。私の問題は、注文に印をつけることではなく、それをどのように削除するかということです。最後の注文をどのように定義しても、最後の保留中の注文しか削除することができません。
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
最初の投稿で「次の例を使って定義していますが、最初の保留中の注文はすべての条件が満たされているにもかかわらず、最後の保留中の注文 だけが決済されます。Help me find error!!!!!!!!!!!!" - 残りの保留中の注文をすべて削除し、そのうちのいくつかを成行注文にする必要があります - このコードは取引条件に書かれているはずで、先に進みます....
 
Roman.:
最初の投稿「定義に次の例を使用しますが、最初の保留中の注文はすべての条件が満たされているにもかかわらず、最初の注文ではなく、最後の保留中の注文だけが閉じられます。Help me find error!!!!!!" - 残りの保留中の注文をすべて削除し、その一部を成行注文にする必要があります - このコードを取引条件に入力し、先に進みます...。

ありがとうございます!!!こんなに複雑だとは思わなかった :)))
 
Roman.:
最初の投稿「定義に次の例を使用しますが、最初の保留中の注文はすべての条件が満たされているにもかかわらず、最初の注文ではなく、最後の保留中の注文だけが閉じられます。Help me find error!!!!!!" - 残りの保留中の注文をすべて削除し、その一部を成行注文にする必要があります - このコードを取引条件に入力し、先に進みます...。

数行で済むと思ったのですが・・・。:)
 
Andreev:

削除された時点で、両方の注文は市場に出回っています。しかし、最後の保留中の注文が削除されたり、トリガーされたりしても、それをトリガーしたチケットはエラーを表示します。ペンタックスならまだしも。


どうしてこんなことが可能なのか、想像もつかない。

未決済注文の 再計算後、Expert Advisorが1つの注文を見つけることができなかった場合、直ちに残りの注文を削除するコマンドを発行します。

必要のない保留注文を削除する操作は、必ずオープン操作の前に(先行)して行わなければならない。

 
Roman.:

最初の投稿「定義に次の例を使用しますが、最初の保留中の注文はすべての条件が満たされているにもかかわらず、最初の注文ではなく、最後の保留中の注文だけが閉じられます。Help me find error!!!!!!!!!!!!" - 残りの保留中の注文をすべて削除し、そのうちのいくつかを成行注文にする必要があります - このコードは取引条件に書かれているはずで、先に進みます....

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
皆さんは、コードをコンパクトに書こうとしたことがありますか?

以下は、あなたのコードです。

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))                            continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))                    continue;
      ticket = OrderTicket( );                         // Номер ордера
      orderLots = OrderLots();                         // Lots   
      SL =  OrderStopLoss();                           // Значение StopLoss ордера
      TP = OrderTakeProfit();                          // Значение TakeProfit ордера
      if (ticket>0) {
         while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
            Sleep(100);
            OrderDelete(ticket,CLR_NONE); // и удаляете их                       
         }
      return (0);
      }
 
Andreev:

2、3行で収まるかもしれないと思ったのですが.:)

さて、artmedia70 さん(2011.07.24 20:01)は、ほぼ2行にすべてを詰め込んでいます。ご希望通り)))
 

どこを間違えているのか、ご教授ください。注文がクローズされたバーでは、注文がオープンされないようにすることです


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
if ((условие 1)&&(условие 2)&&(OrderCloseTime()!=Time[0]))
 {
 OrderSend...; 
 }

しかし、テスターでは、注文が閉じられた後、まだ条件が満たされており、同じ方向にもう1つの注文が開かれている

 
artmedia70:
コンパクトにコードを書いたことがない方

以下、自作コードです。

私は...:-)))パスカルからの癖で...。可読性が悪くなる...。特に、あまり「入門」していない人には...。:-)))また、ループや条件を入れ子にして行う操作では、タブ幅でインデントするか、スペース3つでインデントする必要があります - 最後の手段として... :-))。
 
LazarevDenis:

どこを間違えているのか、ご教授ください。注文がクローズされたバーでは、注文がオープンされないようにすることです


しかし、テスターでは、注文が終了した後も条件が満たされ、同じ方向にもう一つ注文が出されます


参考に、 この 、「open and close one order on one bar site:mql4.com -」などとググってみてください。