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

 
Vladimir Karputov :

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

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

Vazgeçtim Ekran görüntüsünde oklarla gösterdiğim o mevduatların fiyatını yazdıracak hazır bir danışmanınız var mı?

Ve bu işlevin neden herhangi bir FİYAT aktarmadan çalıştığını hiç anlamıyorum

 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 :

Vazgeçtiğim tek şey, ekran görüntüsünde oklarla gösterdiğim bu mevduatların fiyatını yazdıracak hazır bir danışmanınız var mı?

Sana hazır bir fonksiyon verdim. Ona geçmeniz gerekiyor:

  • Mevcut fiyat
  • en yakın Buy durağının fiyatını depolayacak bir değişken
  • en yakın Satış durağının fiyatının yazılacağı bir değişken

Ne net değil?

 
Temiz. Anlaşılan benim değil
 
ilyav :

Vazgeçtiğim tek şey, ekran görüntüsünde oklarla gösterdiğim bu mevduatların fiyatını yazdıracak hazır bir danışmanınız var mı?

Ve bu işlevin neden herhangi bir FİYAT aktarmadan çalıştığını hiç anlamıyorum

???

Bozuk kod gösteriyorsunuz - en azından derlenmiyor - çünkü açma ve kapama parantezleri arasında bir uyumsuzluk var. Ve ikincisi = bozuk mantık.

 
Vladimir Karputov :

Bozuk kod gösteriyorsunuz - en azından derlenmiyor - çünkü açma ve kapama parantezleri arasında bir uyumsuzluk var. Ve ikincisi = bozuk mantık.

Kodunuzu yeniden yazın

Ama bana fiyatından çok uzakta bekleyen emirler veriyor.

 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 :

Kodunuzu yeniden yazın

Ama bana fiyatından çok uzakta bekleyen emirler veriyor

Baskılar OrdersTotal döngüsünden sonra gelmelidir.

Ve fiyat1 nedir? Nasıl alıyorsunuz?
 

Ve bu sürümde, genellikle mevcut olan her şeyi yazdırır.

 //+------------------------------------------------------------------+
//| 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 :

Baskılar OrdersTotal döngüsünden sonra olmalıdır.

Ve fiyat1 nedir? Nasıl alıyorsunuz?
 //|  Выбран режим торговли 3 ? Тогда торгуем его    

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

        {

        price1=m_symbol. Bid ();

        TradeMode3();

Ve danışmanın başlığına yazdım

 double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

Ve burada her şey doğruysa, son versiyon

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

Her şey çalışıyor gibi. Hatalar varsa lütfen söyleyin. Çok teşekkürler.

 

Bu sorunun çözümü için yardım rica ediyorum.

Mevcut bir zaman çerçevem olduğunu varsayalım - M1, herhangi bir üst TF'nin belirli bir çubuğunun son N çubuğunun zamanını bilmem gerekiyor, saat 60 dakika değil, 45 veya başka bir zaman olabilir ve ayrıca orada hafta sonları, ancak mevcut TF'nin son çubuğunun herhangi bir TF tarihinden öğrenmem gerekiyor.

Nasıl uygulanır?

 
ilyav :

Ve danışmanın başlığına yazdım

Ve burada her şey doğruysa, son versiyon

Her şey çalışıyor gibi. Hatalar varsa lütfen söyleyin. Çok teşekkürler.

satırdan önce

price1=m_symbol. Bid ();

alıntıların güncellenmesi gerekiyor:

 if (! RefreshRates ())
   return ;
Neden: