CopyTicksRange(), MQL5.a'da düzgün çalışmıyor - sayfa 3

 
fxsaber # :

birimler.

Muhtemelen öyledir, ancak bu hala temel bir işlevdir ve terminalin kendisi bunu kullanıyorsa, en azından verileri dışa aktarmak için bu, terminale olan güveni de sarsar.

 

Ekli dosyada vaat edilen hata örnekleri. Şaşırtıcı bir şekilde, Err_SymbolInfoTick2() bir süre doğru çalıştı, ancak daha sonra sıfır tarih de verdi. Kodda açıklayıcı yorumlar var.

dergi:

 2021.09 . 19 06 : 01 : 24.674 ErrorCopyTicks (CustomBR,H1)    ---------Err_CopyTicksRange()------------
2021.09 . 19 06 : 01 : 24.754 ErrorCopyTicks (CustomBR,H1)     CopyTicksRange ('@BR',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 2021.01 . 31 23 : 59 : 00 : 000 );  received 109425 ticks
2021.09 . 19 06 : 01 : 24.754 ErrorCopyTicks (CustomBR,H1)     2021.01 . 29 00 : 02 : 14 : 782 - first tick, 2021.01 . 29 23 : 56 : 43 : 863 - last tick
2021.09 . 19 06 : 01 : 24.754 ErrorCopyTicks (CustomBR,H1)    ---------------------
2021.09 . 19 06 : 01 : 24.754 ErrorCopyTicks (CustomBR,H1)    ---------Err_CopyTicks()------------
2021.09 . 19 06 : 01 : 24.767 ErrorCopyTicks (CustomBR,H1)     CopyTicks ('@BR',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 100 );  received 100 ticks
2021.09 . 19 06 : 01 : 24.767 ErrorCopyTicks (CustomBR,H1)     2021.01 . 29 00 : 02 : 14 : 782 - first tick, 2021.01 . 29 10 : 00 : 12 : 292 - last tick
2021.09 . 19 06 : 01 : 24.767 ErrorCopyTicks (CustomBR,H1)    ---------------------
2021.09 . 19 06 : 01 : 24.767 ErrorCopyTicks (CustomBR,H1)    ---------Err_CopyTicks()------------
2021.09 . 19 06 : 01 : 24.906 ErrorCopyTicks (CustomBR,H1)     CopyTicks ('@BR',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 1000000 );  received 1000000 ticks
2021.09 . 19 06 : 01 : 24.906 ErrorCopyTicks (CustomBR,H1)     2021.01 . 29 00 : 02 : 14 : 782 - first tick, 2021.02 . 08 14 : 17 : 58 : 484 - last tick
2021.09 . 19 06 : 01 : 24.906 ErrorCopyTicks (CustomBR,H1)    ---------------------
2021.09 . 19 06 : 01 : 24.906 ErrorCopyTicks (CustomBR,H1)    ---------Err_SymbolInfoTick1('CustomBR')------------
2021.09 . 19 06 : 01 : 24.969 ErrorCopyTicks (CustomBR,H1)     CopyTicksRange ('CustomBR',Ticks, COPY_TICKS_ALL , 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 );  received 189530 ticks
2021.09 . 19 06 : 01 : 24.969 ErrorCopyTicks (CustomBR,H1)     2021.09 . 17 00 : 02 : 12 : 052 - first tick, 2021.09 . 17 19 : 59 : 59 : 782 - last tick
2021.09 . 19 06 : 01 : 25.029 ErrorCopyTicks (CustomBR,H1)     CustomTicksReplace ('CustomBR', 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 , Ticks, 189530   );  replaced 189530 ticks
2021.09 . 19 06 : 01 : 25.029 ErrorCopyTicks (CustomBR,H1)    ret= 1 , mt.time_msc= 1970.01 . 01 00 : 00 : 00 : 000
2021.09 . 19 06 : 01 : 25.029 ErrorCopyTicks (CustomBR,H1)    ---------------------
2021.09 . 19 06 : 01 : 25.029 ErrorCopyTicks (CustomBR,H1)    ---------Err_SymbolInfoTick2('CustomBR')------------
2021.09 . 19 06 : 01 : 25.091 ErrorCopyTicks (CustomBR,H1)     CopyTicksRange ('CustomBR',Ticks, COPY_TICKS_ALL , 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 );  received 189530 ticks
2021.09 . 19 06 : 01 : 25.091 ErrorCopyTicks (CustomBR,H1)     2021.09 . 17 00 : 02 : 12 : 052 - first tick, 2021.09 . 17 19 : 59 : 59 : 782 - last tick
2021.09 . 19 06 : 01 : 25.153 ErrorCopyTicks (CustomBR,H1)     CustomTicksAdd ('CustomBR',Ticks, 189530   );  added 189530 ticks
2021.09 . 19 06 : 01 : 25.153 ErrorCopyTicks (CustomBR,H1)    ret= 1 , mt.time_msc= 1970.01 . 01 00 : 00 : 00 : 000
2021.09 . 19 06 : 01 : 25.153 ErrorCopyTicks (CustomBR,H1)    ---------------------


Atıştırmalık eğlence: Terminali kullanarak tik izlerseniz, kaydedilenden daha fazla tik alabilirsiniz. (resmi görmek). Ve "önceki" tarih 2021.09.18'e düşürülürse, daha azı kaydedilecektir.

Dosyalar:
untitled.jpg  605 kb
 
evet, statik dizi veya dinamik bir rol oynamaz
 
RusPro # :

Vaat edilen hata örnekleri

Ne yazık ki, çoğaltmak için bu karakterlere erişim yok.

 
fxsaber # :

Ne yazık ki, çoğaltmak için bu karakterlere erişim yok.

bu MICEX'tir. Tamam, forex'te bulmaya çalışacağım

 
RusPro # :

bu MICEX'tir. Tamam, forex'te bulmaya çalışacağım

1. MICEX'te böyle bir "@BR" sembolü yoktur

Görünüşe göre özel bir karakter kullanıyorsun.

Ve oluştururken bir hata olabilir.

Orijinal MICEX sembollerinde CopyTicks ve CopyTicksRange işlevlerini çok kullanıyorum - herhangi bir hata fark etmedim.

2. Onay geçmişinin tamamı terminalde saklanmaz ve işleve yapılan ilk çağrı, istenen tüm süre boyunca onayları döndürmeyebilir.

Katma

İşte CopyTicksRange işlevini kullanarak kene yüklediğim bir gösterge örneği

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2021 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021 prostotrader"
#property link        " https://www.mql5.com "
#property version    "1.00"
#property indicator_separate_window
#property indicator_plots    1
#property indicator_buffers 1

enum IND_STAGE
{
  LOAD_TICKS = 0 ,
  READ_TICKS = 1 ,
  FILL_DATA = 2
};
struct T_DATA
{
   datetime bar_time;
   int ticks_cnt;
   MqlTick pr_bar_ticks[];
};
struct MARKET_DATA
{
   int time_cnt;
   int cnt;
  IND_STAGE stage;
  T_DATA t_data[];
   MqlTick ticks[];
   int live_cnt;
   int a_cnt;
   datetime time_array[];
};
MARKET_DATA m_data;
datetime start_time, end_time;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   end_time = datetime ( SymbolInfoInteger ( Symbol (), SYMBOL_EXPIRATION_TIME ));
   m_data.stage = LOAD_TICKS;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator Load ticks function                             |
//+------------------------------------------------------------------+
bool LoadTicks( const datetime &a_times[])
{
   int bars = Bars ( Symbol (), PERIOD_M1 );
   datetime cur_time = TimeTradeServer ();
   if (cur_time > end_time)
  {
    cur_time = end_time;
  }
   int result = CopyTime ( Symbol (), PERIOD_M1 , 0 , bars, m_data.time_array);
   if (result > 0 )
  {
    start_time = m_data.time_array[ 0 ];
     if (m_data.time_array[result - 1 ] == a_times[ ArraySize (a_times) - 1 ])
    {
      m_data.time_cnt = result;
      result = CopyTicksRange ( Symbol (), m_data.ticks, COPY_TICKS_INFO , ulong (start_time) * 1000 , ulong (cur_time) * 1000 );
       if (result > 0 )
      {
         if (m_data.ticks[result- 1 ].time >= m_data.time_array[m_data.time_cnt - 1 ]) 
        {
          m_data.cnt = result;
           return ( true ); 
        } else Print ( __FUNCTION__ , ": Не хватает тиков " , Symbol (), "!" ); 
      } else Print ( __FUNCTION__ , ": Не получены тики по символу " , Symbol (), "!" );
    } else Print ( __FUNCTION__ , ": Не хватает баров по символу " , Symbol (), "!" );
  } else Print ( __FUNCTION__ , ": Не скопировано время баров по символу " , Symbol (), "!" );
   return ( false );
}  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,  
                 const int prev_calculated, 
                 const datetime & time[], 
                 const double & open[], 
                 const double & high[], 
                 const double & low[], 
                 const double & close[], 
                 const long & tick_volume[], 
                 const long & volume[],
                 const int & spread[] )
  {
   switch (m_data.stage)
  {
     case LOAD_TICKS:
       if (LoadTicks(time) == true )
      {
         Print ( "All ticks loaded." );
        m_data.stage = READ_TICKS;
         return (rates_total);
      }
       return ( 0 );
     break ;
     case READ_TICKS:
     break ;
  }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
Ve her şey iyi yüklenir, ancak her zaman ilk seferde değil.
 
prostotrader # :

1. MICEX'te böyle bir "@BR" sembolü yoktur

İşte CopyTicksRange işlevini kullanarak keneler yüklediğim bir gösterge örneği

Ve her şey iyi yüklenir, ancak her zaman ilk seferde değil.

Bu, petrol vadeli işlemlerinin yapıştırılmasıdır. Komisyoncu BCS. Farklı brokerlar tarafından farklı çağrılabilir. Ancak tam olarak aynı sorunlar diğer sembollerde de olacaktır.

 
prostotrader # :

Örneğinizde, çağrı koşulları farklı olduğu için çalışır - başlangıç zamanı her zaman mevcut çubuğun başlangıcına eşittir (yani kesinlikle onay işaretleri vardır) ve son çubuğun tüm onay geçmişini bir kerede okursunuz.

Bu arada, koltuk değneklerimden biri tıpkı seninki gibi çalışıyor. Ayrıca önce mevcut çubukların zamanını alıyorum ve sonra onları maksimum sürekli bölümlere ayırıyorum ve onay işaretleri alıyorum. Ancak başka bir sorun ortaya çıkar - eğer veri için yeterli alıcı dizisi yoksa, o zaman gerisini sürdürmek teflerle dans etmektir (yukarıda tartışılmıştır).

Ve dinamik dizilerle çalışmak çok daha yavaştır ve olası bellek parçalanmasını hesaba katmanız gerekir.

 
prostotrader # :

2. Onay geçmişinin tamamı terminalde saklanmaz ve işleve yapılan ilk çağrı, istenen tüm süre boyunca onayları döndürmeyebilir.

Dönemin tamamının dönemeyeceği sorun yoktur, sorun istenen dönem yerine başka bir dönemin geri gelmesidir. Veya daha da kötüsü, hem talep edilen hem de aralığa dahil olmayan diğer onay işaretlerinin eklenmesi döndürülürse


Örneğimde, sembolü "SILV-12.21" ile değiştirdim, aynı hatayı aldım ve merak edilen ne, SymbolInfoTick son testte doğru cevabı verdi :) Ne zaman yalan söylediğini ve ne zaman olmadığını nasıl tahmin edebilirim?


2021.09.19 15:27:55.089	ErrorCopyTicks (CustomBR,H1)	---------Err_CopyTicksRange()------------
2021.09.19 15:27:55.090	ErrorCopyTicks (CustomBR,H1)	CopyTicksRange('SILV-12.21',Ticks,COPY_TICKS_ALL, 2021.01.29 23:57:00:000, 2021.01.31 23:59:00:000 );  received 1758 ticks
2021.09.19 15:27:55.090	ErrorCopyTicks (CustomBR,H1)	2021.01.29 00:02:14:782 - first tick, 2021.01.29 23:49:01:540 - last tick
2021.09.19 15:27:55.090	ErrorCopyTicks (CustomBR,H1)	---------------------
2021.09.19 15:27:55.090	ErrorCopyTicks (CustomBR,H1)	---------Err_CopyTicks()------------
2021.09.19 15:27:55.091	ErrorCopyTicks (CustomBR,H1)	CopyTicks('SILV-12.21',Ticks,COPY_TICKS_ALL, 2021.01.29 23:57:00:000, 100 );  received 100 ticks
2021.09.19 15:27:55.091	ErrorCopyTicks (CustomBR,H1)	2021.01.29 00:02:14:782 - first tick, 2021.01.29 11:02:44:891 - last tick
2021.09.19 15:27:55.091	ErrorCopyTicks (CustomBR,H1)	---------------------
2021.09.19 15:27:55.091	ErrorCopyTicks (CustomBR,H1)	---------Err_CopyTicks()------------
2021.09.19 15:27:55.170	ErrorCopyTicks (CustomBR,H1)	CopyTicks('SILV-12.21',Ticks,COPY_TICKS_ALL, 2021.01.29 23:57:00:000, 1000000 );  received 763140 ticks
2021.09.19 15:27:55.170	ErrorCopyTicks (CustomBR,H1)	2021.01.29 00:02:14:782 - first tick, 2021.09.17 23:58:41:031 - last tick
2021.09.19 15:27:55.170	ErrorCopyTicks (CustomBR,H1)	---------------------
2021.09.19 15:27:55.170	ErrorCopyTicks (CustomBR,H1)	---------Err_SymbolInfoTick1('CustomBR')------------
2021.09.19 15:27:55.178	ErrorCopyTicks (CustomBR,H1)	CopyTicksRange('SILV-12.21',Ticks,COPY_TICKS_ALL, 2021.09.17 00:00:00:000, 2021.09.17 20:00:00:000 );  received 42793 ticks
2021.09.19 15:27:55.178	ErrorCopyTicks (CustomBR,H1)	2021.09.17 00:03:04:576 - first tick, 2021.09.17 19:59:32:398 - last tick
2021.09.19 15:27:55.190	ErrorCopyTicks (CustomBR,H1)	CustomTicksReplace('CustomBR',2021.09.17 00:00:00:000, 2021.09.17 20:00:00:000, Ticks, 42793  );  replaced 42793 ticks
2021.09.19 15:27:55.190	ErrorCopyTicks (CustomBR,H1)	ret=1, mt.time_msc=1970.01.01 00:00:00:000
2021.09.19 15:27:55.190	ErrorCopyTicks (CustomBR,H1)	---------------------
2021.09.19 15:27:55.190	ErrorCopyTicks (CustomBR,H1)	---------Err_SymbolInfoTick2('CustomBR')------------
2021.09.19 15:27:55.196	ErrorCopyTicks (CustomBR,H1)	CopyTicksRange('SILV-12.21',Ticks,COPY_TICKS_ALL, 2021.09.17 00:00:00:000, 2021.09.17 20:00:00:000 );  received 42793 ticks
2021.09.19 15:27:55.196	ErrorCopyTicks (CustomBR,H1)	2021.09.17 00:03:04:576 - first tick, 2021.09.17 19:59:32:398 - last tick
2021.09.19 15:27:55.210	ErrorCopyTicks (CustomBR,H1)	CustomTicksAdd('CustomBR',Ticks, 42793  );  added 42793 ticks
2021.09.19 15:27:55.210	ErrorCopyTicks (CustomBR,H1)	ret=1, mt.time_msc=2021.09.17 19:59:32:398
2021.09.19 15:27:55.210	ErrorCopyTicks (CustomBR,H1)	--------------------- 

 
fxsaber # :

К сожалению, нет доступа к этим символам, чтобы воспроизвести.


Forex'te aynı hatalar. Broker Alpari, test hesabı. EURUSD sembolü


Özel sembol EURUSD'ye dayanmaktadır, sadece adı da bıraktı


 2021.09 . 19 15 : 36 : 52.417 tester (EURUSD,H1)      ---------Err_CopyTicksRange()------------
2021.09 . 19 15 : 36 : 52.432 tester (EURUSD,H1)       CopyTicksRange ('EURUSD',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 2021.01 . 31 23 : 59 : 00 : 000 );  received 102934 ticks
2021.09 . 19 15 : 36 : 52.432 tester (EURUSD,H1)       2021.01 . 29 00 : 00 : 00 : 139 - first tick, 2021.01 . 29 23 : 54 : 59 : 930 - last tick
2021.09 . 19 15 : 36 : 52.432 tester (EURUSD,H1)      ---------------------
2021.09 . 19 15 : 36 : 52.432 tester (EURUSD,H1)      ---------Err_CopyTicks()------------
2021.09 . 19 15 : 36 : 52.445 tester (EURUSD,H1)       CopyTicks ('EURUSD',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 100 );  received 100 ticks
2021.09 . 19 15 : 36 : 52.445 tester (EURUSD,H1)       2021.01 . 29 00 : 00 : 00 : 139 - first tick, 2021.01 . 29 00 : 12 : 52 : 513 - last tick
2021.09 . 19 15 : 36 : 52.445 tester (EURUSD,H1)      ---------------------
2021.09 . 19 15 : 36 : 52.445 tester (EURUSD,H1)      ---------Err_CopyTicks()------------
2021.09 . 19 15 : 36 : 52.577 tester (EURUSD,H1)       CopyTicks ('EURUSD',Ticks, COPY_TICKS_ALL , 2021.01 . 29 23 : 57 : 00 : 000 , 1000000 );  received 1000000 ticks
2021.09 . 19 15 : 36 : 52.577 tester (EURUSD,H1)       2021.01 . 29 00 : 00 : 00 : 139 - first tick, 2021.02 . 15 18 : 31 : 34 : 723 - last tick
2021.09 . 19 15 : 36 : 52.577 tester (EURUSD,H1)      ---------------------
2021.09 . 19 15 : 36 : 52.577 tester (EURUSD,H1)      ---------Err_SymbolInfoTick1('CustomBR')------------
2021.09 . 19 15 : 36 : 52.579 tester (EURUSD,H1)       CopyTicksRange ('EURUSD',Ticks, COPY_TICKS_ALL , 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 );  received 78831 ticks
2021.09 . 19 15 : 36 : 52.579 tester (EURUSD,H1)       2021.09 . 17 00 : 00 : 00 : 349 - first tick, 2021.09 . 17 19 : 59 : 59 : 088 - last tick
2021.09 . 19 15 : 36 : 52.645 tester (EURUSD,H1)       CustomTicksReplace ('CustomBR', 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 , Ticks, 78831   );  replaced 78831 ticks
2021.09 . 19 15 : 36 : 52.645 tester (EURUSD,H1)      ret= 1 , mt.time_msc= 1970.01 . 01 00 : 00 : 00 : 000
2021.09 . 19 15 : 36 : 52.645 tester (EURUSD,H1)      ---------------------
2021.09 . 19 15 : 36 : 52.645 tester (EURUSD,H1)      ---------Err_SymbolInfoTick2('CustomBR')------------
2021.09 . 19 15 : 36 : 52.658 tester (EURUSD,H1)       CopyTicksRange ('EURUSD',Ticks, COPY_TICKS_ALL , 2021.09 . 17 00 : 00 : 00 : 000 , 2021.09 . 17 20 : 00 : 00 : 000 );  received 78831 ticks
2021.09 . 19 15 : 36 : 52.658 tester (EURUSD,H1)       2021.09 . 17 00 : 00 : 00 : 349 - first tick, 2021.09 . 17 19 : 59 : 59 : 088 - last tick
2021.09 . 19 15 : 36 : 52.686 tester (EURUSD,H1)       CustomTicksAdd ('CustomBR',Ticks, 78831   );  added 78831 ticks
2021.09 . 19 15 : 36 : 52.686 tester (EURUSD,H1)      ret= 1 , mt.time_msc= 2021.09 . 17 19 : 59 : 59 : 088