打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
wxpython搭建AI量化平台框架(代码已提交)

原创文章第283篇,专注“个人成长与财富自由、世界运作的逻辑与投资"。

今天把gui的架子重新搭建了一个,还是确定使用xwpython。前面的文章有做过比较,就不细说了。

大致的框架如下:

从选股到模型到回测,到每日选股,到因子挖掘,都实现界面可操作,方便一些没有代码基础的同学。

功能没开放完成,周末赶赶进度,但大家可以先下载去看。

别上上述界面还不完整,代码量不小的。

import pandas as pd
import wx
import wx.adv
import wx.grid
from gui.widgets.datatable import DataTable
from gui.logic import g_logic

from .panel_backtest import PanelBacktest
from .panel_pickstock import PanelPickStock


class PanelAnalysis(wx.Panel):
def __init__(self, parent):
super(PanelAnalysis, self).__init__(parent, id=wx.ID_ANY)
self._init_ui()
self._init_data()

def _init_data(self):
return
df = Logic().load_data_by_day('20230717')
table = DataTable(df)
self.grid_datas.SetTable(table, takeOwnership=True)
self.grid_datas.AutoSizeColumns()

def _init_ui(self):
# 左右结构
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.SetSizer(self.sizer)

self._init_left_panel()
self._init_right_panel()

g_logic.reg_pickstock_panel(self.panel_pickstock)
g_logic.reg_backtest_panel(self.panel_backtest)
g_logic.init_data()


def _init_left_panel(self):
self.note_left = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
self.sizer.Add(self.note_left, 1, wx.ALL | wx.EXPAND, 10)

self.panel_pickstock = PanelPickStock(self.note_left, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)
self.note_left.AddPage(self.panel_pickstock, "择投设置", True)
self.panel_model = wx.Panel(self.note_left, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)
self.note_left.AddPage(self.panel_model, "交易模型", False)
self.panel_picktime = wx.Panel(self.note_left, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)
self.note_left.AddPage(self.panel_picktime, "大盘择时", False)

def _init_right_panel(self):
self.note_right = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
# self.note_right.SetBackgroundColour(wx.RED)
self.sizer.Add(self.note_right, 3, wx.ALL | wx.EXPAND, 10)

self.panel_backtest = PanelBacktest(self.note_right, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)

self.note_right.AddPage(self.panel_backtest, "策略回测", True)

self.panel_pick_day = wx.Panel(self.note_right, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)
self.note_right.AddPage(self.panel_pick_day, "每日选股", False)

self.panel_rank = wx.Panel(self.note_right, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize,
wx.TAB_TRAVERSAL)
self.note_right.AddPage(self.panel_rank, "排名分析", False)



def _init_pickstock(self):
vbox = wx.BoxSizer(wx.VERTICAL)
self.panel_pick_day.SetSizer(vbox)

self.label_text = wx.StaticText(self.panel_pick_day, wx.ID_ANY, u"根据以上模型的选股设置, 在历史上任何一天选股。", wx.DefaultPosition,
wx.DefaultSize, 0)
self.label_text.Wrap(-1)

vbox.Add(self.label_text, 0, wx.ALL, 5)

row_sizer = wx.BoxSizer(wx.HORIZONTAL)

self.label_time = wx.StaticText(self.panel_pick_day, wx.ID_ANY, u"选股日期", wx.DefaultPosition, wx.DefaultSize, 0)
self.label_time.Wrap(-1)

row_sizer.Add(self.label_time, 0, wx.ALL, 5)

self.date_pick = wx.adv.DatePickerCtrl(self.panel_pick_day, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition,
wx.DefaultSize, wx.adv.DP_DEFAULT)
row_sizer.Add(self.date_pick, 0, wx.ALL, 5)

vbox.Add(row_sizer, 1, wx.EXPAND, 5)

self.btn_pickstock = wx.Button(self.panel_pick_day, wx.ID_ANY, u"开始选股", wx.DefaultPosition, wx.DefaultSize, 0)
vbox.Add(self.btn_pickstock, 0, wx.ALL, 5)

# Grid
self.grid_datas = wx.grid.Grid(self.panel_pick_day, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)

self.grid_datas.CreateGrid(5, 5)
self.grid_datas.EnableEditing(False)
self.grid_datas.EnableGridLines(True)
self.grid_datas.EnableDragGridSize(False)
self.grid_datas.SetMargins(0, 0)

# Columns
self.grid_datas.EnableDragColMove(False)
self.grid_datas.EnableDragColSize(True)
self.grid_datas.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)

# Rows
self.grid_datas.EnableDragRowSize(True)
self.grid_datas.SetRowLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)

# Label Appearance

# Cell Defaults
self.grid_datas.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_TOP)
vbox.Add(self.grid_datas, 8, wx.ALL | wx.EXPAND, 5)

# Virtual event handlers, override them in your derived class
def on_btn_pickstock_clicked(self, event):
wx.MessageBox('每日选股!')
event.Skip()

对于gui开发感兴趣,以及对于AI量化系统如何运作的同学,可以先下载看下来了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
wxPython定时器wx.Timer简单应用实例
Python实例讲解——wxPython的基本控件实现
wxPython事件
编写wxPython程序代码风格的说明
GUI programming with wxPython 之 XRC
wxPython:一曲MFC的挽歌,理想主义的绝唱
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服