모든 것을 동기화하는 것은 매우 어렵습니다. 지표에서 모든 것을 고려하려고 노력했지만 이러한 구멍을 처리하는 것은 매우 어렵습니다.
2010.07.19 02:20:12 체크홀 (EURUSD,M1) 2010.07.09 21:35:00 날짜부터 260홀 기록 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.19 00:20:00 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) USDJPY 홀 2010.07.19 00:15:00 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) EURGBP 홀 2010.07.16 22:43:00 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:43:00 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:38:00 2010.07.19 02:20:12 홀 확인 (EURUSD,M1) 홀 AUD 2010.07.16 22:21:00
등.....
//+------------------------------------------------------------------+//| Проверка дыр.mq5 |//| Привалов С.В. |//| https://www.mql5.com/ru/users/Prival |//+------------------------------------------------------------------+#property copyright "Привалов С.В."#property link "https://www.mql5.com/ru/users/Prival"#property version "1.00"#property indicator_separate_window#property indicator_buffers 1#property indicator_plots 1#property indicator_color1 Blueint MaxBars= 7200 ; // точка стартаstring mas_0[]={ "USDCHF" , "GBPUSD" , "EURUSD" , "USDJPY" , "USDCAD" , "AUDUSD" , "EURGBP" , "EURAUD" , "EURCHF" , "EURJPY" , "GBPJPY" , "GBPCHF" };
int count_symbol= 12 ;
double Buffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
SetIndexBuffer ( 0 ,Buffer, INDICATOR_DATA );
PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM );
//--- на старте сразу же пошлем асинхронные запросы на поднятие таймфреймов в памятьfor ( int i= 0 ; i<count_symbol; i++) CheckOtherSymbol(mas_0[i],MaxBars);
return ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---if (rates_total<MaxBars) return ( 0 ); // ничего не считаем и ничего не рисуем на графике int start_pos=rates_total-MaxBars- 1 ; // точка стартаif (close[start_pos]== 0 ) return ( 0 ); // ничего не считаем и ничего не рисуем на графике //--- снова пошлем асинхронные запросы на поднятие таймфреймов в памятьfor ( int i= 0 ; i<count_symbol; i++)
{
if (!CheckOtherSymbol(mas_0[i],MaxBars)) return ( 0 );
}
if (prev_calculated== 0 )
{
Print ( "Дата начала тестирования " ,time[start_pos]);
Print ( "Символ " , _Symbol , " приод " , _Period );
}
else start_pos=prev_calculated- 1 ;
int sum= 0 ;
//--- расчет индикатораfor ( int i=start_pos;i<rates_total;i++)
{
Buffer[i]= 0 ;
for ( int j= 0 ; j<count_symbol; j++)
{
if (!CheckTimeOtherSymbol(mas_0[j],time[i]))
{
Print ( "Дыра " ,mas_0[j], " " ,time[i]);
sum++;
}
}
}
Print ( "Количество дыр в истории " ,sum, " от даты " ,time[start_pos]);
//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Проверка символов с асинхронным возбуждением |//+------------------------------------------------------------------+//| вход |//| symbol - символ |//| count_Bars - необходимое количество баров |//+------------------------------------------------------------------+bool CheckOtherSymbol( string symbol, int bars)
{
datetime ctm[ 1 ];
datetime checktime= TimeCurrent ()-bars* PeriodSeconds ( _Period ); // требуемое времяbool res=true;
// скопируем время требуемого бараif ( CopyTime (symbol, _Period ,checktime, 1 ,ctm)!= 1 ) res=false;
if (!res) Print ( "Нет данных по символу " ,symbol);
//--- вернем результатreturn (res);
}
//+------------------------------------------------------------------+//| Проверка синхронности символов |//+------------------------------------------------------------------+bool CheckTimeOtherSymbol( string symbol, datetime time)
{
datetime ctm[ 1 ];
bool res=false;
//--- скопируем время бараif ( CopyTime (symbol, _Period ,time, 1 ,ctm)== 1 )
{
// сравним его с требуемымif (ctm[ 0 ]==time) res=true;
}
// if(!res) Print("Нет синхронизации по символу ",symbol," time[0]=",ctm[0]," нужно ",time);//--- вернем результатreturn (res);
}
//+------------------------------------------------------------------+
설명서에서 MqlTradeCheckResult 검사 결과 구조에 대한 응답 코드(Retcode)에 대한 설명을 찾지 못했습니다. 그들은 할 것인가?
모든 설명은 문서에 있습니다.
OrderSend 함수 , MqlTradeResult 구조 및 거래 응답 코드 목록을 살펴보십시오.
Told - 크기가 없는 빈 배열
Tnew[1] - 배열을 넘어 배열이 Tnew[1]로 설명되므로 인덱스가 0에서 시작하기 때문에 해당 요소는 Tnew[0]으로만 액세스할 수 있습니다.
모든 설명은 문서에 있습니다.
OrderSend 함수 , MqlTradeResult 구조 및 거래 응답 코드 목록을 살펴보십시오.
결론은 무엇입니까? 이 경우 Tnew[1]은 유효하지 않은 표현식이지만 유효합니까? 올바른 표현은 Tnew[0] , Tnew[] 또는 다른 것입니까? Tnew[1],Tnew[0],Tnew[]를 사용해도 전문가의 작업 결과가 변하지 않는 것 같다.
적어도 존재하지 않는 인덱스의 배열에서 데이터를 읽는 경우 결과는 같을 수 없습니다. Tnew[1]에 무엇이 있다고 생각하십니까?
계정에 확실하지 않은 내용이 작성되어 있으며 범위를 벗어날 때 전문가 가 오류를 보고 하고 이동할 수 있습니다. 이 경우 Tnew[0]에는 무엇이 있습니까?
Renat, 내가 올바르게 이해했다면 반환 코드는 ENUM_TRADE_RETURN_CODES입니다. MqlTradeResult 구조의 경우 MqlTradeCheckResult 구조에도 적용
예, 거래 기능의 전체 공간에 대한 거래 오류 코드 데이터베이스는 하나뿐입니다.
새로운 기능에 대한 설명을 수정할 것입니다. 바로 시간이 없었습니다.
적어도 존재하지 않는 인덱스의 배열에서 데이터를 읽는 경우 결과는 같을 수 없습니다. Tnew[1]에 무엇이 있다고 생각하십니까?
계정에 확실하지 않은 내용이 작성되어 있으며 범위를 벗어날 때 전문가 가 오류를 보고 하고 이동할 수 있습니다. 이 경우 Tnew[0]에는 무엇이 있습니까?
datetime Tnew[ 1 ];Tnew[0];Tnew[];를 사용할 때 EA 작업의 결과는 변경되지 않습니다. 이는 Exp_TEMA.mq5 EA의 "Creating EA that trades on different 악기" , 기능
작동하지 않습니까?
Tnew[1]에 무엇이 있다고 생각하십니까?
CopyTime 이후(기호, 타임프레임, 0, 1, Tnew); 주소 Tnew[1]에는 이전 막대의 시작 시간이 포함되어야 합니다.
datetime Tnew[ 1 ];Tnew[0];Tnew[];를 사용할 때 EA 작업의 결과는 변경되지 않습니다. 이는 Exp_TEMA.mq5 EA의 "Creating EA that trades on different 악기" , 기능
작동하지 않습니까?
Tnew[1]에 무엇이 있다고 생각하십니까?
CopyTime 이후(기호, 타임프레임, 0, 1, Tnew); 주소 Tnew[1]에는 이전 막대의 시작 시간이 포함되어야 합니다.
순서대로 합시다
이 두 줄은 배열을 선언합니다. 그 중 하나는 동적 - (Told) 이고 두 번째 - (Tnew) 에는 내가 이해하는 한 항목이 하나만 포함되어 있습니다.
여기 에 동적 배열 의 차원을 변경하려는 시도가 있습니다. 배열의 항목 수는 size 와 같다고 가정합니다.
이 줄은 막대 번호 0 에서 시작하여 배열 Tnew 에 하나의 레코드 (막대 날짜)를 복사합니다. 그 후, 이 날짜는 이 Tnew[0]처럼 사용할 수 있게 됩니다(배열이 ZERO 부터 번호가 매겨지기 때문).
여기에서 Tnew 배열의 유일한 항목은 숫자 Number-1 에 있는 Told 배열의 셀에 있는 항목과 비교됩니다(번호는 0부터 지정됨을 기억하십시오) .
이 날짜가 일치하지 않으면 Tnew 배열의 값을 Told 배열의 셀에 씁니다.
설명서에서 MqlTradeCheckResult 검사 결과 구조에 대한 응답 코드(Retcode)에 대한 설명을 찾지 못했습니다. 그들은 할 것인가?
MetaTrader 5\MQL5\Include\ErrorDescription.mqh 파일에서
질문이 있습니다. 구멍이 없는 그래픽 문제는 고려 대상인가요? https://www.mql5.com/ru/forum/100491
모든 것을 동기화하는 것은 매우 어렵습니다. 지표에서 모든 것을 고려하려고 노력했지만 이러한 구멍을 처리하는 것은 매우 어렵습니다.
2010.07.19 02:20:12 체크홀 (EURUSD,M1) 2010.07.09 21:35:00 날짜부터 260홀 기록
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.19 00:20:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) USDJPY 홀 2010.07.19 00:15:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) EURGBP 홀 2010.07.16 22:43:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:43:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) GBPUSD 홀 2010.07.16 22:38:00
2010.07.19 02:20:12 홀 확인 (EURUSD,M1) 홀 AUD 2010.07.16 22:21:00
등.....
두 번째 질문: 이 다중 통화 지표에 제가 확인하지 않은 다른 함정이 있습니까?