MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1720

 
MakarFX #:
ペンタを検索するコードに誤りがあるのではなく、最も可能性が高いのは、本文中の情報の出力に誤りがあることです。

私たちは、コードに誤りがあるなどとは一言も言っていません。もう一度言いますが、このコードは新しい最大注文が開かれたときに動作し、そうでないときは、Expert Advisorは最後尾の注文=最後の注文と見なします。以上

 
MakarFX #:
エラーは、ペナントの検索コードではなく、情報をテキストに出力する際に発生する可能性が高いです

マカー、なぜハイライトした状態がうまくいかないのですか?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

マカー、ハイライトした条件がうまくいかない理由を教えてくれ。

この行で、最大のチケットを見つけることができます

if(OrderTicket() > penultimate_ticket)

で、この行では、最大値を比較していますね。

if(penultimate_ticket < GetTicketMaxOrder())
仍って斯くや
 
EVGENII SHELIPOV #:

私たちは、コードに誤りがあるなどとは一言も言っていません。もう一度言いますが、このコードは新しい最大注文が開かれたときに動作し、そう でないときは、Expert Advisorは最後尾の注文=最後の注文と見なします。以上

EAを再起動した場合のみ発生します。

 
MakarFX #:

EAを再起動した場合のみです。

いや、マカー、ここを見てくれ、最後のオーダーの変数と関数をモニターに置いたんだ

ObjectCreate("signal400",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal400",OBJPROP_XDISTANCE,100);
   ObjectSet("signal400",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal400",DoubleToString(FindPenultimateLots(),2),14,"Tahoma", clrRed);
   ObjectCreate("signal401",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal401",OBJPROP_XDISTANCE,200);
   ObjectSet("signal401",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal401",DoubleToString(prev_ticket,0),14,"Tahoma", clrRed);
 
MakarFX #:

この線上に最大券面がある

と、この行で最大値を比較するのです。

仍って斯くや

さて、この機能でスキャンしたチケットはすべて、どのようにすれば

(OrderTicket()

に相当するチケットを削除します。

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

マカー、なぜハイライトされた条件がうまくいかないのか教えてくれ

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

ユージン、チケットの変数はどこで変わるんだ?それとも、1回の注文で全ループが動くのでしょうか?

 
Alexey Viktorov #:

ユージン、チケットの変数はどこで変わるんだ?それとも、1回の注文で全ループが動くのでしょうか?

私はすでに彼に手紙を書き ました
 
EVGENII SHELIPOV #:

いや、マカー、ここを見てくれ、最後のオーダーの変数と関数をモニターに置いたんだ

EA再起動時にprev_ticketはリセットされる
 
MakarFX #:

もう一度...作業用コードを渡しました!

テスターにかけ、ボタンを押す。

それを見るには、注文をクローズさせる必要がありますが、このEAではそれができません。そして、全ての問題はMAXオーダーが終了した後に発生します

理由: