빌드 1485 이후 CopyTicks() 및 CopyTicksRange() 개선을 위한 버그 및 제안.

 

틱, 틱에 대한 액세스 및 틱 동기화를 개선하기 위해 계속 노력하고 있습니다. @Slawa , @Renat Fatkhullin 및 틱을 담당하는 사람들이 토론에 참여하십시오. 나는 우리가 하나 이상의 실수를 찾을 것이라고 생각합니다. 또한 @fxsaber , @coderex 및 기타 틱 사용자에게 흥미로울 것이라고 생각합니다.

시작하자:

1. ME 빌드 1486 문서는 새로운 CopyTicksRange() 함수에 대해 아무 말도 하지 않습니다. 사이트가 그다지 편리하지 않습니다. 문서에 편집기를 추가하십시오.

2. CopyTicksRange()를 통해 틱을 요청하려고 할 때:

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

지속적으로 -1 및 오류 #4401 "요청한 기록을 찾을 수 없음"이 표시됩니다. 그리고 다음과 같아야 합니다.

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

  아래 전체 코드:

//+------------------------------------------------------------------+
//|                                          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()는 올바른 결과를 반환합니다.

파일:
 

일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

대답은 항상 동일합니다.

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에서 시도했습니다. 나는 틱에 COPY_TICKS_ALL을 시도했습니다 - 동일한 결과. 친애하는 개발자 여러분, 그렇게 사용자를 트롤링하고 있습니까? 아니면 출시 전에 개발을 테스트하고 싶습니까?

 
모든 틱 에서 표시기를 실행하면 동일한 결과가 나타납니다. 내역이 수신되지 않았습니다.
 
나는 기호로 진드기 기록 을 세웠습니다. 도움이 되지 않았습니다.
 
Alexey Kozitsyn :

일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

대답은 항상 동일합니다.

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에서 시도했습니다. 나는 틱에 COPY_TICKS_ALL을 시도했습니다 - 동일한 결과. 친애하는 개발자 여러분, 그렇게 사용자를 트롤링하고 있습니까? 아니면 출시 전에 개발을 테스트하고 싶습니까?

 

Demotivator 이미 100 번째 수정과 모든 것이 작동하지 않습니다 ...

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

일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

다음과 같이 시도했습니다.

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

대답은 항상 동일합니다.

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에서 시도했습니다. 나는 틱에 COPY_TICKS_ALL을 시도했습니다 - 동일한 결과. 친애하는 개발자 여러분, 그렇게 사용자를 트롤링하고 있습니까? 아니면 출시 전에 개발을 테스트하고 싶습니까?

 

일하지 않는 사람은 공부 학생을 먹는다

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

 

웹 문서의 실수일 뿐이라고 생각합니다. 현재 ME는 정말 비어 있습니다. 또는 기능이 아직 개발 중입니다. 둘째, 1970년 이후 어딘가에서 데이터를 요청하고 있는데 왜 지난 세기의 틱이 반환되지 않는지 궁금합니다.))!! 거기서 뭘 피우세요?

모든 것이 작동하는 방식입니다.

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 :

웹 문서의 실수일 뿐이라고 생각합니다. 현재 ME는 정말 비어 있습니다. 또는 기능이 아직 개발 중입니다. 둘째, 1970년 이후 어딘가에서 데이터를 요청하고 있는데 왜 지난 세기의 틱이 반환되지 않는지 궁금합니다.))!! 거기서 뭘 피우세요?

모든 것이 작동하는 방식입니다.

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, 테스트에 참여해주셔서 감사합니다. 보시다시피 특정 날짜부터 특정 날짜까지 시도했는데 날짜가 없습니다. 그러나 결론은 다음과 같습니다. 1. __DATE__를 사용했는데 매크로 대체에 문제가 있는 것 같습니다. 2. 선물에 대한 테스트; 예, 문서를 보면 최소한 틱 다운로드가 시작되었을 것입니다. 그러나 아무 일도 일어나지 않습니다.

귀하의 사이트에서 내 지표를 실행해 보셨습니까?