intCopyTicks ( string symbol_name, // имя символа MqlTick & ticks_array[], // массив для приёма тиков uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков ulong from = 0 , // дата, начиная с которой запрашиваются тики uint count = 0// количество тиков, которые необходимо получить );
intCopyTicks ( string symbol_name, // имя символа MqlTick & ticks_array[], // массив для приёма тиков uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков ulong from = 0 , // дата, начиная с которой запрашиваются тики uint count = 0// количество тиков, которые необходимо получить );
intCopyTicks ( string symbol_name, // имя символа MqlTick & ticks_array[], // массив для приёма тиков uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков ulong from = 0 , // дата, начиная с которой запрашиваются тики uint count = 0// количество тиков, которые необходимо получить );
굵게 강조 표시했습니다. 끝까지 배열 - 기본값 거부.
예, 캐시의 눈금 크기는 설명서에서 명확하게 식별할 수 있습니다. 전체 캐시를 정확히 가져와야 하는 경우 설명서를 보고 다음과 같은 매개변수를 사용하여 함수로 필요한 수를 요청합니다.
int복사 버퍼( 정수Indicator_handle,// 표시기 핸들 정수buffer_num,// 표시 버퍼 번호 정수start_pos,// 시작 위치 정수count,// 복사할 양 더블완충기[]// 데이터를 복사할 배열 );
그래서 그것은 날짜부터 날짜까지 될 것입니다. 이름에 Copy가 있다는 이유만으로 CopyTicks 구문을 Copy-functions에 맞추려고 하면 편리하지 않습니다. 편리하고 정당합니다. 이것은 다음과 같은 전처리기 작업을 할 수 있는 때입니다.
// Позволяет, как в 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( conststring Symb, constint TimeFrame, constint iShift ) \ { \ T tValue[]; \ \ return ((Copy ##FUNC((Symb == NULL ) ? _Symbol : Symb, _Period , iShift, 1 , tValue) > 0 ) ? tValue[ 0 ] : - 1 ); \ } \ \ T operator []( constint iPos ) const \ { \ return (CLASS ##NAME::Get(_Symbol, _Period , iPos)); \ } \ }; \ \ CLASS ##NAME NAME; \ \ T i ##NAME( conststring Symb, constint TimeFrame, constint 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 )
그리고 CopyTicks의 경우 이 작업을 수행할 수 없습니다. 두 개의 서로 다른 물리적 스트림(TRADE 및 INFO)과 하나의 합성(ALL) 플래그가 있습니다.
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 )
그리고 CopyTicks의 경우 이 작업을 수행할 수 없습니다. 두 개의 서로 다른 물리적 스트림(TRADE 및 INFO)과 하나의 합성(ALL) 플래그가 있습니다.
당신이 포럼에 등장하기 전에 나는 그러한 글을 접하지 못했습니다. 물론 당신 덕분에 그렇습니다. 그러나 이런 종류의 글이 많은 프로그래머에게 반향을 일으킬지 확신하지 못합니다.
왜요?
string symbol_name, // имя символа
MqlTick & ticks_array[], // массив для приёма тиков
uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков
ulong from = 0 , // дата, начиная с которой запрашиваются тики
uint count = 0 // количество тиков, которые необходимо получить
);
string symbol_name, // имя символа
MqlTick & ticks_array[], // массив для приёма тиков
uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков
ulong from = 0 , // дата, начиная с которой запрашиваются тики
uint count = 0 // количество тиков, которые необходимо получить
);
string symbol_name, // имя символа
MqlTick & ticks_array[], // массив для приёма тиков
uint flags = COPY_TICKS_ALL , // флаг, определяющий тип получаемых тиков
ulong from = 0 , // дата, начиная с которой запрашиваются тики
uint count = 0 // количество тиков, которые необходимо получить
);
예, 캐시의 눈금 크기는 설명서에서 명확하게 식별할 수 있습니다. 전체 캐시를 정확히 가져와야 하는 경우 설명서를 보고 다음과 같은 매개변수를 사용하여 함수로 필요한 수를 요청합니다.
int 복사 버퍼 (
정수 Indicator_handle , // 표시기 핸들
정수 buffer_num , // 표시 버퍼 번호
정수 start_pos , // 시작 위치
정수 count , // 복사할 양
더블 완충기[] // 데이터를 복사할 배열
);
결국, 왜 새로운 것을 발명하는지 이미 알아 냈습니까?
기본 설정을 저장하는 것보다 날짜부터 로드하는 것이 훨씬 더 중요하다고 생각합니다.
그래서 그것은 날짜부터 날짜까지 될 것입니다. 이름에 Copy가 있다는 이유만으로 CopyTicks 구문을 Copy-functions에 맞추려고 하면 편리하지 않습니다. 편리하고 정당합니다. 이것은 다음과 같은 전처리기 작업을 할 수 있는 때입니다.
// А так же задает привычные 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 )
그래서 그것은 날짜부터 날짜가 될 것입니다. 이름에 Copy가 있다는 이유로 CopyTicks 구문을 Copy-functions에 맞추려고 하면 편리하지 않습니다. 이와 같은 전처리기 작업을 수행할 수 있을 때 편리하고 정당합니다.
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 )
당신이 포럼에 등장하기 전에 나는 그러한 글을 접하지 못했습니다. 물론 당신 덕분에 그렇습니다. 그러나 이런 종류의 글이 많은 프로그래머에게 반향을 일으킬지 확신하지 못합니다.
데모에서는 실제로 그렇습니다. BCS에서 - 아니요
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
와 알파리는 진짜 별로다
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
그는 Kopitiks의 불편에 대해 위에서 말했습니다. 표시된 표시기는 CopyTix를 여러 번 호출해야 하기 때문에 느려집니다. 그리고 모든 브레이크는 그 때문이다. 그리고 여기 일이 있습니다
솔루션이 제안되었습니다
이제 날짜 사이의 틱을 다운로드하려면 초기 날짜부터 시작하여 UNKNOWN의 틱 수를 요청해야 합니다. 그런 다음 종료 날짜에 도달했는지 매번 확인하십시오. 그리고 각 복사 요청이 매우 비싸고 이러한 브레이크가 획득된다는 사실을 고려합니다.
실제 오프닝의 데이터, 신선한 틱만 로드:
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
CopyTicks()가 비동기 함수인 것 같습니까?
터미널을 고문했습니다. 스크립트
{
MqlTick Ticks[];
Print ( CopyTicks ( _Symbol , Ticks));
Print ( GetLastError ());
}
멈춘다. 수동 삭제 로그
2016.10 . 28 16 : 48 : 57.737 Test (GBPUSD,M1) - 1
TF 및 기호 변경 - 유사합니다. 재부팅 후 작동했습니다.