CustomSymbolSetSessionQuote

指定された銘柄と曜日の指定された相場セッションの開始時刻と終了時刻を設定します。

bool  CustomSymbolSetSessionQuote(
  const string      symbol_name,         // 銘柄名
  ENUM_DAY_OF_WEEK  day_of_week,         // 曜日
  uint              session_index,      // セッションのインデックス
  datetime         from,                // セッションの開始時間
  datetime         to                  // セッションの終了時間
  );

パラメータ

symbol_name

[in]  カスタム銘柄名

ENUM_DAY_OF_WEEK

[in] ENUM_DAY_OF_WEEK列挙からの値である曜日

uint

[in]  開始時刻と終了時刻を設定するセッションのインデックス。セッションインデックスは0から始まります。

from

[in]  セッション開始時間(00:00からの秒数)で、変数のデータ値は無視されます。

to

[in]  セッション終了時間(00:00からの秒数)で、変数のデータ値は無視されます。

戻り値

成功の場合はtrue、それ以外の場合はfalse。エラー情報を取得するためにはGetLastError()関数を呼び出します。

注意事項

指定されたsession_indexを持つセッションが既存する場合、この関数は単にセッションの開始と終了を編集します。

セッションの開始パラメータと終了パラメータにゼロが渡された場合(from=0to=0)、適切なsession_indexを持つセッションが削除され、セッションインデックスが下向きにシフトされます。

セッションは順番にしか追加できません。言い換えればsession_index=1は、インデックスが0であるセッションが既存する場合にのみ追加できます。このルールが守られていないと、新しいセッションは作成されず、関数自体は「false」を返します。

 

例:

//+------------------------------------------------------------------+
//|                                  CustomSymbolSetSessionQuote.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link     "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"           // カスタム銘柄名
#define   CUSTOM_SYMBOL_PATH     "Forex"                 // 銘柄が作成されるグループの名前
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()         // カスタム銘柄の基となる銘柄の名前
 
#define   SESSION_0_FROM         D'1970.01.01 00:15:00' // session 0 start time
#define   SESSION_0_TO           D'1970.01.01 11:59:00' // session 0 end time
#define   SESSION_1_FROM         D'1970.01.01 12:15:00' // session 1 start time
#define   SESSION_1_TO           D'1970.01.01 23:59:00' // session 1 end time
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- カスタム銘柄を作成するときにエラーコードを取得する
  int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_PATH, CUSTOM_SYMBOL_ORIGIN);
 
//--- エラーコードが0(銘柄の作成に成功)でも5304(銘柄がすでに作成されている)でもない場合は、終了する
  if(create!=0 && create!=5304)
    return;
   
//--- 基となる銘柄とセッションインデックスを含むヘッダーを出力し
//---月曜日から金曜日までの曜日ごとのループで、操作ログ内の各相場セッションの開始時刻と終了時刻を出力する
  for(int session=0; session<2; session++)
    {
    PrintFormat("Quote session %d of '%s' symbol from which the custom '%s' was created", session, CUSTOM_SYMBOL_ORIGIN, CUSTOM_SYMBOL_NAME);
    for(int day_of_week=MONDAY; day_of_week<SATURDAY; day_of_week++)
        SymbolInfoSessionQuotePrint(CUSTOM_SYMBOL_ORIGIN, (ENUM_DAY_OF_WEEK)day_of_week, session);    
    }
   
//--- 2つのセッションによるループ
  bool res=true;
  for(int session=0; session<2; session++)
    {
    datetime from = SESSION_0_FROM;
    datetime to   = SESSION_0_TO;
    if(session>0)
       {
        from = SESSION_1_FROM;
        to   = SESSION_1_TO;
       }
    //--- 各曜日のカスタム銘柄の相場セッション時間を設定する
    ResetLastError();
    for(int day_of_week=MONDAY; day_of_week<SATURDAY; day_of_week++)
        res &=CustomSymbolSetSessionQuote(CUSTOM_SYMBOL_NAME, (ENUM_DAY_OF_WEEK)day_of_week, session, from, to);
    }
 
//--- いずれかのセッションの設定時にエラーが発生した場合は、銘柄に適切なメッセージを表示する
  if(!res)
    Print("CustomSymbolSetSessionQuote() failed. Error ", GetLastError());
 
//--- カスタム銘柄とセッションインデックスを含むヘッダーを出力し
//---月曜日から金曜日までの曜日ごとのループで、操作ログ内の各相場セッションの開始時刻と終了時刻を出力する
  for(int session=0; session<2; session++)
    {
    PrintFormat("Quote session %d of custom symbol '%s' based on '%s'", session, CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_ORIGIN);
    for(int day_of_week=MONDAY; day_of_week<SATURDAY; day_of_week++)
        SymbolInfoSessionQuotePrint(CUSTOM_SYMBOL_NAME, (ENUM_DAY_OF_WEEK)day_of_week, session);    
    }
   
//--- チャートのコメントにスクリプト終了キーに関するヒントを表示する
  Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit", CUSTOM_SYMBOL_NAME));
//--- EscキーまたはDelキーが押されるまで待機して無限ループを終了する
  while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
    {
    Sleep(16);
    //--- Delキーを押すと、作成したカスタム銘柄が削除される
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
       {
        if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
          PrintFormat("Custom symbol '%s' deleted successfully", CUSTOM_SYMBOL_NAME);
        break;
       }
    }
//--- 終了する前にチャートをクリアする
  Comment("");
  /*
  結果:
  Quote session 0 of 'EURUSD' symbol from which the custom 'EURUSD.C' was created
  - Monday     00:15 - 23:55
  - Tuesday   00:15 - 23:55
  - Wednesday 00:15 - 23:55
  - Thursday   00:15 - 23:55
  - Friday     00:15 - 23:55
  Quote session 1 of 'EURUSD' symbol from which the custom 'EURUSD.C' was created
  - Monday     Session not set
  - Tuesday   Session not set
  - Wednesday Session not set
  - Thursday   Session not set
  - Friday     Session not set
  Quote session 0 of custom symbol 'EURUSD.C' based on 'EURUSD'
  - Monday     00:15 - 11:59
  - Tuesday   00:15 - 11:59
  - Wednesday 00:15 - 11:59
  - Thursday   00:15 - 11:59
  - Friday     00:15 - 11:59
  Quote session 1 of custom symbol 'EURUSD.C' based on 'EURUSD'
  - Monday     12:15 - 23:59
  - Tuesday   12:15 - 23:59
  - Wednesday 12:15 - 23:59
  - Thursday   12:15 - 23:59
  - Friday     12:15 - 23:59
  */
 }
//+------------------------------------------------------------------+
//| カスタム銘柄ルを作成し、エラーコードを返す                                    |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_name, const string symbol_path, const string symbol_origin=NULL)
 {
//--- カスタム銘柄の基となる銘柄の名前をする
  string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
 
//--- カスタム銘柄の作成に失敗し、エラー5304ではない場合は、操作ログに報告する
  ResetLastError();
  int error=0;
  if(!CustomSymbolCreate(symbol_name, symbol_path, origin))
    {
    error=GetLastError();
    if(error!=5304)
        PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d", symbol_name, symbol_path, origin, error);
    }
//--- 成功
  return(error);
 }
//+------------------------------------------------------------------+
//| カスタム銘柄を削除する                                                 |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
 {
//--- 気配値表示ウィンドウから銘柄を非表示にする
  ResetLastError();
  if(!SymbolSelect(symbol_name, false))
    {
    PrintFormat("SymbolSelect(%s, false) failed. Error %d", GetLastError());
    return(false);
    }
     
//--- カスタム銘柄の削除に失敗した場合は、操作ログにこれを報告してfalseを返す
  ResetLastError();
  if(!CustomSymbolDelete(symbol_name))
    {
    PrintFormat("CustomSymbolDelete(%s) failed. Error %d", symbol_name, GetLastError());
    return(false);
    }
//--- 成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 指定されたシンボルと曜日の指定された相場セッションの                            |
//| 開始時刻と終了時刻を操作ログに送信する                                   |
//+------------------------------------------------------------------+
void SymbolInfoSessionQuotePrint(const string symbol, const ENUM_DAY_OF_WEEK day_of_week, const uint session_index)
 {
//--- 相場セッションの開始と終了を記録する変数を宣言する
  datetime date_from; // session start time
  datetime date_to;   // session end time
   
//--- 列挙定数から曜日名を作成する
  string week_day=EnumToString(day_of_week);
  if(week_day.Lower())
    week_day.SetChar(0, ushort(week_day.GetChar(0)-32));
 
//--- 銘柄と曜日別に相場セッションからデータを取得する
  if(!SymbolInfoSessionQuote(symbol, day_of_week, session_index, date_from, date_to))
    {
    int err=GetLastError();
    string message=(err==4307 ? StringFormat("- %-10s Session not set", week_day) :
                    StringFormat("SymbolInfoSessionQuote(%s, %s, session %d) failed. Error %d", symbol, week_day, session_index, GetLastError()));
    Print(message);
    return;
    }
     
//--- 指定された相場セッションのデータを操作ログに送信する
  PrintFormat("- %-10s %s - %s", week_day, TimeToString(date_from, TIME_MINUTES), TimeToString(date_to, TIME_MINUTES));
 }

 

参照

SymbolInfoSessionQuoteSymbol infoTimeToStructDate structure