Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 863

 
En yakın alış durağının ve en yakın satış durağının fiyatını yazdıran kodu gösterebilir misiniz?
 
ilyav :
En yakın alış durağının ve en yakın satış durağının fiyatını yazdıran kodu gösterebilir misiniz?

Sadece fiyat mı? Bu ne için? Ve "en yakın" kelimesini deşifre edin - kime, neye ...

 
Vladimir Karputov :

Sadece fiyat mı? Bu ne için? Ve "en yakın" kelimesini deşifre edin - kime, neye ...

Evet, sadece fiyat.

Görmek.

Şimdi, mevcut fiyattan 100 piplik artışlarla 10 satın alma durağımız var.

Şimdi, mevcut fiyattan 100 piplik artışlarla 10 satış durağı yerleştirdik.

Geçerli fiyata göre en yakın alış durağının ve en yakın satış durağının fiyatını Print'te görüntülemem gerekiyor.

Bunu yapmaya çalıştım ama işe yaramıyor.

En yakın alış durağının fiyatının baskısı benim için doğru görünüyor, ancak en yakın satış durağının baskısı benim için bir nedenden dolayı en yakın alış durağının fiyatını gösteriyor

İşte bu fonksiyonda m_order.PriceOpen(); nedense, satın alma durağının fiyatı her zaman yalandır. Her ne kadar alım stopu istedikten sonra bana satış stopunun fiyatını vermesini rica etsem de.

Bu daha fazla mantık için yapılır-

Bir sonraki alış durağının fiyatını ve bir sonraki satış durağının fiyatını 2'ye böleceğim.

Alınan rakama göre danışman çalışmaya devam edecek

Tam işlev -

 //+------------------------------------------------------------------+
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);
        }
     }
  }
//+------------------------------------------------------------------+
 

Şimdi kodu değiştirmeye çalıştım

 //+------------------------------------------------------------------+
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);
        }
     }
  }
//+------------------------------------------------------------------+

Değişiklik yapmadan. Yalnızca satın alma durdurma fiyatını görüntüler

 
ilyav :

Şimdi kodu değiştirmeye çalıştım

Değişiklik yapmadan. Yalnızca satın alma durdurma fiyatını görüntüler

Önce yazalım. Fiyatı Buy Stop ve Sell Stop arama işlevlerine iletmeniz gerektiğini söyleyerek başlayacağım - aksi halde nasıl arama yapılır? ...

Ayrıca açıklığa kavuşturmanız gerekiyor: "en yakın" - fiyatın üstünde mi yoksa altında mı? Yoksa verilen fiyat ile bekleyen emir arasındaki farkın modülü mü?

 
Vladimir Karputov :

Önce yazalım. Fiyatı Buy Stop ve Sell Stop arama işlevlerine iletmeniz gerektiğini söyleyerek başlayacağım - aksi halde nasıl arama yapılır? ...

ben böyle bakıyorum

 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++;

İşlev, mevcut satış duraklarının sayısını mükemmel bir şekilde yazdırır.

Ardından, en yakın satış durağını seçtik. Lütfen fiyatını verin ve yazdırın

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

Kılavuzda ne yazıyor

COorderInfo sınıfı

Fiyat Açık

Sipariş fiyatını alır.

çift PriceOpen () const

Geri dönüş değeri

Sipariş yerleştirme fiyatı.

Not

Yönteme göre erişim için sipariş önceden seçilmelidir   Seçme   (bilet ile) veya   SelectByIndex   (endekse göre).


Sorun nedir ? Bir sipariş seçtik. Lütfen kurulum fiyatı isteyiniz.

Yoksa bir şey anlamıyor muyum? O zaman yanlış yapıyorsam neden satın alma durdurma fiyatı alıyorum?

 
Vladimir Karputov :

Ayrıca açıklığa kavuşturmanız gerekiyor: "en yakın" - fiyatın üstünde mi yoksa altında mı? Yoksa verilen fiyat ile bekleyen emir arasındaki farkın modülü mü?

İşte ihtiyacım olan al-stop-sat stop fiyatı

 
ilyav :

İşte ihtiyacım olan al-stop-sat stop fiyatı

Bu işlev, "fiyat"ın üzerindeki en yakın Alış Durdurma ve "fiyat"ın altındaki en yakın Satış Durağı'nı arar:

 //+------------------------------------------------------------------+
//| 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();
                 }
              }
           }
  }
 

Şimdi başka bir sorun

Fonksiyonumu şöyle çağırırdım:

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

Kodunuzu yapıştırdım ve işlevimi değiştirdim

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

Şimdi derleme hatası

'CalculateAllPendingOrders' - wrong parameters count
 
ilyav :

Şimdi başka bir sorun

Fonksiyonumu şöyle çağırırdım:

Kodunuzu yapıştırdım ve işlevimi değiştirdim

Şimdi derleme hatası

FİYATI , bekleyen siparişlerin yakınında aranacağı fonksiyona iletmelisiniz.

Bu fiyata ek olarak, iki değişken aktarmanız gerekir:

 void CalculateAllPendingOrders( const double price , double & price_nearest_buy_stop , double & price_nearest_sell_stop )