CustomSymbolSetInteger

カスタム銘柄の整数型プロパティ値を設定します。

bool  CustomSymbolSetInteger(
  const string              symbol_name,      // 銘柄名
  ENUM_SYMBOL_INFO_INTEGER property_id,     // プロパティID
  long                     property_value   // プロパティ値
  );

パラメータ

symbol_name

[in]  カスタム銘柄名

property_id

[in]  銘柄プロパティID値はENUM_SYMBOL_INFO_INTEGER列挙体のうちの一つです。

property_value

[in]  プロパティ値を含むlong型の変数

戻り値

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

注意事項

これらのプロパティのいずれかが銘柄仕様で変更されている場合、カスタム銘柄の分足及びティックの履歴は完全に削除されます。

  • SYMBOL_CHART_MODE – バー構築のための価格タイプ(BidまたはLast)
  • SYMBOL_DIGITS – 価格表示に使われる小数点以下の桁数

カスタム銘柄履歴を削除した後、端末は更新されたプロパティを使用して新たに履歴作成を試みます。カスタム銘柄のプロパティが手動で変更された場合も同様です。

 

例:

//+------------------------------------------------------------------+
//|                                       CustomSymbolSetInteger.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()       // カスタム銘柄の基となる銘柄の名前
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- カスタム銘柄を作成するときにエラーコードを取得する
  int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_PATH, CUSTOM_SYMBOL_ORIGIN);
 
//--- エラーコードが0(銘柄の作成に成功)でも5304(銘柄がすでに作成されている)でもない場合は、終了する
  if(create!=0 && create!=5304)
    return;
     
//--- カスタム銘柄の基となる銘柄のプロパティを取得して操作ログに出力する
//--- (取引モード、ストップ注文のインストールレベル、取引操作の凍結距離)
  ENUM_SYMBOL_TRADE_EXECUTION origin_exe_mode = (ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGIN, SYMBOL_TRADE_EXEMODE);
  int origin_stops_level = (int)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGIN, SYMBOL_TRADE_STOPS_LEVEL);
  int origin_freeze_level= (int)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGIN, SYMBOL_TRADE_FREEZE_LEVEL);
 
  PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
              "  Deal execution mode: %s\n  Stops Level: %d\n  Freeze Level: %d",
              CUSTOM_SYMBOL_ORIGIN, CUSTOM_SYMBOL_NAME,
              StringSubstr(EnumToString(origin_exe_mode), 23), origin_stops_level, origin_freeze_level);
 
//--- カスタム銘柄プロパティのその他の値を設定する
  ResetLastError();
  bool res=true;
  res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_EXEMODE, SYMBOL_TRADE_EXECUTION_MARKET);
  res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_STOPS_LEVEL, 10);
  res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_FREEZE_LEVEL, 3);
 
//--- いずれかのプロパティの設定時にエラーが発生した場合は、操作ログに適切なメッセージを表示する
  if(!res)
    Print("CustomSymbolSetInteger() failed. Error ", GetLastError());
 
//--- 変更されたカスタム銘柄のプロパティを取得して操作ログに出力する
//--- (取引モード、ストップ注文のインストールレベル、取引操作の凍結距離)
  ENUM_SYMBOL_TRADE_EXECUTION custom_exe_mode = (ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_EXEMODE);
  int custom_stops_level = (int)SymbolInfoInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_STOPS_LEVEL);
  int custom_freeze_level= (int)SymbolInfoInteger(CUSTOM_SYMBOL_NAME, SYMBOL_TRADE_FREEZE_LEVEL);
 
  PrintFormat("Custom symbol '%s' based on '%s':\n"+
              "  Deal execution mode: %s\n  Stops Level: %d\n  Freeze Level: %d",
              CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_ORIGIN,
              StringSubstr(EnumToString(custom_exe_mode), 23), custom_stops_level, custom_freeze_level);
 
//--- チャートのコメントにスクリプト終了キーに関するヒントを表示する
  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("");
  /*
  結果:
  The 'EURUSD' symbol from which the custom 'EURUSD.C' was created:
    Deal execution mode: INSTANT
    Stops Level: 0
    Freeze Level: 0
  Custom symbol 'EURUSD.C' based on 'EURUSD':
    Deal execution mode: MARKET
    Stops Level: 10
    Freeze Level: 3
  */
 }
//+------------------------------------------------------------------+
//| カスタム銘柄ルを作成し、エラーコードを返す                                    |
//+------------------------------------------------------------------+
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);
 }

 

参照

SymbolInfoInteger