量化交易软件:赫兹股票期货量化软件概念上的飞跃
在该规划过程中,还有最后一个阶段。 虽然这一部分对于现代计算机来说并不那么尖锐,但它仍然需要加以考虑:处理时间的优化。 该问题与处理器必须执行的操作数量有关,而非与处理信息所需的时间有关。 拟议中的浮动窗口系统包含四个对象,它们应该能够响应您的动作从而四处移动。 相应地,在观察窗口中的任何信息都将会受到窗口自身修改的影响。 至少图表交易会增加对象的数目。 虽然没有相应的计算成本,但代码变得令人不快,似乎优化得很差劲。 我们可以简单地添加一个控制系统,如此来解决问题。 但有一个更优雅的建议。 虽然它看起来更耗时、更费力,但实际上减少了所需维护和操控的对象数量。
实现
首先,我们把浮动窗口的创建过程分为几个步骤,以便支持代码重用。 接下来,我们将在 C_ChartFloating 对象类中创建两个新函数:
//+------------------------------------------------------------------+ bool StageLocal01(string sz0, ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT, int Scale = -1) { m_LimitX = (int)ChartGetInteger(Terminal.Get_ID(), CHART_WIDTH_IN_PIXELS); m_LimitY = (int)ChartGetInteger(Terminal.Get_ID(), CHART_HEIGHT_IN_PIXELS); if (m_MaxCounter >= def_MaxFloating) return false; CreateBarTitle(); CreateCaption(sz0); CreateBtnMaxMin(); CreateRegion(TimeFrame, Scale); m_Win[m_MaxCounter].handle = ObjectGetInteger(Terminal.Get_ID(), m_Win[m_MaxCounter].szRegionChart, OBJPROP_CHART_ID); return true; } //+------------------------------------------------------------------+ void StageLocal02(int x, int y, int w, int h) { y = (y < 0 ? m_MaxCounter * def_SizeBarCaption : y); m_Win[m_MaxCounter].PosX = -1; m_Win[m_MaxCounter].PosY = -1; m_Win[m_MaxCounter].PosX_Minimized = m_Win[m_MaxCounter].PosX_Maximized = x; m_Win[m_MaxCounter].PosY_Minimized = m_Win[m_MaxCounter].PosY_Maximized = y; SetDimension(w, h, true, m_MaxCounter); SetPosition(x, y, m_MaxCounter); ChartRedraw(m_Win[m_MaxCounter].handle); m_MaxCounter++; } //+------------------------------------------------------------------+
添加浮动窗口的新代码如下所示:
bool AddIndicator(string sz0, int x = 0, int y = -1, int w = 300, int h = 200, ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT, int Scale = -1) { if (!StageLocal01(sz0, TimeFrame, Scale)) return false; ChartApplyTemplate(m_Win[m_MaxCounter].handle, sz0 + ".tpl"); m_Win[m_MaxCounter].szVLine = (string)ObjectsTotal(Terminal.Get_ID(), -1, -1) + (string)MathRand(); ObjectCreate(m_Win[m_MaxCounter].handle, m_Win[m_MaxCounter].szVLine, OBJ_VLINE, 0, 0, 0); ObjectSetInteger(m_Win[m_MaxCounter].handle, m_Win[m_MaxCounter].szVLine, OBJPROP_COLOR, clrBlack); StageLocal02(x, y, w, h); return true; }
这不会影响已组装完毕的系统,但提供了更佳功能。 注意高亮显示的行:现在我们将创建一个函数来使用我们的 IDE。 开头如下图所示:
bool Add_RAD_IDE(string sz0, int x, int y, int w, int h) { if (!StageLocal01(sz0, PERIOD_CURRENT, -1)) return false; StageLocal02(x, y, w, h); return true;

