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

 
Vladimir Pastushak :
Hesap türünü programlı olarak nasıl anlayabilirim? Çit mi, ağ mı?
   if (m_account.MarginMode()!= ACCOUNT_MARGIN_MODE_RETAIL_HEDGING )
     {
       Alert ( "Only Hedging!" );
       return ( INIT_FAILED );
     }
 

ya da bunun gibi

HesapBilgi Örneği

   m_label_info[ 3 ].Description(m_account.MarginModeDescription());

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\\\\

 //+------------------------------------------------------------------+
//|                                        MarginModeDescription.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#include <Trade\AccountInfo.mqh>
CAccountInfo      m_account;     // account info wrapper
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   string Pr= m_account.MarginModeDescription();
   Alert (Pr);
  }
//+------------------------------------------------------------------+
 
Verilen parametrelerle bir sanal gecikmeler ızgarası koyan veya verilen alımla belirlediğim yönde emirleri (sırasıyla) açan bir danışman (komut dosyası) bulmama yardım et.
 

Lütfen bana hatanın nerede olduğunu söyleyin:

      for ( int s= OrdersTotal ()- 1 ; s>= 0 ; s--)          
         {
           if (o_orderInfo.SelectByIndex(s)) 
           if (o_orderInfo.OrderType()== ORDER_TYPE_SELL_STOP )
             {                 
               count_sell_stop++;
             }
         }  

       for ( int s1= PositionsTotal ()- 1 ; s1>= 0 ; s1--)          
         {
           if (o_orderInfo.SelectByIndex(s1)) 
           if (o_orderInfo.OrderType()== ORDER_TYPE_SELL )
             {                 
               count_sell++;
             }
         }  
         
       if (count_sell == 0 && count_sell_stop == 0 )
         {
            sellstop_req3.action       = TRADE_ACTION_PENDING ;
            sellstop_req3.symbol       = _Symbol ;
            sellstop_req3.volume       = NormalizeDouble (lot_v, 2 );
            sellstop_req3.price        = SymbolInfoDouble (sellstop_req3.symbol, SYMBOL_ASK ) - 100 * _Point ;
            sellstop_req3.sl           = sellstop_req3.price + 110 * _Point ;
            sellstop_req3.type         = ORDER_TYPE_SELL_STOP ;
            sellstop_req3.type_filling = ORDER_FILLING_RETURN ;
            sellstop_req3.expiration   = ORDER_TIME_GTC ;
            
             OrderSend (sellstop_req3, sellstop_res3);
         }
SELL_STOP - emirler sayılır, ancak hiçbir şekilde SATIŞ istenmez.Algoritmaya göre - eğer yoksa SELL_STOP emri verilir ve bunlardan en az biri varsa emir verilmez.
 
Fergert Фергерт :

Lütfen bana hatanın nerede olduğunu söyleyin:

SELL_STOP - emirler sayılır, ancak hiçbir şekilde SATIŞ istenmez.Algoritmaya göre - eğer yoksa SELL_STOP emri verilir ve bunlardan en az biri varsa emir verilmez.

BEKLEMEDEKİ SİPARİŞ ve POZİSYON'u karıştırmayın.

 //+------------------------------------------------------------------+
//|                                                     Script 1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CPositionInfo  m_position ;                   // object of CPositionInfo class
COrderInfo     m_order ;                       // object of COrderInfo class
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   int count_buys          = 0.0 ;
   int count_sells         = 0.0 ;
   int count_buy_limits    = 0.0 ;
   int count_sell_limits   = 0.0 ;
   int count_buy_stops     = 0.0 ;
   int count_sell_stops    = 0.0 ;
//---
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
       if ( m_position .SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         if ( m_position .PositionType()== POSITION_TYPE_BUY )
            count_buys++;
         else
             if ( m_position .PositionType()== POSITION_TYPE_SELL )
               count_sells++;
        }
//---
   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 .OrderType()== ORDER_TYPE_BUY_LIMIT )
            count_buy_limits++;
         else
             if ( m_order .OrderType()== ORDER_TYPE_SELL_LIMIT )
               count_sell_limits++;
             else
               if ( m_order .OrderType()== ORDER_TYPE_BUY_STOP )
                  count_buy_stops++;
               else
                   if ( m_order .OrderType()== ORDER_TYPE_SELL_STOP )
                     count_sell_stops++;
        }
//--- you code
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Dosyalar:
Script_1.mq5  5 kb
 
Vladimir Karputov :

BEKLEMEDEKİ SİPARİŞ ve POZİSYON'u karıştırmayın.

TEŞEKKÜRLER)) anladım...
 
onCalculate işlevinin ikinci sürümünde start parametresinin neden sorumlu olduğunu anlamıyorum.
onCalculate işlevi her çağrıldığında, 0'a eşittir.
Start değerinin çıktısını print fonksiyonu ile yaptım.
Kılavuz, başlamanın "anlamlı verilerin başladığı yer" olduğunu söylüyor. Bu bana hiçbir şey söylemiyor.
 
MisterRight :
onCalculate işlevinin ikinci sürümünde start parametresinin neden sorumlu olduğunu anlamıyorum.
onCalculate işlevi her çağrıldığında, 0'a eşittir.
Start değerinin çıktısını print fonksiyonu ile yaptım.
Kılavuz, başlamanın "anlamlı verilerin başladığı yer" olduğunu söylüyor. Bu bana hiçbir şey söylemiyor.

Örnekteki açık gösterge kodlarına bakın.

 
Mikhail Mishanin :

Örnekteki açık gösterge kodlarına bakın.

İzledim. Her zaman başla = 0.

Burada, AMA göstergesinden bir kod parçası çıkardım.

if(başla!=0)

PlotIndexSetInteger (0,PLOT_DRAW_BEGIN,ExtPeriodAMA+başlangıç);


Ve eğer koşul başlıyorsa!=0 hiçbir zaman doğru olmayacaksa, bu kod bana ne söylemeli?

 
Geçmişte kapatılan siparişleri saymak için ne kullanacağımı söyle. Bu şekilde denedim:

 HistorySelect ( 0 , TimeCurrent ());

Alert ( "Количество ордеров в истории:  " , HistoryOrdersTotal ());
Sonunda, kapalı emirlerden çok daha fazla saçmalık veriyor.