初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 864

 
Vladimir Karputov:

この関数には、保留中の注文を 検索するためのPRICEを 渡さなければなりません。

この価格に加え、2つの変 数をパスする必要があります。

私はあきらめた、私がスクリーンショットに矢印で示したそれらの保留中の注文の価格の印刷を表示する既製のExpert Advisorをお持ちですか?

この機能は、価格を渡さずに動作することが理解できません。

int TotalGridBuyOrders=0;
         Print(__FUNCTION__);
         for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
            if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
               if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic && m_order.OrderType()==ORDER_TYPE_BUY_STOP)
                  TotalGridBuyOrders++;
         Print("Количество buy ордеров grid ",TotalGridBuyOrders);
         if(TotalGridBuyOrders>=1)
           {
            grid_buy_price_memory=m_order.PriceOpen();
            Print("Цена ближайшего buy grid ордера: ",grid_buy_price_memory);

???

 
ilyav:

あきらめた、スクリーンショットで矢印で示したそれらの注文の価格を印刷出力するExpert Advisorは用意されていないのでしょうか?

既成の機能を持たせたその中で合格する必要があります。

  • 現価
  • 次の買い指値の価格が書き込まれる変数です。
  • 次の売り注文の価格が書き込まれる変数です。

何がわからないんだ?

 
なるほど。どうやら私には合わないようです。
 
ilyav:

私はあきらめますが、スクリーンショットで矢印で示したそれらの保留中の注文の価格を印刷出力するExpert Advisorは用意されていないのでしょうか?

価格を送信せずにこの機能が動作するのは理解できない。

???

あなたは実行不可能なコードを示していますが、少なくともそれはコンパイルできません - 開き括弧と閉じ括弧の不一致が原因です。そして第二に=論理が破綻していること。

 
Vladimir Karputov:

あなたは実行不可能なコードを表示しています。少なくともコンパイルはできませんが、それは開閉ブラケットが不一致だからです。そして第二に=論理が破綻していること。

あなたのコードを書き直しました。

しかし、それは価格から遠く離れた保留中の注文を生成する

void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 
                 }
               Print("buy : ",price_nearest_buy_stop);
                return;  
              }
              
               
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 return;
              }
           }
  }
  
 
 
ilyav:

あなたのコードを書き直しました。

しかし、それは価格から遠く離れてペンダントを配る

プリントはOrdersTotal ループの後に来るはずです。

また、price1とは何でしょうか?どうやって手に入れるの?
 

そして、このバージョンでは、利用可能なすべての

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
                 Print("buy : ",price_nearest_buy_stop);
                 
              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 
              }
           }
  }
 
Vladimir Karputov:

プリントはOrdersTotal ループの後に来る必要があります。

また、price1とは何でしょうか?どうやって手に入れるの?
//|  Выбран режим торговли 3 ? Тогда торгуем его    

      if(РежимТорговли==3)

        {

        price1=m_symbol.Bid();

        TradeMode3();

そして、EAのヘッダーに私はこう書きました。

double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

すべてが正しい場合、最終的なバリエーションは次のとおりです。

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }

              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }

              }

           }
   Print("Цена ближнего SELL_STOP : ",price_nearest_sell_stop);
   Print("Цена ближнего BUY_STOP : ",price_nearest_buy_stop);
  }
//+------------------------------------------------------------------+

すべてがうまくいっているように見えます。間違いがあれば教えてください。ありがとうございました。

 

この問題を解決するためにご協力をお願いします。

例えば、現在のタイムフレームM1があるとすると、任意の上位TFの与えられたバーの最後のバーNの時間を知る必要があります。時間は60分ではなく、45分または他の時間かもしれませんし、さらに週末もあります。

どのように実装するのか?

 
ilyav:

そして、アドバイザーのヘッダーにはこう書かれています。

そして、すべてが正しく行われた場合、最終的なバリエーションは以下のようになります。

すべてがうまくいっているように見えます。間違いがあれば教えてください。ありがとうございました。

ライン前

price1=m_symbol.Bid();

引用元を更新する必要があります。

if(!RefreshRates())
   return;
理由: