AI量化表达式编辑器

今天实现了因子编辑器,这是咱们AI量化系统最重要的部分,很多同学就是不知道因子如何计算,以致于不理解策略怎么写。

这里我做了一个表达式编辑器,基本流程走通了,——还没有完全串起来。

图片

这里代码如下(代码已经更新至星球,大家可以前往下载):

from gui.panels.dlg_editor import DlgEditor
import wx
from engine.config import IMAGE_DIR

class EditorUtils:
    def __init__(self):
        self.dlg = DlgEditor(None)

        self.image_list = wx.ImageList(16, 16)
        self.image_list = wx.ImageList(16, 16)
        lab = IMAGE_DIR.joinpath('root.png').resolve()
        folder = IMAGE_DIR.joinpath('folder.png').resolve()
        ind = IMAGE_DIR.joinpath('ind.png').resolve()
        self.root_icon = self.image_list.Add(wx.Image(str(lab),
                                                        wx.BITMAP_TYPE_PNG).Scale(16, 16).ConvertToBitmap())
        self.folder_icon =self.image_list.Add(wx.Image(str(folder),
                                                     wx.BITMAP_TYPE_PNG).Scale(16, 16).ConvertToBitmap())
        self.ind_icon =self.image_list.Add(wx.Image(str(ind),
                                                       wx.BITMAP_TYPE_PNG).Scale(16, 16).ConvertToBitmap())
        self.dlg.tree_rules.SetImageList(self.image_list)

        self._init_tree_inds()

        self.dlg.tree_rules.Bind(wx.EVT_TREE_SEL_CHANGED, self.on_sel_changed)
        self.dlg.tree_rules.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.on_double_clicked)


    def show_model(self):
        return self.dlg.ShowModal()

    def on_double_clicked(self, e):
        item = e.GetItem()
        data = self.dlg.tree_rules.GetItemData(item)
        if data:
            if 'expr' in data.keys():
                self.dlg.text_rules.SetInsertionPoint(0)

                self.dlg.text_rules.AppendText(data['expr'])
                #self.dlg.label_tips.SetLabelText(data['help_text'])

    def on_sel_changed(self, e):
        item = e.GetItem()
        data = self.dlg.tree_rules.GetItemData(item)
        if data:
            if 'help_text' in data.keys():
                self.dlg.label_tips.SetLabelText(data['help_text'])


    def _init_tree_inds(self):
        data = {
            '价量指标': {'open': {'help_text': '开盘价','expr':'open'},
                     'high': {}, 'low': {}, 'close': {}, 'volume': {}
                     },
            '时间序列函数': {'shift': {}, 'rsrs': {'help_text': '光大RSRS指标','expr':'rsrs(high,low,18)'}, 'roc': {}, 'slope': {}}
        }

        tree = self.dlg.tree_rules
        root = tree.AddRoot("指标与函数集合")
        self.dlg.tree_rules.SetItemImage(root, self.root_icon, wx.TreeItemIcon_Normal)
        for text, category_data in data.items():
            category_item = tree.AppendItem(root, text)
            self.dlg.tree_rules.SetItemImage(category_item, self.folder_icon, wx.TreeItemIcon_Normal)
            for ind, item_data in category_data.items():
                node_item = tree.AppendItem(category_item, ind)
                self.dlg.tree_rules.SetItemImage(node_item, self.ind_icon, wx.TreeItemIcon_Normal)

                tree.SetItemData(node_item, item_data)
        tree.ExpandAll()

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104015
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注