"CopyTicks"in Test Edilmesi - sayfa 24

 
Alexey Kozitsyn :

Niye ya?

int    CopyTicks (
   string            symbol_name,           // имя символа
   MqlTick &         ticks_array[],         // массив для приёма тиков
   uint              flags = COPY_TICKS_ALL ,   // флаг, определяющий тип получаемых тиков
   ulong             from = 0 ,                 // дата, начиная с которой запрашиваются тики
   uint              count = 0                  // количество тиков, которые необходимо получить
   );
Kalın olarak vurgulanmıştır. Sona dizi - varsayılan değerlerin reddi.
 
fxsaber :
int    CopyTicks (
   string            symbol_name,           // имя символа
   MqlTick &         ticks_array[],         // массив для приёма тиков
   uint              flags = COPY_TICKS_ALL ,   // флаг, определяющий тип получаемых тиков
   ulong             from = 0 ,                 // дата, начиная с которой запрашиваются тики
   uint              count = 0                  // количество тиков, которые необходимо получить
   );
Kalın olarak vurgulanmıştır.
Öne çıkmadı, ama muhtemelen yukarıda cevaplandı ...
 
fxsaber :
int    CopyTicks (
   string            symbol_name,           // имя символа
   MqlTick &         ticks_array[],         // массив для приёма тиков
   uint              flags = COPY_TICKS_ALL ,   // флаг, определяющий тип получаемых тиков
   ulong             from = 0 ,                 // дата, начиная с которой запрашиваются тики
   uint              count = 0                  // количество тиков, которые необходимо получить
   );
Kalın olarak vurgulanmıştır. Sona dizi - varsayılan değerlerin reddi.

Evet, önbellekteki kenelerin boyutu belgelerde açıkça belirtilebilir. Tam olarak önbelleğin tamamını almanız gerekiyorsa, belgelere bakın ve aşağıdaki gibi parametrelerle bir işlevle gerekli numarayı isteyin:

int CopyBuffer (
    int         gösterge_belirteç , // gösterge tutamacı
    int         buffer_num , // gösterge arabellek numarası
    int         start_pos , // nereden başlamalı
    int         say , // ne kadar kopyalanacak
    çift      tampon[]                // verilerin kopyalanacağı dizi
);

Sonuçta, neden yeni bir şey icat ettiğini zaten anladınız mı?

 
Alexey Kozitsyn :

Varsayılan ayarları kaydetmeye çalışmaktansa, tarihten bugüne yükleme yapmanın çok daha önemli olduğunu düşünüyorum.

Yani tarihten bugüne olacak. Sadece adında Copy olduğu için CopyTick'leri sözdiziminde Kopyalama işlevlerine sığdırmaya çalışmak kolaylık sağlamayacaktır. Kullanışlı ve haklı, bu, bunun gibi önişlemci şeyler yapabileceğiniz zamandır.

// Позволяет, как в 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 )
Ve CopyTicks için bu yapılamaz, çünkü iki farklı fiziksel akış (TİCARET ve BİLGİ) ve bir sentetik (TÜM) - bayrak vardır.
 
fxsaber :

Yani tarihten bugüne olacak. Sadece adında Copy olduğu için CopyTick'leri sözdiziminde Kopyalama işlevlerine sığdırmaya çalışmak kolaylık sağlamayacaktır. Bunun gibi önişlemci şeyler yapabilmeniz uygun ve haklıdır.

#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 )
Ve CopyTicks için bu yapılamaz, çünkü iki farklı fiziksel akış (TİCARET ve BİLGİ) ve bir sentetik (TÜM) - bayrak vardır.

Siz forumda görünmeden önce, elbette sizin sayenizde böyle bir yazıya rastlamadım, ancak bu türün birçok programcı ile rezonansa gireceğinden emin değilim.

 
fxsaber :

Demonuzda, gerçekten de öyle. BCS'de - hayır

Network 'xxx' : authorized on BCS-MetaTrader5 through Access Server # 2 (ping: 46.66 ms)


2016.10 . 18 15 : 12 : 32.949 Test14 (Si- 12.16 ,M1)    Time: 29089 msc for 1503 records
2016.10 . 18 15 : 12 : 32.822 Test14 (Si- 12.16 ,M1)    Time: 33207 msc for 1501 records
2016.10 . 18 15 : 12 : 32.639 Test14 (Si- 12.16 ,M1)    Time: 21389 msc for 1500 records
2016.10 . 18 15 : 12 : 31.959 Test14 (Si- 12.16 ,M1)    Time: 21926 msc for 1500 records

Ve Alpari gerçekten kötü

Network 'xxx' : authorized on Alpari-MT5 through mt5.nl. 3 (ping: 61.87 ms)

2016.10 . 18 15 : 14 : 47.159 Test14 (GBPUSD,M1)      Time: 31086 msc for 1836 records
2016.10 . 18 15 : 14 : 46.999 Test14 (GBPUSD,M1)      Time: 30698 msc for 1836 records
2016.10 . 18 15 : 14 : 46.779 Test14 (GBPUSD,M1)      Time: 46306 msc for 1836 records
2016.10 . 18 15 : 14 : 46.612 Test14 (GBPUSD,M1)      Time: 30440 msc for 1836 records
2016.10 . 18 15 : 14 : 46.532 Test14 (GBPUSD,M1)      Time: 36227 msc for 1836 records

Yukarıda Kopitiklerin rahatsızlığından bahsetti. Sunulan gösterge, CopyTix'i birkaç kez çağırması gerektiğinden yavaşlar. Ve tüm frenler onun yüzünden. Ve işte olay

Çözüm önerildi

Şimdi tarihler arası kene indirmek için ilk tarihten başlayarak UNKNOWN kaç tik talebinde bulunmanız gerekiyor. Ardından, bitiş tarihine ulaşılıp ulaşılmadığını görmek için her seferinde bakın. Ve her kopya talebinin çok pahalı olduğu göz önüne alındığında ve bu tür frenler elde edilir.

Gerçek açılıştan elde edilen veriler, yalnızca yeni keneler yükleniyor:

2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получено 4 тиков за 46 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получено 3 тиков за 20 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получено 3 тиков за 19 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.499 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получено 8 тиков за 107 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получено 5 тиков за 19 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получено 5 тиков за 19 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получено 5 тиков за 18 мкс (пинг = 62214 мкс)
2016.10 . 20 18 : 47 : 06.540 GetTickHistory: Получены все доступные тики. Время [ 0 ]: 2016.10 . 20 16 : 47
COPY_TICKS_TRADE!
 
CopyTicks() bir zaman uyumsuz işlev gibi görünüyor? Tiki genellikle henüz açılmamış mumlar için gelir...
 
Alexey Kozitsyn :
CopyTicks() bir zaman uyumsuz işlev gibi görünüyor?
Evet.
 
Test cihazında CopyTicks() ile işlerin nasıl gittiğini geliştiricilerden duymak istiyorum... Bununla ilgili bazı kötü şüphelerim var. Yine, COPY_TICKS_TRADE ile çalışmakla ilgileniyor!
 

Terminale işkence etti. Senaryo

void OnStart ()
{
   MqlTick Ticks[];
  
   Print ( CopyTicks ( _Symbol , Ticks));
   Print ( GetLastError ());
}

donuyor. Manuel silme günlükleri

2016.10 . 28 16 : 48 : 57.737 Test (GBPUSD,M1)         4401
2016.10 . 28 16 : 48 : 57.737 Test (GBPUSD,M1)        - 1

TF ve sembolün değişimi - benzer şekilde. Yeniden başlatmanın ardından çalıştı.