Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 55

 
Alexey Navoykov :

Ayrıca, tüm yöntemler temel sınıfta yazıldığında ve yalnızca devralınan sınıfta Get'i gösterdiğinizde, korumalı kalıtımın olması daha uygun olacaktır. Ve gerektiğinde üsse getiriyorsunuz .

korumalı-kalıtım kullanıldı, ancak seçili olarak durduruldu. Teşekkür ederim!

Ancak Metaeditor, mevcut olmasa bile tüm bu yöntemlerin listede yer alması hatasını henüz düzeltmedi.

Şimdi kontrol etmedim, ama denediğimde, düşmedikleri hafızamda kaldı.

 

Bir siparişi değiştirmeden veya silmeden önce kontrol etmeniz gerekir.

 OrderGetInteger ( ORDER_STATE ) == ORDER_STATE_PLACED 

Bu SB'de değil, bu yüzden kendiniz reçete edin.


PS Test Cihazında bu kontrol anlamsızdır - tüm mevcut siparişler her zaman bu duruma sahiptir.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Pazar kapalı

fxsaber , 2017.09.22 09:45

 // Время последнего тика символа
long GetSymbolTime( const string Symb )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick (Symb, Tick) ? Tick.time_msc : 0 );
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
   long Res = 0 ;
  
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const long TmpTime = GetSymbolTime( SymbolName (i, true ));
    
     if (TmpTime > Res)
      Res = TmpTime;
  }
  
   return (Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
   static ulong StartTime = GetMicrosecondCount ();
   static long PrevTime = 0 ;
  
   const long TmpTime = GetMarketWatchTime();
  
   if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount ();
  }
  
   return (PrevTime + ( long )(( GetMicrosecondCount () - StartTime) / 1000 ));
}

void OnInit ()
{
   MarketBookAdd ( _Symbol );
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol );
}

string TimeToString ( const long Value )
{
   return (( string )( datetime )(Value / 1000 ) + "." + ( string ) IntegerToString (Value % 1000 , 3 , '0' ));
}

void OnBookEvent ( const string & )
{
   Comment ( TimeToString (GetCurrenTime()));
}
 

POSITION_TIME_UPDATE sadece pozisyon lotunun değiştirilmesiyle ilgilidir. Örneğin, herhangi bir hesap türündeki bir pozisyonun kısmen kapatılması veya netleştirmeye eklenmesi.

SL/TP seviyelerindeki değişiklikler POSITION_TIME_UPDATE'i etkilemez.

Başka bir deyişle, POSITION_TIME_UPDATE, yalnızca İşlem Geçmişi - fırsatlara yansıtılan değişikliklerden etkilenir. SL / TP seviyeleri bu tür değişikliklerle ilgili değildir, bu nedenle etkilemezler.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Uzman Danışman yeniden başlatma

fxsaber , 2017.09.26 11:35

 // Перезапуск себя
bool ExpertReopen()
{
   return ( ChartSaveTemplate ( 0 , __FILE__ ) && ChartApplyTemplate ( 0 , __FILE__ ));
}
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2017.09.08 11:11

 struct A
{
   int i;
};

struct B : public A {};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = (B)a; // cannot cast 'A' to 'B'
  
  b = a;     // так без проблем
}
SD'den

her şey tam burada

İlk durumda bu bir rol, ikinci durumda bir atamadır.

Ebeveynden çocuğa yayın yapılmasına izin verilmez

Bir nesneye atama, uygun kopyalama operatörüne yapılan bir çağrıdır, bu durumda örtük A::operator=(const A &)

Teşekkürler, bu, ebeveynin kopyalama işlecinin yalnızca genel miras durumunda dışarıda kullanılabilir durumda kalacağı anlamına gelir. Kontrol ettim, öyle

 struct A
{
   int i;
};

struct B : protected A {};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = a;     // 'A::operator=' - cannot access protected member function
}

İyi mi?

Bu yapı ile, ek bir kopya kurucu B::operator=(const A&) bildirmeniz ve içindeki A::operator= çağrısını "iletmeniz" gerekir.

 

Özel veriler üzerinde standart göstergeleri hesaplamak için uygulama seçenekleri (ek göstergeler oluşturmadan).

Базовые индикаторы, применяемые к кастомному инструменту
Базовые индикаторы, применяемые к кастомному инструменту
  • 2017.09.27
  • www.mql5.com
Здравствуйте. Задавал этот вопрос на английском форуме...
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Pazar kapalı

fxsaber , 2017.09.22 09:45

 // Время последнего тика символа
long GetSymbolTime( const string Symb )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick (Symb, Tick) ? Tick.time_msc : 0 );
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
   long Res = 0 ;
  
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const long TmpTime = GetSymbolTime( SymbolName (i, true ));
    
     if (TmpTime > Res)
      Res = TmpTime;
  }
  
   return (Res);
}

Özel sembolleri döngüden atmak gerekir, çünkü Market Watch'ta 3000 yıl bile herhangi bir zamanda ayarlanabilirler.

 
MQL5'te bu şekilde yazmak oldukça kabul edilebilir.
 void OnTick ()
{  
   double Buffer[];
  
   CopyBuffer ( iMA ( NULL , PERIOD_CURRENT , 1 , 0 , MODE_SMA , PRICE_CLOSE ) , 0 , 0 , 1 , Buffer);
}

Onlar. Her onay işareti için bir tutamaç "oluşturun". Yeni gösterge varlıkları oluşturulmayacak, yalnızca iMA giriş parametrelerinin önceki işaretlerde başlatılan göstergelerle karşılaştırılmasıyla zaman kaybedilecek. Onlar. MT4'te yapılanla tamamen aynı.

 
fxsaber :
MQL5'te bu şekilde yazmak oldukça kabul edilebilir.

Onlar. Her onay işareti için bir tutamaç "oluşturun". Yeni gösterge varlıkları oluşturulmayacak, yalnızca iMA giriş parametrelerinin önceki işaretlerde başlatılan göstergelerle karşılaştırılmasıyla zaman kaybedilecek. Onlar. MT4'te yapılanla tamamen aynı.

Performans ölçüldü mü? İşleri ne kadar yavaşlatacağı merak konusu. Özellikle özel göstergeler durumunda.