ライブラリ: カレンダー - ページ 6

 
Automated Trading :

カレンダー

著者:fxsaber

fxsaberさん、ありがとうございます、
このライブラリはとても素晴らしいです。
.binファイルはnotepad++で読めますか?私のEAで作成されたファイルはnotepad++では読めませんし、BT中にcalendar.Loadは何も返しません。何かヒントはありますか?

ありがとうございます。
 
eepatk #:
.binファイルはnotepad++で読めますか?私のEAで作成されたファイルはnotepad++では読めません。また、BT中にcalendar.Loadは何も返しません。何かヒントはありますか?

何が課題なのか、すぐに形にしたほうがいいと思います。

 
fxsaber # :

何が課題なのか、すぐに形にしたほうがいい。

申し訳ありません。

基本的に、私はあなたが共有したサンプルコードから始め、.binファイルをダウンロードして作成することができます。

目的は、反復ごとに.binをロードし、クラスにリストされた各通貨のニュース/イベントをチェックすることです。

しかし、バックテストをしていると、Calendar.ToStringは空白を返します。


ありがとうございます、

 if ( MQLInfoInteger ( MQL_TESTER )) 
 {
    NF_Stopped_CCY="";  
      for(int i=0;i<8;i++)        
        {
                Calendar.Load(CALENDAR_FILENAME);
                Print("Raw",Calendar.ToString(0,10,false));  

                Calendar.FilterByTime(TimeCurrent()-NF_Stop_in_Days*24*60*60,TimeCurrent()+NF_Stop_in_Days*24*60*60);
                Print("FilterByTime",Calendar.ToString(0,10,false));  

                Calendar.FilterByCurrency(CCYP[i].Cname);
                Print("FilterByCCY",Calendar.ToString(0,10,false));  

                Calendar.FilterByImportance(NF_Stop_Importance);  
                Print("FilterByImp",Calendar.ToString(0,10,false));  
 
                          
                CCYP[i].Stop_By_News=Calendar.GetAmount();
                if (CCYP[i].Stop_By_News) 
                {
                  int temp=StringConcatenate(NF_Stopped_CCY,NF_Stopped_CCY," ", CCYP[i].Cname);
                  Print(Calendar.ToString(0,-1,false));  
                }
        } 
   Print("NF list(BackTest)   :",NF_Stopped_CCY);
   NEWS_RefreshTime.day =CurrentDay.day;
  }
 
eepatk #:

バックテスト用に以下のコードを書こうとしています。目的は、クラス内にリストされた各通貨のニュース/イベントをチェックするために、反復ごとに.binをロードすることです。

ファイルから静的変数にデータをロードするのは一度だけです。

#define  CALENDAR_FILENAME "Calendar.bin" // カレンダーを読み書きするためのファイル名。
#property tester_file CALENDAR_FILENAME  // MT5-Testerがこのファイルをピックアップすることを指定します。

#include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/ja/code/32430

CALENDAR CalendarFull; // カレンダーデータを持つオブジェクト。

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // ファイルからイベントをロードする
}

void OnTick()
{
  CALENDAR Calendar = CalendarFull;
  
  //....
}
 
fxsaber # :

ファイルから静的変数にデータをロードするのは一度だけでよい。


ありがとうございます。

 
fxsaber # :

ファイルからスタティック変数にデータをロードするのは一度だけでよい。

fxaberさん、ありがとうございます、

ご指摘を参考にコードを整理したのですが、やはり.binを読み込んだ後のCalendarFULLも空になってしまいます。

CalendarFULL.Loadは "1 "を返しますが、CalendarFULLの中には何もないようです。

.binのエンコーディングの問題でしょうか?

ありがとうございます。

 
eepatk #:

カレンダーフル.ロードは "1 "を返しますが、カレンダーフル内部には何もないようです。

MT5ターミナルでこのスクリプトを一度実行し、binファイルを生成します。

#define  CALENDAR_FILENAME "Calendar.bin" // カレンダーを読み書きするためのファイル名。

#include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/ja/code/32430

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // MT5-Terminalから絶対にすべてのイベント(履歴+未来)をロードします。
    Calendar.Save(CALENDAR_FILENAME);                     // ファイルに保存する。
}
 
fxsaber # :

MT5ターミナルでこのスクリプトを一度実行し、binファイルを生成します。

fxsaberさん、ありがとうございます。そうすると7xmbの.binファイルが生成されました。しかし、ロードして印刷しようとすると、空白が返されます。
 
eepatk #:
ありがとう、fxsaber。そうしたら7xmbの.binファイルが生成されたよ。しかし、ロードしてプリントアウトしようとすると、空白が返されました。
#define  CALENDAR_FILENAME "Calendar.bin" // カレンダーを読み書きするためのファイル名。
#property tester_file CALENDAR_FILENAME  // MT5-Testerがこのファイルをピックアップすることを指定します。

#include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/ja/code/32430

const string inSymbols[] = {"EURUSD", "AUDCAD"};

CALENDAR Calendars[];

int OnInit()
{      
  CALENDAR Calendar;
  const bool Res = (Calendar.Load(CALENDAR_FILENAME) != -1);

  if (Res)
    for (int i = ArrayResize(Calendars, ArraySize(inSymbols)) - 1; i >= 0; i--)
    {
      Calendars[i] = Calendar;
      
      Calendars[i].FilterBySymbol(inSymbols[i]);
    }

  return(!Res);
}

string NewsToString( const CALENDAR &Calendar, const datetime From, const datetime To )
{
  CALENDAR CalendarTmp = Calendar;
  
  CalendarTmp.FilterByTime(From, To);
  
  return(CalendarTmp.ToString(0, 10));
}

#define  HALF_INTERVAL (6 * 3600)

void OnTick()
{  
  string Str = NULL;
  
  for (int i = ArraySize(Calendars) - 1; i >= 0; i--)
  {
    const datetime From = TimeCurrent() - HALF_INTERVAL;
    const datetime To = TimeCurrent() + HALF_INTERVAL;
    
    Str += "\n\n" + inSymbols[i] + "-news (" + (string)From + " - " + (string)To + "):\n" + NewsToString(Calendars[i], From, To);
  }
  
  Comment(Str);
}

 
fxsaber #:

ありがとう、fxsaber、

結局、私のコードに問題があることがわかりました。.mq5がUnicodeとして保存されていたため、filereadが動作しなかったのです。


ありがとう、