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

 
最も近い買いストップと最も近い売りストップの価格を 表示するコードを表示することができますか?
 
ilyav:
最も近い買いストップと最も近い売りストップの価格を 表示するコードを表示することができますか

価格だけ?何のために?そして、"ニアレスト "という言葉を解読してください。

 
Vladimir Karputov:

価格だけ?何のために?そして、"ニアレスト "という言葉を解読してください。

価格だけでいい。

見てください。

現在、現在の価格から 100ピップ離れたところに10の買いストップがあります。

現在、現在の価格から100ピップ離れたところに10個の売りストップがあります。

Printで現在の価格から相対的に最も近い買いストップと最も近い売りストップの価格を表示する必要があります。

やってみたが、うまくいかなかった。

最も近い買いストップの価格は正しく出力されるが、最も近い売りストップの価格がなぜか出力される。

この関数m_order.PriceOpen(); は、常に買いの逆指 値を表示します。買いストップ要求の後に売りストップの価格を教えてもらうのですが。

これは、さらなるロジックのために行われるものです。

私は、最も近い買いストップと最も近い売りストップの価格を2で割っています。

Expert Advisor は、取得した数値に基づいて作業を継続します。

フル機能は

//+------------------------------------------------------------------+
void TradeMode3()
  {
   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);

      int TotalGridSellOrders=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_SELL_STOP)
               TotalGridSellOrders++;
      Print("Количество sell ордеров grid ",TotalGridSellOrders);
      if(TotalGridSellOrders>=1)
        {
         grid_sell_price_memory=m_order.PriceOpen();
         Print("Цена ближайшего sell grid ордера: ",grid_sell_price_memory);
        }
     }
  }
//+------------------------------------------------------------------+
 

今度はコードを変えてみました。

//+------------------------------------------------------------------+
void TradeMode3()
  {
     {
      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)
        {
         double grid_buy_price_memory=m_order.PriceOpen();
         Print("Цена ближайшего buy grid ордера: ",grid_buy_price_memory);
        }
     }
     {
      int TotalGridSellOrders=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_SELL_STOP)
               TotalGridSellOrders++;
      Print("Количество sell ордеров grid ",TotalGridSellOrders);
      if(TotalGridSellOrders>=1)
        {
         double grid_sell_price_memory=m_order.PriceOpen();
         Print("Цена ближайшего sell grid ордера: ",grid_sell_price_memory);
        }
     }
  }
//+------------------------------------------------------------------+

変更なし。買いの逆指値のみ出力

 
ilyav:

今度はコードを変えてみました。

変更なし。買いの逆指値のみ表示されます。

まずはコードを書いてみましょう。買いストップ、売りストップの検索機能は価格をパスする必要があると言うことから始めたいのですが、そうでなければどうやって検索するのでしょうか.

また、「最寄」- 価格の上か下かを明確にする必要があります。それとも、設定した価格と保留中の注文の 差だけなのでしょうか?

 
Vladimir Karputov:

まずは書いてみよう。買いストップ、売りストップの検索機能は価格をパスする必要があると言うことから始めたいのですが、そうでなければどうやって検索するのでしょうか.

私はこうしています。

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_SELL_STOP)
               TotalGridSellOrders++;

この関数は、現在のストップ安の数を完璧に出力します。

次に、最も近いSell Stopを選択しました。その価格の表示と印刷をお願いします

double grid_sell_price_memory=m_order.PriceOpen();    
Print("Цена ближайшего sell grid ордера: ", grid_sell_price_memory);

ヘルプに書いてあります。

COrderInfoクラス

価格オープン

注文価格を取得します。

doublePriceOpen()const

戻り値

注文開始価格です。

備考

Select(by ticket) またはSelectByIndex(by index) メソッドを使用して、アクセスする順序を事前に選択する必要があります。


どうしたんですか?順番に選択しています。インストールにかかる費用を要求される。

それとも、私が何か勘違いしているのでしょうか?なぜ、うまくいかないと買いの逆指値が入るのですか?

 
Vladimir Karputov:

また、「最寄」は価格の上限なのか下限なのかを明確にする必要があります。それとも、設定した価格と保留中の注文の 差だけなのでしょうか?

以下は、私が必要とする買いストップと売りストップの価格です。

 
ilyav:

どのBuy StopとSell Stopが必要なのか、その価格は以下の通りです。

価格 "price "から最も近い "buy stop "と最も近い "sell stop "を検索する機能です。

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(const double price,double &price_nearest_buy_stop,double &price_nearest_sell_stop)
  {
   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()-price>0.0 && m_order.PriceOpen()-price<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price-m_order.PriceOpen()>0.0 && price-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
              }
           }
  }
 

今度は別の問題)

私は以前、このように自分の関数を呼び出していました

//|  Выбран режим торговли 3 ? Тогда торгуем его    
      if(РежимТорговли==3)
        {
         TradeMode3();
        }

あなたのコードを挿入し、私の関数を次のように変更しました。

 //|  Выбран режим торговли 3 ? Тогда торгуем его    
      if(РежимТорговли==3)
        {
        CalculateAllPendingOrders();
        }
     

現在、コンパイル時にエラーが発生する(

'CalculateAllPendingOrders' - wrong parameters count
 
ilyav:

今度は別の問題)

私は以前、このように自分の関数を呼び出していました

あなたのコードを挿入し、私の関数を次のように変更しました。

コンパイル時にエラーが発生するようになりました(

この関数にはPRICEを 渡す必要があり、PRICEを中心に保留中の注文の 検索が行われます。

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

void CalculateAllPendingOrders(const double price,double &price_nearest_buy_stop,double &price_nearest_sell_stop)
理由: