МQL5'te Aç,Düşük,Yüksek,Kapat parametreleri nasıl alınır? - sayfa 6

 
Artyom Trishkin :

SERIES_LASTBAR_DATE ile ilgili bazı sorunlar vardı. Burada uzun süre tartışıldı. Zaten düzeltilmiş olabilir.

Burada söylemeyeceğim, hiç kullanmadım ama holivarın neyle başladığı hakkında - iXXX() işlevleri - harika çalışıyor, yaklaşık 3 aydır aktif olarak kullanıyorum (MQL5'e nasıl başladım) - var hiçbir zaman herhangi bir hata veya .. fark etmedim - çok uygun ve her şey çalışıyor!

Not: yardımda yazdığı gibi çalışır:

Seçenekler

semboller

[içinde] Aracın sembolik adı. NULL , geçerli karakter anlamına gelir.

zaman aralığı

[Dönem içinde. ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir. 0 , mevcut grafiğin periyodu anlamına gelir.

 
Igor Makanu :

Her zaman sadece yazıp okumaya çalışmaz mısın? Size "Yeni Bar" hakkında bir makalenin tamamının bağlantısını verdim! Makaleler, forumda sürekli yazanlardan farklı yetkinliğe sahip kişiler tarafından kontrol edilir ;)

Not: Yazmayı bırakıp, örneğin bağlantımdaki bir makaleyi okumaya başlarsanız, başka bir yol bulabilirsiniz ( SERIES_LASTBAR_DATE ) iXXX () işlevlerini kullanmama - kullanmama dediler))) - hataları kim bildirir ve geliştiricilerin bir hack yayınladığı hatalar)))))

Bağlantı için teşekkürler. Çözümünüzü eleştirmedim, ancak yalnızca kendi içinde iXXX işlevlerinin kullanımına işaret eden ve CopyRates ile uğraşma noktasını değiştiren iTime çağrısına dikkat çektim. Yani, iXXX işlevini (iTime) kullanmamak için CopyRates kullanmak için iTime kullanarak yeni bir çubuk arayın.))) Bir kısır döngü.)))
 
// Для Тестера.
bool IsNewBar()
{
  static int PrevBars = 0;
  const int CurrBars = Bars;  

  const bool Res = (CurrBars != PrevBars);
  
  PrevBars = CurrBars;
  
  return(Res);
}
 
Roman :
Sayesinde.
 
fxsaber :
Teşekkür ederim.
 
Birçok MT4 Expert Advisor, kaynak kodu değiştirilmeden MT5'e dönüştürülmüştür. Açık [i] şeklinde konu ortaya konmuştur.
 
fxsaber :
Birçok MT4 Expert Advisor, kaynak kodu değiştirilmeden MT5'e dönüştürülmüştür. Açık [i] şeklinde konu ortaya konmuştur.

CopyXXX ve iXXX işlevleri arasındaki performansı hiç ölçtünüz mü? Bu soru çok ilginç.

Şimdiye kadar, iXXX işlevlerinin açıkça kullanışlı bir kullanımını görebiliyorum - MQL4 kodunu MQL5'e taşırken daha az yeniden çalışılması.

Diğer durumlarda (performans bilgisi olmadan) - seçim yalnızca belirli kullanıcıların tercihlerine dayanır.

 
fxsaber :
Açık [i] şeklinde konu ortaya konmuştur.

bu koda dikkat etmedi, kontrol edildi - çalışıyor!

Not: yarın, taze bir zihinle, [] almayı nasıl başardığınızı görmelisiniz - Birkaç kez denedim - başaramadım!

 // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
   class CLASS ##NAME                                                                                           \
  {                                                                                                           \
   public :                                                                                                     \
     static T Get( const string Symb, const int TimeFrame, const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
       return ((Copy ##FUNC((Symb == NULL ) ? _Symbol : Symb, _Period , iShift, 1 , tValue) > 0 ) ? tValue[ 0 ] : - 1 ); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos) const                                                                      \
    {                                                                                                         \
       return (CLASS ##NAME::Get(_Symbol, _Period , iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS ##NAME NAME;                                                                                           \
                                                                                                              \
  T i ##NAME(const string Symb, const int TimeFrame, const int iShift) \
  {                                                                                                           \
     return (CLASS ##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume, long )
DEFINE_TIMESERIE(Time,Time, datetime )
DEFINE_TIMESERIE(Open,Open, double )
DEFINE_TIMESERIE(High,High, double )
DEFINE_TIMESERIE(Low,Low, double )
DEFINE_TIMESERIE(Close,Close, double )
void OnStart ()
  {
   for ( int i= 0 ;i< 10 ;i++)
     {
       ResetLastError ();
       Print ( "Bar№ " ,i, " : " ,Time[i], " , O = " ,Open[i], " , H = " ,High[i], " , L = " ,Low[i], " , C = " ,Close[i]);
       int err= GetLastError ();
       if (err> 0 ) Print ( "Error № " ,err);
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

CopyXXX ve iXXX işlevleri arasındaki performansı hiç ölçtünüz mü? Bu soru çok ilginç.

Yapmadım. Barlarla nadiren uğraşırım. Hiçbir şey CopyXXX işlevlerinden daha hızlı olamaz. Yalnızca önbelleğe alınmışsa.

 
Artyom Trishkin :

CopyXXX ve iXXX işlevleri arasındaki performansı hiç ölçtünüz mü? Bu soru çok ilginç..


fxsaber :

Yapmadım. Barlarla nadiren uğraşırım. Hiçbir şey CopyXXX işlevlerinden daha hızlı olamaz. Yalnızca önbelleğe alınmışsa.

ölçülen:

 #define   test(M,S,EX)        { uint mss= GetTickCount (); int nn=( int ) pow ( 10 ,M); for ( int tst= 0 ;tst<nn&&! _StopFlag ;tst++){EX;} \
                                 printf ( "%s: loops=%i ms=%u" ,S,nn, GetTickCount ()-mss);}
//+------------------------------------------------------------------+
void OnStart ()
  {
   double buff[];
   test( 10 , "CopyClose" , CopyClose ( _Symbol , _Period , rand (), 1 ,buff));
   test( 10 , "iClose" , iClose ( NULL , 0 , rand ())); 
  }
//+------------------------------------------------------------------+

2019.07.30 00:44:29.156 tst_iXXX_Kopya (EURUSD,H1) CopyClose: döngüler=1410065408 ms=69407

2019.07.30 00:45:29.408 tst_iXXX_Kopya (EURUSD,H1) iClose : döngüler=1410065408 ms=60250