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

 
EVGENII SHELIPOV #:

プログラマーの皆さん、ごきげんよう!!!!

もう一度、質問をさせていただきますが、少し言い換えてみました。

グリッドEAでは、ペニオク注文のチケットを見つける必要があります。ストラテジーテスターでは最大注文数のチケットからの解決策-1が機能しないと思うのですが、デモやリアル口座ではそうなのでしょうか、理由がわかりません。

次から最後の注文券を決定する関数のコードを書きました。このロジックは、グリッド内のすべてのオープンオーダーに目を通すと、それに続く最大限のものが見つかり、それが必要なオーダーチケットとなる、というものである。

しかし、私のプログラミングのレベルが十分でないため、コードに誤りがあるようです。この関数の結果がチケットの最小値となります。この2つの機能は、MAXチケットとペナントチケットです。maxチケットを定義する関数は問題なく動作します。

どのようなエラーなのか、アドバイスをお願いします。ありがとうございます。

この2番目の図は、最大チケットや最大オープン時間は必要ありませんが、買い注文の最小オープン価格と売り注文の最大オープン価格を選択する必要があることを示しています。
 
Alexey Viktorov #:
これは2枚目の画像で、最大チケットや最大開始時間は必要ないが、買い注文の最低開始価格と売り注文の最高開始価格を選択する必要があることを告げています。

Alexei 私はこれらの価格を決定する関数を持っているあなたが探しているチケットに到達する方法を説明することができますか?

 
Alexey Viktorov #:
この2番目の図は、最大チケットや最大オープン時間は必要ありませんが、買い注文の最小オープン価格と売り注文の最大オープン価格を選択する必要があることを示しています。
//+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_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() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return(max_price);
  }
 
EVGENII SHELIPOV #:

Alexei 私はこれらの価格を決定する関数を持っているあなたが探しているチケットに到達する方法を説明することができますか?

こんな感じ。

//+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder(int Magic)// int Magic вставлен только для компиляции без ошибок.
 {
  int total = OrdersTotal(),
      my_ticket = 0;
  double minPrice = DBL_MAX;
  for(int cnt = total; cnt-- > 0;)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        if(OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
  return(my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov #:

このように

Alexeyありがとうございます!しかし、関数の要点に入る前に、私は明らかにしたかった:この関数は、ペナルトオーダーの チケットを選択するためのものですか?

 
EVGENII SHELIPOV #:

Alexey ありがとうございます!しかし、関数の要点に入る前に、私は明らかにしたかった:この関数は、ペネトレイトオーダーの チケットを選択するのですか?

いいえ、最安値のBUY注文券を探します。ここから先は、私かマカーが練習させてもらうことになります。

 
Alexey Viktorov #:

いいえ、最安値のBUY注文券を探します。ここからは、あなたかマカーが練習することになります。

2日目にして、あなたの会社で物足りなさを感じています。ミニマム/マックスチケットの計算機能は、カラシニコフのマシンのように問題なく動くので、まだ聞いてませんが、2日目にはマンネリ化してしまいました

//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket=INT_MAX;
     {
      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() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(min_ticket);
  }

まあ、とにかく、ご指摘ありがとうございました。

 
EVGENII SHELIPOV #:

はいアレクセイ私はあなたの間で二日目は非常に適切な人ではないと感じています。最小/最大チケットを計算する機能は、私はそれらについて誰にも聞かなかったカラシニコフのマシンとしてスムーズに動作しているが、二日目は、私は引っ掛かりをオンになります!!!!。

まあ、とにかく、ご忠告ありがとうございました。

この絵は

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

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

エフゲニイ・シェリポフ, 2021.11.07 06:43

プログラマーの皆さん、ごきげんよう!!!!

もう一度、私の質問を少し言い換えて聞いてみます。

グリッドEAで、ペネトレイトオーダーのチケットを見つけたいのですが。最大注文のチケットから-1のソリューションは、多分、戦略テスターでは動作しませんが、それはデモや実際の口座で動作しませんので、私は絵を添付し、それはなぜ明らかであろう。

次から最後の注文券を決定する関数のコードを書きました。このロジックは、グリッド内のすべてのオープンオーダーに目を通すと、それに続く最大限のものが見つかり、それが必要なオーダーチケットとなる、というものである。

しかし、私のプログラミングのレベルが十分でないため、コードに誤りがあるようです。この関数の結果がチケットの最小値となります。この2つの機能は、MAXチケットとペナントチケットです。maxチケットを定義する関数は問題なく動作します。

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
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);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }

どのようなエラーなのか、アドバイスをお願いします。ありがとうございます。


は、矢印が最大券面を示しているのでしょうか?ここには、2番目に低い注文価格を指す矢印が表示されていますね。どうしたんですか?
 
Alexey Viktorov #:

この写真は


矢印は最大券種?ここには、2番目に低い注文価格を指す矢印が表示されていますね。どうしたんですか?

アレクセイ、写真を大きくしてくれないか?

 
EVGENII SHELIPOV #:

アレクセイ、写真を大きくしてくれないか?

これが予測される 順序です

理由: