Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 8

 
  1. Göstergenin iCustom kullanılarak bir EA aracılığıyla ilk çağrısı, göstergenin OnInit ve OnCalculate'ini tetikler
  2. Bir sonraki iCustom çağrısına kadar gösterge, OnCalculate'i çağırmaz.
  3. Expert Advisor'dan çıkmak, göstergenin OnDeinit'inin yürütülmesine neden olur.
iCustom göstergeleri tamamlanmadı. Ve MQL4 araçlarını kullanarak manuel olarak başlatılan göstergelerden gösterge arabelleklerinin değerlerini almak mümkün olmayacaktır.
 
fxsaber :
iCustom göstergeleri tamamlanmadı.

aşağılık nedir? Olaylar işlenmedi mi?

 
Andrey Khatimlianskii :

aşağılık nedir? Olaylar işlenmedi mi?

Evet.

 
#property strict

#define HOUR 3600
#define DAY ( 24 * HOUR)
#define WEEK 7

datetime GetBarTime( const datetime time, const bool NextBar = false , string Symb = NULL , const ENUM_TIMEFRAMES TimeFrame = PERIOD_M1 )
{
   if (Symb == NULL )
    Symb = _Symbol ;
    
   return ( iTime (Symb, TimeFrame, iBarShift (Symb, TimeFrame, time) - (NextBar ? 1 : 0 )));
}

datetime GetTimeDayOfWeek( const int Shift = 0 , const ENUM_DAY_OF_WEEK Day = SUNDAY )
{
   const datetime Res = TimeCurrent () / DAY * DAY;
  
   return (Res - (((WEEK + ( TimeDayOfWeek (Res) - Day )) % WEEK) + Shift * WEEK) * DAY);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmtoffset
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
int TimeServerGMTOffset( void )
{
   const datetime Sunday = GetTimeDayOfWeek();
  
   return ((( int ) MathRound (( double ) MathMin (Sunday - DAY - GetBarTime(Sunday), Sunday + DAY - GetBarTime(Sunday, true )) / HOUR) - 3 ) * HOUR);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmt
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
datetime TimeServerGMT( void )
{
   return ( TimeCurrent () + TimeServerGMTOffset());
}


Başvuru

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnStart ()
{  
  PRINT( TimeGMT ());
  PRINT(TimeServerGMT());  
}


Yaklaşım iyidir, çünkü yalnızca hafta sonları, Test Cihazında ve gerçek zamanlı olarak değil, aynı zamanda üçüncü taraf verilerinde de çalışır. Onlar. MT'den alınmayan tekliflerin GMT'si ile belirlenir.

 
fxsaber :

Ama sembol için TimeCurrent () yerine son tik işaretinin zamanını alırsak, hesaplama ihlal edilmeyecek mi?

 
Vitaly Muzichenko :

Fakat sembol için TimeCurrent () yerine son tik işaretinin zamanını alırsak, hesaplama ihlal edilmeyecek mi?

kırılmayacak. TimeCurrent algoritması çok dolaylı olarak etkilenir. Bar zamanı vb. alabilirsin.

Pazar gününün (barların tarihinde) son tarihini hesaplamak için herhangi bir yöntemi kullanmanız yeterlidir - böylece Pazar'dan önce ve sonra barlar olur. Yani bunun için en azından TimeLocal alabilirsin.

 
Böyle kod yazmanıza izin veren bir dili sevmemek elde değil.
 double Lots[] = { 0 , 0 , 0 , 0 , 0 , 0 };

for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
   if ( OrderSelect (i, SELECT_BY_POS ))
    Lots[ OrderType ()] += OrderLots ();

Eminim geliştiriciler dili yazarken böyle şeyler düşünmemişlerdir. MQL4'te bu kadar çok kullanışlı şeyin nasıl olduğu bir sır.

 
fxsaber :
Böyle kod yazmanıza izin veren bir dili sevmemek elde değil.

Eminim geliştiriciler dili yazarken böyle şeyler düşünmemişlerdir. MQL4'te bu kadar çok kullanışlı şeyin nasıl olduğu bir sır.

Bilmece yok. Bunu uzun yıllardır kullanıyorum ve mql5'te de yalnızca pozisyonun türünü ve sırasını int olarak açıkça belirtmeniz gerekiyor.

Ben sadece böyle bir dizi ilan ediyorum

 double Lots[ 6 ] = { 0 .0};
Biletleri bir dizide de saklayabilirsiniz.
 
Alexey Viktorov :

Bilmece yok. Bunu uzun yıllardır kullanıyorum ve mql5'te de sadece açıkça int türüne geçmeniz gerekiyor

Yani orada anlam tamamen farklı olacak.

Neden: