일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.
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.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을 시도했습니다 - 동일한 결과. 친애하는 개발자 여러분, 그렇게 사용자를 트롤링하고 있습니까? 아니면 출시 전에 개발을 테스트하고 싶습니까?
일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.
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.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일반적으로 이야기를 얻지 못했습니다. 다음과 같이 시도했습니다.
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.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을 시도했습니다 - 동일한 결과. 친애하는 개발자 여러분, 그렇게 사용자를 트롤링하고 있습니까? 아니면 출시 전에 개발을 테스트하고 싶습니까?
일하지 않는 사람은 공부 학생을 먹는다
웹 문서의 실수일 뿐이라고 생각합니다. 현재 ME는 정말 비어 있습니다. 또는 기능이 아직 개발 중입니다. 둘째, 1970년 이후 어딘가에서 데이터를 요청하고 있는데 왜 지난 세기의 틱이 반환되지 않는지 궁금합니다.))!! 거기서 뭘 피우세요?
모든 것이 작동하는 방식입니다.
{
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
***
웹 문서의 실수일 뿐이라고 생각합니다. 현재 ME는 정말 비어 있습니다. 또는 기능이 아직 개발 중입니다. 둘째, 1970년 이후 어딘가에서 데이터를 요청하고 있는데 왜 지난 세기의 틱이 반환되지 않는지 궁금합니다.))!! 거기서 뭘 피우세요?
모든 것이 작동하는 방식입니다.
{
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. 선물에 대한 테스트; 예, 문서를 보면 최소한 틱 다운로드가 시작되었을 것입니다. 그러나 아무 일도 일어나지 않습니다.
귀하의 사이트에서 내 지표를 실행해 보셨습니까?
틱, 틱에 대한 액세스 및 틱 동기화를 개선하기 위해 계속 노력하고 있습니다. @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()는 올바른 결과를 반환합니다.