1485 derlemesinden sonra CopyTicks() ve CopyTicksRange()'i geliştirmeye yönelik hatalar ve öneriler.

 

Geliştirmek için çalışmaya devam ediyoruz: tikler, tiklere erişim ve kene senkronizasyonu. @Slawa , @Renat Fatkhullin ve tiklerden sorumlu kişiler - tartışmaya katılın. Sanırım birden fazla hata bulacağız. Ayrıca @fxsaber , @coderex ve diğer tick kullanıcıları için ilginç olacağını düşünüyorum.

Hadi başlayalım:

1. ME build 1486 belgeleri, yeni CopyTicksRange() işlevi hakkında hiçbir şey söylemez. Site çok uygun değil. Belgelere bir editör ekleyin, lütfen;

2. CopyTicksRange() aracılığıyla kene istemeye çalışırken:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 );

Sürekli olarak -1 ve 4401 numaralı "istenen geçmiş bulunamadı" hatası alıyoruz. Ve şöyle olmalı:

Если параметр  to_msc  не указан, то отдаются все тики до конца истории.

  Kodun tamamı aşağıda:

//+------------------------------------------------------------------+
//|                                          test_CopyTicksRange.mq5 |
//|                                                         Tapochun |
//|                           https://www.mql5.com/ru/users/tapochun |
//+------------------------------------------------------------------+
#property copyright "Tapochun"
#property link        "https://www.mql5.com/ru/users/tapochun"
#property version    "1.00"
#property indicator_chart_window
#property indicator_plots 0
//---
#include <errordescription.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input datetime inpStartTime= __DATE__ ;   // Время начала загрузки истории
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   if (prev_calculated<= 0 )
     {
       //---
      UseCopyTicksRange();
       //---
      UseCopyTicks();
     }
//---
   return (rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void UseCopyTicksRange()
  {
   MqlTick ticks[];
//--- Замеряем время старта перед получением тиков
   ulong start= GetMicrosecondCount ();
//--- Запрашиваем тиковую историю
   int copied=CopyTicksRange( _Symbol ,ticks, COPY_TICKS_TRADE ,inpStartTime* 1000 );
//--- Рассчитаем, за сколько мс получена история
   ulong msc= GetMicrosecondCount ()-start;
//--- Проверяем количество скопированных тиков
   if (copied> 0 ) // Если история получена
     {
       //--- Выведем информацию о количестве тиков и затраченном времени
       Print ( __FUNCTION__ , ": Получено " ,copied, " тиков за " ,msc, " мкс" );
       //--- Проверка синхронизации тиковой истории
       if ( GetLastError ()== 0 ) // Если история синхронизирована
        {
         //--- Выходим
         return ;
        }
       else                                      // Если история рассинхронизирована - сообщение
        {
         Print ( __FUNCTION__ , ": Получено " ,copied, " тиков за " ,msc, " мкс. Тики еще не синхронизированы!" );
         return ;
        }
     }
   else if (copied== 0 ) // Если получено 0 тиков - сообщение
       Print ( __FUNCTION__ , ": ВНИМАНИЕ! Получено 0 тиков. Возможно установлен некорректный параметр from (" +
             TimeToString (inpStartTime, TIME_DATE | TIME_SECONDS )+ "." ,inpStartTime* 1000 % 1000 , "). Текущее время " + TimeToString ( TimeCurrent ()));
   else                                          // Если тики не получены - ошибка
   Print ( __FUNCTION__ , ": ОШИБКА #" , GetLastError (), " (" +ErrorDescription( _LastError )+ "). Тики не получены!" );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void UseCopyTicks()
  {
   MqlTick ticks[];
//--- Замеряем время старта перед получением тиков
   ulong start= GetMicrosecondCount ();
//--- Запрашиваем тиковую историю
   int copied= CopyTicks ( _Symbol ,ticks, COPY_TICKS_TRADE ,inpStartTime* 1000 , 10000000 );
//--- Рассчитаем, за сколько мс получена история
   ulong msc= GetMicrosecondCount ()-start;
//--- Проверяем количество скопированных тиков
   if (copied> 0 ) // Если история получена
     {
       //--- Выведем информацию о количестве тиков и затраченном времени
       Print ( __FUNCTION__ , ": Получено " ,copied, " тиков за " ,msc, " мкс" );
       //--- Проверка синхронизации тиковой истории
       if ( GetLastError ()== 0 ) // Если история синхронизирована
        {
         //--- Выходим
         return ;
        }
       else                                      // Если история рассинхронизирована - сообщение
        {
         Print ( __FUNCTION__ , ": Получено " ,copied, " тиков за " ,msc, " мкс. Тики еще не синхронизированы!" );
         return ;
        }
     }
   else if (copied== 0 ) // Если получено 0 тиков - сообщение
       Print ( __FUNCTION__ , ": ВНИМАНИЕ! Получено 0 тиков. Возможно установлен некорректный параметр from (" +
             TimeToString (inpStartTime, TIME_DATE | TIME_SECONDS )+ "." ,inpStartTime* 1000 % 1000 , "). Текущее время " + TimeToString ( TimeCurrent ()));
   else                                          // Если тики не получены - ошибка
   Print ( __FUNCTION__ , ": ОШИБКА #" , GetLastError (), " (" +ErrorDescription( _LastError )+ "). Тики не получены!" );
  }
//+------------------------------------------------------------------+

CopyTicks() doğru sonucu döndürür.

Dosyalar:
 

Genel olarak, bir hikaye almak için ortaya çıkmadı. Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , 0 , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 , (inpStartTime+ 72000 )* 1000 );

cevap hep aynı:

2016.11 . 30 21 : 36 : 45.872 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 45.965 UseCopyTicks: Получено 288181 тиков за 93009 мкс
2016.11 . 30 21 : 36 : 47.908 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 48.011 UseCopyTicks: Получено 288186 тиков за 102971 мкс
2016.11 . 30 21 : 36 : 49.992 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 50.090 UseCopyTicks: Получено 288189 тиков за 98423 мкс

VTBR-12.16, BR-12.16, RTS-12.16 vadelilerinde denendi. COPY_TICKS_ALL keneler üzerinde denedim - aynı sonuç. Sevgili geliştiriciler, kullanıcıları böyle mi trollüyorsunuz? Yoksa geliştirmelerinizi yayınlamadan önce test etmek mi istiyorsunuz?

 
Göstergeyi her kene üzerinde çalıştırırsanız - aynı sonuç. Geçmiş alınmadı.
 
Kene geçmişini sembolle çarptım - yardımcı olmadı.
 
Alexey Kozitsyn :

Genel olarak, bir hikaye almak için ortaya çıkmadı. Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , 0 , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 , (inpStartTime+ 72000 )* 1000 );

cevap hep aynı:

2016.11 . 30 21 : 36 : 45.872 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 45.965 UseCopyTicks: Получено 288181 тиков за 93009 мкс
2016.11 . 30 21 : 36 : 47.908 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 48.011 UseCopyTicks: Получено 288186 тиков за 102971 мкс
2016.11 . 30 21 : 36 : 49.992 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 50.090 UseCopyTicks: Получено 288189 тиков за 98423 мкс

VTBR-12.16, BR-12.16, RTS-12.16 vadelilerinde denendi. COPY_TICKS_ALL keneler üzerinde denedim - aynı sonuç. Sevgili geliştiriciler, kullanıcıları böyle mi trollüyorsunuz? Yoksa geliştirmelerinizi yayınlamadan önce test etmek mi istiyorsunuz?

 

Demotivator Zaten 100. değişiklik ve her şey çalışmıyor ...

http://demotivatorium.ru/sstorage/3/2012/03/2703120956251657.jpg
 
Alexey Kozitsyn :

Genel olarak, bir hikaye almak için ortaya çıkmadı. Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , 0 , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 );

Bu şekilde denedim:

//--- Запрашиваем тиковую историю
int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_TRADE , inpStartTime* 1000 , (inpStartTime+ 72000 )* 1000 );

cevap hep aynı:

2016.11 . 30 21 : 36 : 45.872 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 45.965 UseCopyTicks: Получено 288181 тиков за 93009 мкс
2016.11 . 30 21 : 36 : 47.908 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 48.011 UseCopyTicks: Получено 288186 тиков за 102971 мкс
2016.11 . 30 21 : 36 : 49.992 UseCopyTicksRange: ОШИБКА # 4401 (Запрашиваемая история не найдена). Тики не получены!
2016.11 . 30 21 : 36 : 50.090 UseCopyTicks: Получено 288189 тиков за 98423 мкс

VTBR-12.16, BR-12.16, RTS-12.16 vadelilerinde denendi. COPY_TICKS_ALL keneler üzerinde denedim - aynı sonuç. Sevgili geliştiriciler, kullanıcıları böyle mi trollüyorsunuz? Yoksa geliştirmelerinizi yayınlamadan önce test etmek mi istiyorsunuz?

 

çalışmayan öğrenci yemek yer

https://www.youtube.com/watch?v=yMit_zQnqlo

 

Web belgelerinde sadece bir hata olduğunu düşünüyorum, ME şimdilik gerçekten boş. Veya özellik hala geliştirme aşamasındadır. İkincisi, 1970'den beri bir yerden veri istiyorsunuz ve geçen yüzyıldan kenelerin neden geri dönmediğini merak ediyorsunuz))!! Orada ne içiyorsun?

Her şey böyle çalışıyor

void OnStart ()
{
     datetime dt1 = D'2016.11.28 00:00:00' , dt2 = D'2016.11.30 00:00:00' ;
     MqlTick ticks[];
     ulong start, msc;
     //--- Замеряем время старта перед получением тиков
    start= GetMicrosecondCount ();
     int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_ALL , dt1* 1000 , dt2* 1000 );
//--- Рассчитаем, за сколько мс получена история
    msc= GetMicrosecondCount ()-start;
     Print ( "copied=" , copied, "   msc=" , msc);
     return ;
}

// вывод
2016.12 . 01 04 : 52 : 08.134 TestCopyTicks (EURUSD.m,M15)    copied= 333081    msc= 1294871
2016.12 . 01 04 : 52 : 16.877 TestCopyTicks (EURUSD.m,M15)    copied= 333081    msc= 318596

***

 
Alexey Volchanskiy :

Web belgelerinde sadece bir hata olduğunu düşünüyorum, ME şimdilik gerçekten boş. Veya özellik hala geliştirme aşamasındadır. İkincisi, 1970'den beri bir yerden veri istiyorsunuz ve geçen yüzyıldan kenelerin neden geri dönmediğini merak ediyorsunuz))!! Orada ne içiyorsun?

Her şey böyle çalışıyor

void OnStart ()
{
     datetime dt1 = D'2016.11.28 00:00:00' , dt2 = D'2016.11.30 00:00:00' ;
     MqlTick ticks[];
     ulong start, msc;
     //--- Замеряем время старта перед получением тиков
    start= GetMicrosecondCount ();
     int copied = CopyTicksRange( _Symbol , ticks, COPY_TICKS_ALL , dt1* 1000 , dt2* 1000 );
//--- Рассчитаем, за сколько мс получена история
    msc= GetMicrosecondCount ()-start;
     Print ( "copied=" , copied, "   msc=" , msc);
     return ;
}

// вывод
2016.12 . 01 04 : 52 : 08.134 TestCopyTicks (EURUSD.m,M15)    copied= 333081    msc= 1294871
2016.12 . 01 04 : 52 : 16.877 TestCopyTicks (EURUSD.m,M15)    copied= 333081    msc= 318596

***

Alexey, testlere katıldığın için teşekkürler. Gördüğünüz gibi, belirli bir tarihten belirli bir tarihe kadar denedim ve tarih yok. Ama sonuç şu ki: 1. __DATE__ kullandım ve makro ikameleriyle ilgili sorun var gibi görünüyor; 2. vadeli işlemlerde test edildi; Evet, belgelere bakarsanız en azından kenelerin indirilmeye başlanmış olması gerekirdi. Ancak hiçbir şey olmuyor.

Göstergemi sitenizde çalıştırmayı denediniz mi?