無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ビュー:
69
評価:
(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フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

MetaTrader5には、ファンダメンタルカレンダーイベントの更新されたボリューム履歴があり、どのデータもプログラムでアクセスする ことができます。


このライブラリを使用すると、このデータを便利に扱うことができます。特に、テスターや実際の取引で使用することができます。


このライブラリの使い方は、例のソースコードのコメントの形で示されています。


ヒストリカルデータの取得

// スクリプトは履歴データを出力する。

#include <fxsaber\Calendar\Calendar.mqh> // カレンダー - ファンダメンタル分析を履歴とリアルタイムで表示。

void OnStart()
{
  CALENDAR Calendar;
  
  // すべての (NULL) 通貨のイベントを、最も重要度の低い (NONE) 通貨から順に取得。
  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-Terminalそのものと比較できます。


    今後のイベントの取得。

    // スクリプトは今後のイベントを表示します。
    
    #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()); // プリントアウトした。
    }

    このような情報システムへの組み込みにより、Expert Advisors/Indicatorsで重要な今後のカレンダーイベントを通知することができます。




    以下は、現在値と予測値を比較して非農業部門雇用者数を 取引するExpert Advisorです。

    //ファンダメンタルズデータの履歴にMT4/5-Testerで取引するためのExpert Advisor。
    
    #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; // テイクプロフィット
    input int inSL = 1000; // ストップロス
    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-Terminalから絶対にすべてのイベント(履歴+未来)をロードします。
               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/ja/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-Terminalで一度実行し、すべてのヒストリカルデータ(~60 Mb)を保存してください。その後、テスターで利用できるようになります。


    結果(H1始値で6年間)。


    特徴

    • DLLを使用せず、マーケットプレイスで実行可能。
    • クロスプラットフォーム操作:MT4でファイルからデータを取得。

    MetaQuotes Ltdによってロシア語から翻訳されました。
    元のコード: https://www.mql5.com/ru/code/32430

    シングルテスター・キャッシュ シングルテスター・キャッシュ

    テスターのシングルパスデータ。

    書籍「MQL5を使用したアルゴリズム取引のためのニューラルネットワーク」からの例 書籍「MQL5を使用したアルゴリズム取引のためのニューラルネットワーク」からの例

    本書「MQL5を使用したアルゴリズム取引のためのニューラルネットワーク」は、人工知能とニューラルネットワークの理論的基礎と、MQL5プログラミング言語を使った金融取引への応用の実践的側面の両方を網羅した包括的なガイドブックです。

    新しいバーやローソク足の始まりを検知する 新しいバーやローソク足の始まりを検知する

    Expert AdvisorのOnTick()イベントハンドラで新しいバーまたはローソク足の開始を検出する。

    バックキック バックキック

    アルゴリズム・サイクル:オープンポジションがない場合、反対側のポジションを2つオープンする。両方のポジションが閉じるのを待つ。