量化软件下载:赫兹量化中的三维建模
交互的图形对象
我们将从三维对象开始,MQL5 语言的强大功能可以使您操作二维对象并创建复杂的图形化表现,增加几个函数,就可以在 赫兹量化 终端中使用三维图形了。
首先,我们需要在设计三维对象的基类时确定有哪些需求。
简单易用
高度持久性
独立性
交互性
简单易用
我们需要为开发人员和使用人员创建一个最小函数集,可以足够用于三维图形的主要功能。
高度持久性
三维对象在创建类实例的程序的整个生命周期中必须可以保存,它必须被保护,以免被意外或者故意删除,以及防止它的基础属性被修改。
独立性
对象必须够 "聪明" 可以自我调整以适应改变的条件(坐标系统的旋转,基本锚点的改变,等等) 对象必须正确处理到来的信息并回应发生的对应事件。
交互性
三维可视化要有可以改变三维模型观察点的功能 (坐标系统的旋转),所以我们需要创建功能来避免需要使用额外的控制面板或者类似的东西。严格说来,MQL5 语言中的图形对象已经有了用于交互的属性: 您可以选择一个对象,移动它,修改它的属性,等等。我们只需要稍微增强这样的属性来启用收集管理和交互,例如,如果我们改变了坐标的中心点,所有相关对象都必须自动地和正确地重新排布。
如果我们提供了所有这些需求,我们的三维对象就将变成一个可交互图形对象(interactive graphical object,IGO)。可交互图形对象必须与 MQL5 图形对象相关联,让我们从可交互图形对象的基类 CIGO 开始。
class CIGO { protected: bool on_event; // 事件处理标志 int m_layer; // IGO 所属的图层 //--- double SetPrice(double def,int prop_modifier=0); public: string m_name; // IGO 对象的名称 double m_price; // IGO 对象的基本锚点[价格] double m_angle; // IGO 投射角度 [度数] CIGO(); ~CIGO(); //--- virtual // 方法: 创建 IGO void Create(string name) {on_event=true;} virtual // 方法: 重绘 IGO void Redraw() {ChartRedraw();} virtual // OnChartEvent 处理方法 bool OnEvent(const int id, // 事件 ID const long &lparam, // long 类型(长整数型)的事件参数 const double &dparam, // double 类型(双精度浮点数型)的事件参数 const string &sparam, // string 类型(字符串型)的事件参数 int iparamemr=0, // IGO 事件标识符 double dparametr=0.0);// IGO double 类型的事件参数 };
基类包含了最少的栏位和方法,可以在子类中重载或者补充,我们将只详细探讨两个类方法: 虚拟方法 OnEvent() 用于处理 OnChartEvent 以及用于设置基础锚点的 SetPrice()。交互图形对象的主要原则就是在这些类中实现的。
方法: 处理到来的 OnEvent 事件。
该方法处理当操作图表时来自客户终端的事件,此方法要回应四个标准事件: 删除图形对象, 修改图表大小或者属性,移动图形对象或者点击它,让我们详细讨论其中的每个事件。