欢迎光临散文网 会员登陆 & 注册

期货量化软件:赫兹量化中为用户开发定义

2023-08-21 17:17 作者:大牛啊呢  | 我要投稿

计划

通常,当我们开始实现一个新系统时,我们并不真正知道我们如何对其进行改进;故此,我们应该始终启动一个新项目,并着眼于未来进行改进。 这对那些刚开始的人来说非常重要:持续地规划一些事情,想象未来的扩展和改进。

核心代码根本没有改变,这在某种意义上是意料之中的。 但是对象类的代码已经发生了巨大的变化。 随着代码重用性变得越加重要(这是面向对象编程的基本思想之一:始终重用,仅在必要时创建新代码),我们进行了这些修改,以实现新功能,并能够以更灵活的方式创建新的改进。 如此,我们来看看新的对象类。 我会高亮示意这些变化,令其更容易理解。

我们从类的私密变量新定义开始。

struct st {        string  szObjName,                szSymbol;        int     width; }m_Info[def_MaxTemplates]; int             m_IdSubWin,                m_Counter,                m_CPre,                m_Aggregate; long            m_Id,                m_handle; ENUM_TIMEFRAMES m_Period;

请注意,所变量数量显著增加。 这是因为我们需要更多数据来正确管理新功能。 现在我们的变量系统有了一个结构。 这种结构非常适合将相关变量组合在一起 — 它们确保我们在处理数据时能够快速、轻松地访问。

void SetBase(const string szSymbol, int iScale, int iSize) { #define macro_SetInteger(A, B) ObjectSetInteger(m_Id, m_Info[m_Counter].szObjName, A, B)        if (m_IdSubWin < 0)        {                m_Id = ChartID();                m_IdSubWin = (int)ChartGetInteger(m_Id, CHART_WINDOWS_TOTAL) - 1;                m_Aggregate = 0;        }        m_Info[m_Counter].szObjName = __FILE__ + (string) MathRand() + (string) ObjectsTotal(m_Id, -1, OBJ_CHART);        ObjectCreate(m_Id, m_Info[m_Counter].szObjName, OBJ_CHART, m_IdSubWin, 0, 0);        ObjectSetString(m_Id, m_Info[m_Counter].szObjName, OBJPROP_SYMBOL, (m_Info[m_Counter].szSymbol = szSymbol)); // ....        macro_SetInteger(OBJPROP_PERIOD, m_Period);        m_handle = ObjectGetInteger(m_Id, m_Info[m_Counter].szObjName, OBJPROP_CHART_ID);        m_Aggregate += iSize;        m_Info[m_Counter].width = iSize;        m_CPre += (iSize > 0 ? 1 : 0);        m_Counter++; #undef macro_SetInteger };

我们很快将看到的主要变化是,我们正在使用一个结构来存储资产名称、对象名称及其宽度。 现在我们还可以指定指标在子窗口中的宽度。 我们来做些注释,方便在类的其它部分使用它们。 下面是变化最大的函数。


期货量化软件:赫兹量化中为用户开发定义的评论 (共 条)

分享到微博请遵守国家法律