ChartSetSymbolPeriod

更改指定图表的交易品种和周期。函数不同步,例如,不等执行完成就发送命令。该命令添加到图表信息队列并且将在处理完之前所有命令后开始执行。

bool  ChartSetSymbolPeriod(
   long             chart_id,     // 图表 ID
   string           symbol,       // 交易品种名称
   ENUM_TIMEFRAMES  period        // 周期
   );

参量

chart_id

[in]  图表 ID. 0 意味着当前图表。

交易品种

[in]  图表交易品种。 NULL 值意味着当前图表交易品种(附上EA交易)。

period

[in] 图表周期(时间表)。可以是ENUM_TIMEFRAMES值之一。0意味着当前图表周期。

返回值

如果该命令已添加到图表队列则返回true,否则false。若获得额外错误信息,需要调用函数GetLastError()

注释

交易品种/周期的更改导致图表中EA交易的重新初始化。

通过相同的交易品种和时间周期调用ChartSetSymbolPeriod可以用来更新图表(类似于客户端的刷新命令)。反过来,图表的更新还会重新计算所附的指标。因此,即使没有报价您仍然可以计算图表中的指标(例如:周末)。

示例:

#define   SYMBOL    "GBPUSD"
#define   PERIOD    PERIOD_H1
 
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 取得当前图表ID,交易品种和周期
   long            chart_idChartID();
   string          symbol  = Symbol();
   ENUM_TIMEFRAMES period  = Period();
 
//--- 在日志中报告使用设置在SYMBOL和PERIOD中的值替换当前图表的交易品种和周期
   PrintFormat("Change the %s symbol and the %s period of the chart %I64u to %s %s",
               symbolTimeframeDescrioption(period), chart_idSYMBOLTimeframeDescrioption(PERIOD));
               
//--- 改变图表交易品种和周期
   ChartSetSymbolPeriod(chart_idSYMBOLPERIOD);
   /*
   结果:
   Change the EURUSD symbol and the M1 period of the chart 133246248352168440 to GBPUSD H1
   */
  }
//+------------------------------------------------------------------+
//| 返回图表周期的描述                                                  |
//+------------------------------------------------------------------+
string TimeframeDescrioption(const ENUM_TIMEFRAMES timeframe)
  {
   return(StringSubstr(EnumToString(timeframe), 7));
  }

另见

图表交易品种图表周期