今天我们来聊聊蜡烛图的大小指标,这个指标能帮助我们更好地理解市场的波动。蜡烛图的大小是通过以下公式计算得出的:"被减数"减去"减数"。这里的"被减数"和"减数"可以是四个值中的任何一个:开盘价、最高价、最低价或收盘价。
在输入参数中,我们可以限制显示的蜡烛图数量 (InpNumberOfBars),即使新的蜡烛图开盘,这个数量也不会改变。
蜡烛图与图形对象的同步
图形对象管理
图形对象的名称保存在m_arr_names[]数组中,数组的大小等于InpNumberOfBars的输入值。为什么我们使用数组而不是简单的字符串变量呢?这其实是为了将来做准备。
形成对象名称
与'index'蜡烛图对应的对象名称是通过以下公式生成的:
name[index] = m_prefix + ("high_" 或 "low_") + TimeToString(time[index])
需要删除所有对象的情况
- 从图表中移除指示器;
- 关闭终端(如果指示器在图表上运行);
- 加载模板,如果指示器在此图表上运行;
- 关闭正在运行指示器的图表;
- 更改配置文件,如果指示器在上一个配置文件的图表上运行;
- 更改符号和/或图表的时间框架;
- 更改指示器输入。
因此,我们需要完全删除创建的图形对象:
- 在 OnDeinit() 中进行删除;
- 在 OnInit() 中进行(以防有未删除的孤立对象);
- 在 OnCalculate() 中,当 prev_calculated==0 时进行处理。
我们还会清空 m_arr_names[] 数组:
- 在 OnCalculate() 中,当 prev_calculated==0 或 prev_calculated!=rates_total 时清空。
保持图形对象数量恒定:
当新的蜡烛图出现时,prev_calculated!=rates_total 条件会触发。这种情况下,我们会删除所有对象,并清空m_arr_names[]数组。