당사 팬 페이지에 가입하십시오
메타트레이더5에는 기본 캘린더 이벤트에 대한 업데이트된 볼륨 기록이 있으며, 모든 데이터는 프로그래밍 방식으로 액세스할 수 있습니다.
이 라이브러리를 사용하면 이 데이터로 편리하게 작업할 수 있습니다. 특히 테스터와 실제 거래에서 사용할 수 있습니다.
라이브러리 작업은 예제 소스 코드의 주석 형태로 표시됩니다.
과거 데이터 가져오기.
// 스크립트가 기록 데이터를 출력합니다. #include <fxsaber\Calendar\Calendar.mqh> // 캘린더 - 기록 및 실시간에 대한 기본 분석. void OnStart() { CALENDAR Calendar; // 중요도가 가장 낮은(NONE) 통화부터 모든(NULL) 통화에 대한 이벤트를 가져옵니다. const int Size = Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2020.12.07', D'2020.12.08'); // 인쇄했습니다. for (int i = 0; i < Size; i++) Print(Calendar[i].ToString()); }
결과.
2020.12.07 AllDay EUR 0 День Конституции(constitution-day), Испания(ES) | | | | 2020.12.07 00:00 AUD 3 Выступление председателя Резервного Банка Австралии Лоу(rba-governor-lowe-speech), Австралия(AU) | | | | 2020.12.07 01:50 JPY 1 Международные резервы(jp-foreign-reserves), Япония(JP) | $1384.6 B | | $1384.4 B | 2020.12.07 02:30 AUD 1 Количество объявлений о вакансиях от ANZ м/м(anz-job-advertisements-mm), Австралия(AU) | 13.9% | 0.8% | 9.4% | 2020.12.07 ≈05:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 2020.12.07 ≈05:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 2020.12.07 ≈05:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 2020.12.07 ≈05:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта г/г(exports-yy), Китай(CN) | 14.9% | 2.2% | 7.6% | 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов(coincident-index), Япония(JP) | 89.7 | 81.8 | 81.1 | 84.8 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов(leading-index), Япония(JP) | 93.8 | 92.7 | 92.5 | 93.3 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов Японии м/м(coincident-index-mm), Япония(JP) | 4.9% | | 1.7% | 2.4% 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов м/м(leading-index-mm), Япония(JP) | 0.5% | | 4.0% | 4.2% 2020.12.07 08:00 ZAR 1 Валовые международные резервы(gross-international-reserves), Южно-Африканская Республика(ZA) | $53.76 B | $54.129 B | $53.658 B | 2020.12.07 08:00 ZAR 1 Чистые международные резервы(net-international-reserves), Южно-Африканская Республика(ZA) | $51.257 B | $52.719 B | $51.364 B | 2020.12.07 09:00 EUR 2 Промышленное производство г/г(industrial-production-yy), Германия(DE) | -3.0% | -11.4% | -7.3% | -6.7% 2020.12.07 09:00 EUR 2 Промышленное производство м/м(industrial-production-mm), Германия(DE) | 3.2% | 7.7% | 1.6% | 2.3% 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности м/м(manufacturing-production-mm), Норвегия(NO) | 0.6% | 0.1% | -0.5% | 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности г/г(manufacturing-production-yy), Норвегия(NO) | -2.7% | -3.3% | -3.4% | 2020.12.07 09:00 NOK 1 Промышленное производство м/м(industrial-production-mm), Норвегия(NO) | -3.5% | 0.0% | -1.7% | -1.6% 2020.12.07 09:00 NOK 1 Промышленное производство г/г(industrial-production-yy), Норвегия(NO) | 0.0% | 6.9% | 6.3% |
MT5 터미널 자체와 비교할 수 있습니다.
예정된 이벤트 가져오기.
// 스크립트가 예정된 이벤트를 표시합니다. #include <fxsaber\Calendar\Calendar.mqh> // 캘린더 - 기록 및 실시간에 대한 기본 분석. void OnStart() { CALENDAR Calendar; string Currencies[2]; // 현재 캐릭터의 통화를 가져옵니다. Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE); Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT); // 예정된 중요한 이벤트를 기호 통화별로 표시합니다. Calendar.Set(Currencies); Print(Calendar.ToString()); // 인쇄했습니다. }
정보 시스템에 이러한 임베딩을 통해 전문가 조언자/지표에서 예정된 중요한 캘린더 이벤트를 알릴 수 있습니다.
기초 데이터에 대한 백테스트.
아래는 현재 값과 예측 값을 비교하여 비농업 급여를 거래하는 전문가 조언자입니다.
// MT4/5 트레이딩을 위한 전문가 조언자-기본 데이터의 역사에 대한 테스터. #define CALENDAR_FILENAME "Calendar.bin" // 캘린더 읽기/쓰기를 위한 파일 이름입니다. #property tester_file CALENDAR_FILENAME // MT5-Tester가 이 파일을 선택하도록 지정합니다. #include <fxsaber\Calendar\Calendar.mqh> // 캘린더 - 기록 및 실시간에 대한 기본 분석. input group "Calendar" input string inCurrency = "USD"; // 통화 input string inFilterName = "payrolls"; // 필터 이름 input group "EA" input int inTP = 1000; // TakeProfit input int inSL = 1000; // StopLoss input bool inReverse = true; // 거래 방향 CALENDAR Calendar; // 캘린더 데이터가 있는 개체. int OnInit() { bool Res = false; if (MQLInfoInteger(MQL_TESTER)) // 테스터에서 작업하는 경우 { Res = Calendar.Load(CALENDAR_FILENAME) && // 파일에서 이벤트를 로드했습니다. Calendar.FilterByCurrency(inCurrency) && // 통화 필터를 적용했습니다. Calendar.FilterByName(inFilterName); // 이벤트 이름에 필터를 적용했습니다. if (!Res) // 로드된 데이터에 문제가 있는 경우, Print("Run the EA in the MT5-Terminal!"); // MT5-Terminal에서 EA를 실행하여 가져와야 한다고 보고했습니다. } #ifdef __MQL5__ // 터미널에서 작업 중입니다. else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // MT5-터미널에서 모든 이벤트(기록 + 미래)를 로드했습니다. Calendar.Save(CALENDAR_FILENAME)) // 파일에 저장합니다. MessageBox("You can run the EA in the MT4/5-Tester."); // 이제 MT4/5-Tester에서 작업할 수 있다고 보고했습니다. #endif // #ifdef __MQL5__ return(!Res); } void OnTick() { static int Pos = Calendar.GetPosAfter(TimeCurrent()); // 캘린더에서 현재 시간 바로 뒤에 있는 이벤트 위치를 가져옵니다. if ((Pos < Calendar.GetAmount()) && // 캘린더를 넘어서지 않은 경우 (Calendar[Pos].time < TimeCurrent())) // 현재 시간이 이벤트를 통과했습니다. { const EVENT Event = Calendar[Pos]; // 해당 이벤트를 수신했습니다. if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // 이벤트의 현재 값과 예측 값이 설정된 경우 { Print(Event.ToString()); // 이 이벤트 전체를 인쇄합니다. if (Event.Actual > Event.Forecast) // 현재 값이 예측 값보다 큰 경우, PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For."); // 한 방향의 포지션을 엽니다. else PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // 그렇지 않으면 다른 방향입니다. } Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // 캘린더에서 현재 시간 바로 뒤에 있는 이벤트 위치를 가져옵니다. } } #include <MT4Orders.mqh> // https://www.mql5.com/ko/code/16006 #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) // 지정된 댓글이 있는 포지션을 엽니다. TICKET_TYPE PositionOpen( const int Type, const string comment ) { return(Type ? OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Bid + inSL * _Point, Bid - inTP * _Point, comment) : OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - inSL * _Point, Ask + inTP * _Point, comment)); }
MT5 터미널에서 한 번 실행하면 모든 과거 데이터(~60Mb)가 저장됩니다. 그 후에는 테스터에서 사용할 수 있습니다.
결과 (상반기 시가로 6년 동안).
특징.
- DLL을 사용하지 않으며, 마켓플레이스에서 실행할 수 있습니다.
- 크로스 플랫폼 작동: MT4에서는 파일에서 데이터를 가져옵니다.
MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/32430

테스터의 단일 패스 데이터.

Keltner Channel (MetaTrader indicator) — is a classical technical analysis indicator developed by Chester W. Keltner in 1960. The indicator is somewhat similar to the Bollinger Bands and Envelopes. It uses three plot lines: the middle line is the 10-day simple moving average applied to the typical price ((high + low + close) / 3), the upper and the lower bands are produced by adding and subtracting the moving average of the daily price range (High and Low difference) from the middle line. This way, a volatility-based channel is built. In this version of the indicator you can modify all the parameters of the MA. The indicator is available both for MT4 and MT5 versions of the platform.

Expert Advisor의 OnTick() 이벤트 핸들러에서 새 막대 또는 캔들의 시작을 감지합니다.

임의의 EA의 읽기/쓰기 매개변수 라이브러리.