社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

当前最好的策略年化205%,100多个策略可以在软件上查看了(python代码下载)

七年实现财富自由 • 1 月前 • 56 次点击  
原创内容第870篇,专注智能量化投资、个人成长与财富自由。
新版本aitrader主界面如下,后续可以自行创建,回测,查看,修改策略,并发布到服务端跟踪策略进展:

系统源码和策略下载地址:AI量化实验室——2025量化投资的星辰大海
import jsonimport osimport platformimport subprocessimport threadingimport wximport wx.gizmos as gizmos#from common import LogEventfrom config import DATA_DIR_QUOTES, DATA_TASKSclass StrategyPanel(wx.Panel):    def __init__(self, parent):        #from core.backtrader_extends.task import local_tasks        super(StrategyPanel, self).__init__(parent)        items = [        ]        self.init_ui()    def init_ui(self):        sizer = wx.BoxSizer(wx.VERTICAL)        # 策略列表标题        title = wx.StaticText(self, label="策略管理", style=wx.ALIGN_CENTER)        title.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))        sizer.Add(title, 0, wx.EXPAND | wx.ALL, 5)        # 创建TreeListCtrl        self.tree_list = gizmos.TreeListCtrl(self, style=        wx.TR_DEFAULT_STYLE        | wx.TR_HIDE_ROOT        | wx.TR_FULL_ROW_HIGHLIGHT        | wx.TR_ROW_LINES                                             )        # 添加列        self.tree_list.AddColumn("策略名称", width=150)               # 设置根节点        root = self.tree_list.AddRoot("所有策略")        # 绑定双击事件        self.tree_list.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.on_item_double_click)        self.tree_list.Bind(wx.EVT_TREE_SEL_CHANGED, self.on_tree_select)        # 加载策略数据        self.load_strategies()        sizer.Add(self.tree_list, 1, wx.EXPAND | wx.ALL, 5)        # 策略操作按钮        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)        self.open_btn = wx.Button(self, label="策略目录")        self.reload_btn = wx.Button(self, label="重新加载")               btn_sizer.Add(self.open_btn, 0,  wx.ALIGN_LEFT |wx.RIGHT, 5)        btn_sizer.Add(self.reload_btn, 0, wx.ALIGN_LEFT | wx.RIGHT, 5)
        sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 10)        self.SetSizer(sizer)        # 绑定事件        self.open_btn.Bind(wx.EVT_BUTTON, self.open_task_dir)        self.reload_btn.Bind(wx.EVT_BUTTON, self.reload_tasks)            def on_tree_select(self, event):        """处理树节点选择事件"""        item = event.GetItem()        print(item)        data = self.tree_list.GetItemPyData(item)        if data and 'id' in data.keys():            from config import HOST            url = f' {HOST}/strategy/{data["id"]}'            self.Parent.Parent.show_page(url,"策略详情")    def reload_tasks(self, event):        self.load_strategies()        wx.MessageBox('重新加载策略列表成功!')    def open_task_dir(self, event):        # 指定要打开的目录路径        from config import DATA_TASKS        # 检查目录是否存在        target_dir = str(DATA_TASKS.resolve())        if not os.path.exists(str(DATA_TASKS.resolve())):            wx.MessageBox(f"目录不存在: {target_dir}""错误", wx.OK | wx.ICON_ERROR)            return        # 根据不同操作系统打开目录        system = platform.system()        try:            if system == "Windows":                os.startfile(target_dir)            elif system == "Darwin":  # macOS                os.system(f'open "{target_dir}"')            else:  # Linux                os.system(f'xdg-open "{target_dir}"')        except Exception as e:            wx.MessageBox(f"无法打开目录: {str(e)}""错误", wx.OK | wx.ICON_ERROR)    def on_item_double_click(self, event):        item = event.GetItem()        item_data = self.tree_list.GetItemPyData(item)  # 修改为GetItemPyData        if item_data and item_data["type"] == "strategy":            data = item_data["data"]            file_path = DATA_TASKS.joinpath(data['name'] + '.toml')            self.open_file_with_default_editor(str(file_path.resolve()))            # wx.PostEvent(self.GetParent(), LogEvent(            #     message=f"双击策略: {strategy['name']}"            # ))    def fetch_all_strategies(self):        from common.api import fetch_strategies        try:            # 发送HTTP请求            data = fetch_strategies()            # 更新UI            wx.CallAfter(self.update_all_strategies, data)        except (json.JSONDecodeError, ValueError) as e:            wx.CallAfter(self.show_error, f"数据错误: {str(e)}")        except Exception as e:            wx.CallAfter(self.show_error, f"未知错误: {str(e)}")    def fetch_my_strategies(self):        from common.api import fetch_my_strategies        try:            # 发送HTTP请求            data = fetch_my_strategies()            # 更新UI            wx.CallAfter(self.update_ui, data)        except (json.JSONDecodeError, ValueError) as e:            wx.CallAfter(self.show_error, f"数据错误: {str(e)}")        except Exception as e:            wx.CallAfter(self.show_error, f"未知错误: {str(e)}")     def update_all_strategies(self, strategies):        count_public = 0        count_vip = 0        count_official = 0        count_points = 0        for strategy in strategies:            print(strategy)            if strategy['is_vip_only'] == True:                item = self.tree_list.AppendItem(self.vip_only_node, strategy["name"])                self.tree_list.SetItemPyData(item, strategy)  # 修改为SetItemPyData                count_vip += 1            if strategy['is_official'] == True:                item = self.tree_list.AppendItem(self.official_node, strategy["name"])                self.tree_list.SetItemPyData(item, strategy)  # 修改为SetItemPyData                count_official += 1            if strategy['access_type'] == 'points':                item = self.tree_list.AppendItem(self.points_node, strategy["name"])                self.tree_list.SetItemPyData(item, strategy)  # 修改为SetItemPyData                count_points += 1            if strategy['access_type'] == 'public':                item = self.tree_list.AppendItem(self.public_node, strategy["name"])                self.tree_list.SetItemPyData(item, strategy)  # 修改为SetItemPyData                count_public += 1        text = self.tree_list.GetItemText(self.official_node) + f'({count_official})'        self.tree_list.SetItemText(self.official_node, text)        text = self.tree_list.GetItemText(self.vip_only_node) + f'({count_vip})'        self.tree_list.SetItemText(self.vip_only_node, text)        text = self.tree_list.GetItemText(self.public_node) + f'({count_public})'        self.tree_list.SetItemText(self.public_node, text)        text = self.tree_list.GetItemText(self.points_node) + f'({count_points})'        self.tree_list.SetItemText(self.points_node, text)    def update_ui(self, strategies):        count = len(strategies)        text = self.tree_list.GetItemText(self.my_strategies) + f'({count})'        self.tree_list.SetItemText(self.my_strategies, text)        for strategy in strategies:            item = self.tree_list.AppendItem(self.my_strategies, strategy["name"])            # self.tree_list.SetItemText(item, strategy["status"], 1)            # self.tree_list.SetItemText(item, f"{strategy.get('return', 0):.2f}", 2)            # self.tree_list.SetItemText(item, str(strategy.get("position", 0)), 3)            self.tree_list.SetItemPyData(item, strategy)  # 修改为SetItemPyData    def load_strategies(self):        """加载策略到树形列表"""        self.tree_list.DeleteAllItems()        # 添加根节点(TreeListCtrl需要根节点)        root = self.tree_list.AddRoot("所有策略")        #root = self.tree_list.GetRootItem()        # 添加分类节点        self.official_node = self.tree_list.AppendItem(root, "实验室策略")        self.vip_only_node = self.tree_list.AppendItem(root, "星球会员专属策略")        self.public_node = self.tree_list.AppendItem(root, "公开策略")        self.points_node = self.tree_list.AppendItem(root, "积分查看策略")        self.my_strategies = self.tree_list.AppendItem(root, "我创建的策略")        self.local_node = self.tree_list.AppendItem(root, "本地策略")        thread = threading.Thread(target=self.fetch_my_strategies())        thread.start()        thread_all = threading.Thread(target=self.fetch_all_strategies())        thread_all.start()            # 展开所有节点        self.tree_list.ExpandAll()    def open_file_with_default_editor(self, file_path):        """用系统默认编辑器打开文件"""        if not os.path.exists(file_path):            wx.MessageBox(f"文件不存在: {file_path}""错误", wx.OK | wx.ICON_ERROR)            return        try:            if platform.system() == "Windows":                os.startfile(file_path)            elif  platform.system() == "Darwin":  # macOS                subprocess.run(["open", file_path])            else:  # Linux                subprocess.run(["xdg-open", file_path])        except Exception as e:            wx.MessageBox(f"无法打开文件: {str(e)}""错误", wx.OK | wx.ICON_ERROR)

吾日三省吾身
所谓“焦虑”,就是怕,怕未来发生你“应付”不了的事情,对不对?
这就是“焦虑”的第一性原理。
这种广泛性焦虑,是解决不完的。
你可以用尽力气,说服,折腾去所谓“解决”一件事。
然后小心翼翼,啥也不敢,战战兢兢“逃避”,能不做的事情,都不做;要做的事情格外小心,生怕触动心弦。
可以,这种所谓“意料之外”,肯定防不胜防。
根源没能解决,过了这一件,还会很快有下一件,无穷无尽,仓鼠之轮。
正确的方式,跳出循环,不了了之,当然是正确处理之道。
但根本还是提升心力。
不了了之是提升阈值,能接受更多的东西。
而提升心力,是实实在在构建能力。
财务自由能解决99%的问题。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1600+会员。

aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)

年化收益200%+的策略集 | 实时板块资金热力图 「aitrader 5.0系统代码发布」

年化19.66%,回撤12%的稳健策略|manus的启发:基于大模型多智能体的智能投研系统(python代码+数据)

年化30.24%,最大回撤19%,综合动量多因子评分策略再升级(python代码+数据)

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

stock-pandas,一个易用的talib的替代开源库。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181635
 
56 次点击