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

 
EVGENII SHELIPOV #:

Alexeiさん、画像を拡大してみてください。

ズームアップしたところ。二番目に低い注文価格と、ペナントの注文基準に一致しない注文のチケットに、矢印の通り表示されました。私のコードを実行すると、最下位の注文のチケットが表示されます。BUYオーダーではなく、下から2番目のオーダーを取得したい場合は、この機能で終了できます。

 
Alexey Viktorov #:

ズームアップしたところ。私が見たのは、2番目に安い注文価格を指す矢印と、ペナント注文の基準を満たさない注文のチケットでした。私のコードを実行すると、最下位の注文のチケットが表示されます。この機能を発展させて、下のBUYオーダーではなく、2つ目のオーダーを取得することも可能です。

次点注文券判定のコードに間違いがあるところしか聞けません。

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

私は私の質問としてのみ、ペナルトオーダーのチケットを決定するためのコードのどこにエラーがあるのでしょうか?

注文の価格が一切考慮されていないというエラーです。

ダイアログのどこかに、全体を配列にして、ソートして番号で任意のチケットを取得するアドバイスがありますね。しかし、それに対して、どうすればいいのかがわからない。

このように

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

私の質問としてしか答えられませんが、ペニオク注文のチケットを決定するコードのどこに誤りがあるのでしょうか?

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

そしてもう一つの重大なエラーは、ループ内で注文を検索している間に、順番に注文を検索する関数を呼び出して いることです... そして、コードの実行が関数に戻ったとき、別の注文がすでに選択されています... そしてOrderTicket() は期待とは全く異なるものを返して います。

 
Alexey Viktorov #:

注文の価格が一切考慮されていないというエラーです。

ダイアログのどこかに、全体を配列に入れ、ソートしてカウントで任意のチケットを取得するアドバイスがあります。しかし、それに対して、どうすればいいのかがわからない。

このように

Alexeyさん、ログのエラーについてコメントお願いします。

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: ArraySort関数の開始位置0が正しくない。

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: 'eGriD2.mq4' の配列が範囲外 (664,18)です。

2021.11.07 12:17:40.792 2020.01.02 06:00:00 EAの重大なエラーのためテストパス停止


 
EVGENII SHELIPOV # :

Alexeyさん、ログのエラーについてコメントをお願いします。

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: ArraySort関数の開始位置0が正しくない。

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: 'eGriD2.mq4' の配列が範囲外 (664,18)です。

2021.11.07 12:17:40.792 2020.01.02 06:00:00 EAの重大なエラーのためテストパス停止


これらのエラーは私のコードではありません。私はアグリッツ語が堪能ではないので、このサイトの内部翻訳者を使用しています。このように訳される。

ArraySort関数の開始位置が0でない - ArraySort関数の開始位置が0でない。

eGriD2.mq4' の範囲外の配列 (664,18) - 'eGriD2.mq4' の範囲外の配列 (664,18)

EAに重大なエラーが発生したため、テストパスが停止しました。

そこで、スタジオにあるコード。

ps; ただし、注文が2つ以下のときにこの関数を呼び出すと、このようなエラーが発生します。私は.........に対して保護したことはないのですが、した方がいいのでしょうね。

これこそ、私が誰かを助けたいと思う気持ちが全くない理由です。あなたは私のヒントの思慮深い応用を期待しているのですが、・・・・・・・。

 
こんにちは。n本の棒に対する最小/最大検索を実装する方法を教えてください。
 
Snajper007 #:
こんにちは。n本の棒に対する最小/最大検索を実装する方法を教えてください。 。
iHighest

iLowest

 
MakarFX

ここでまた質問です。フラクタル描画するインジケータがあります。n本のバーで信号があるかどうかを確認するにはどうすればよいですか?

 
Snajper007 #:

ここでまた質問です。フラクタル描画するインジケータがあります。n本のバーで信号があるかどうかを確認するにはどうすればよいですか?

まず、フラクタルを描画するインジケータに依存します