거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
조회수:
43
평가:
(30)
게시됨:
2025.04.03 11:16
\MQL5\Include\fxsaber\Calendar\
String.mqh (1.77 KB) 조회
Event.mqh (20.88 KB) 조회
Calendar.mqh (30.15 KB) 조회
DST.mqh (11.46 KB) 조회
\MQL5\Experts\
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

메타트레이더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.0705:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 
2020.12.0705:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 
2020.12.0705:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 
2020.12.0705:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 
2020.12.0705:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 
2020.12.0705: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

    싱글 테스터 캐시 싱글 테스터 캐시

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

    PSAR Zigzag (Non lagging) PSAR Zigzag (Non lagging)

    A zigzag based on the trend change of the parabolic sar

    새 막대 또는 캔들 시작 감지하기 새 막대 또는 캔들 시작 감지하기

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

    New Candle or Bar formation. New Candle or Bar formation.

    This Bot detects the open of a new candle on any set timeframe, thereby making it easier to run a one-time code, place trades and call other functions. The code is written in the OnTick() function.