nxwang 发表于 2023-11-2 08:45:02

期货量化:赫兹量化中研究多币种的交易信号3--引入搜索算法

打开项目,找到 CProgram 基类,并在其私密部分中添加两个方法。 该方法将负责加载和保存品种模板。   bool            SaveSymbolSet(string file_name);   bool            LoadSymbolSet(string file_name);以下是这些方法如何被实现的。 //+------------------------------------------------------------------+//| Save template to a file                                          |//+------------------------------------------------------------------+bool CProgram::SaveSymbolSet(string file_name){   if(file_name=="")   {      MessageBox("Select the template name to record","Signal Monitor");      return(false);   }   int h=FileOpen("Signal Monitor\\"+file_name+".bin",FILE_WRITE|FILE_BIN);   if(h==INVALID_HANDLE)   {      MessageBox("Failed to create a configuration file","Signal Monitor");      return(false);   }   else      MessageBox("The "+file_name+" configuration has been successfully saved","Signal Monitor");//--- Save the selection of timeframes and patterns   for(int i=0; i<m_all_symbols; i++)      m_save.tf=m_checkbox.IsPressed();//---   FileWriteStruct(h,m_save);   FileClose(h);//---   return(true);}//+------------------------------------------------------------------+//| Load data to a panel                                             |//+------------------------------------------------------------------+bool CProgram::LoadSymbolSet(string file_name){   if(file_name=="")   {      MessageBox("Select the template name to load","Signal Monitor");      return(false);   }   int h=FileOpen("Signal Monitor\\"+file_name+".bin",FILE_READ|FILE_BIN);   if(h==INVALID_HANDLE)   {      MessageBox("Configuration "+file_name+" not found","Signal Monitor");      return(false);   }   ZeroMemory(m_save);   FileReadStruct(h,m_save);//--- Loading timeframes   for(int i=0; i<m_all_symbols; i++)   {      m_checkbox.IsPressed(m_save.tf);      m_checkbox.Update(true);   }//---   FileClose(h);//---   return(true);}不过,若尝试立即编译项目,则将触发与 m_save 变量有关的错误。 该结构含有一个名为 tf 的布尔类型参数。 它可记住用户所选的文件。 故需在应用类中创建此结构,并将其实例添加到基类。//+------------------------------------------------------------------+//| Class for creating the application                               |//+------------------------------------------------------------------+struct SAVE{   bool   tf;};class CProgram : public CWndEvents{...      SAVE            m_save;转到 OnEvent(),进入与按钮点击事件相关的部分,并在“第一步”条件中添加以下代码:         //--- Save the template         if(lparam==m_save_button.Id())         {            SaveSymbolSet(m_text_edit.GetValue());         }         //--- Load the template         if(lparam==m_load_button.Id())         {            LoadSymbolSet(m_text_edit.GetValue());         }另外,实现上述按钮的热键用法。 以相同的方法,为按键事件添加检查,并针对所用键添加代码。//--- Key press   if(id==CHARTEVENT_KEYDOWN)   {      if(m_current_step==1)      {         short sym=TranslateKey((int)lparam);         //--- if the entered character is successfully converted to Unicode         if(sym>0)         {            if(ShortToString(sym)=="l" || ShortToString(sym)=="д")               LoadSymbolSet(m_text_edit.GetValue());            if(ShortToString(sym)=="s" || ShortToString(sym)=="ы")               SaveSymbolSet(m_text_edit.GetValue());         }      }   }编译项目。 若成功编译将产生以下结果。

添加图片注释,不超过 140 字(可选)
图例 2 保存和加载用户模板添加和编辑交易信号现在,转到应用程序的主要部分,该部分负责创建和编辑交易信号,以及进一步在监视器中跟踪它们。 信号创建和编辑的摸样如此这般。

添加图片注释,不超过 140 字(可选)
图例 3 信号创建和编辑窗口。在当前阶段,该窗口显示各种控制参数的一组 GUI 元素。 然而,这些设置尚未在任何地方用到。 首先在界面上添加两个按钮。 它们是添加/保存交易信号。 另一个是取消创建/编辑按钮。 打开 Program.mqh ,并将这两个按钮的实现方法添加到基类中:bool            CreateButton3(CButton &button,string text,const int x_gap,const int y_gap);两个 CButton 按钮的实例:   CButton         m_new_signal;   CButton         m_cancel_button;
页: [1]
查看完整版本: 期货量化:赫兹量化中研究多币种的交易信号3--引入搜索算法