量化交易backtrader实践(五)_策略综合篇(3)_经典策略复盘

01_经典策略复盘

在某款股票软件手机版App上,有一项“复盘”的功能,这个功能很强大,它能把这支股票近1年的走势,用设置好的六个策略去回测,得到每个策略的近一年的收益率,并做了从最好到最差的排序。这就能给使用者一个参考,当前这支股票近期采用哪一个经典策略是最好的。

(注意,个股期间股价不属于六大经典策略。)

然而,这个复盘只能用于股票,对于基金(ETF等)无法使用,其实相同的在ETF上的回测逻辑和步骤都是一样的,也不知道为什么好多年了却一直没有做进去。

所以这一章,我们就把类似复盘的功能在backtrader的程序中去实现,让它也能应用于ETF。

02_利用评价查看

其实在前面的文章中,我们已经做了一部分相关的内容,比如多支股票 X 多个策略的回测,在这里我们是可以勾选几支股票以及勾选上经典策略,然后进行回测统计比较,最后把评价记录文件.csv打开来,手动进行排序就可以了。

有统计数据,对这些数据进行分析就可以发现很多的问题点和思考点,比如经典布林策略从胜率上看一般都比较高但是从总盈利上看却往往是最低的,这个在之间的文章中已经讨论过,经典布林带适合于振荡行情,单边向上或单边向下都不适应,并且布林带是没有止损的,它不是一个完整的闭环策略。

但是现在我们不是讨论这个的时候,当前的主要任务是把这些需要进行手工后处理的东西,在我们的程序上稍微变换一下,以文章上面某股票手机端App的类似形式直接显示出来。

03_复盘功能的实现

A_界面UI

于是我们先简单构思了一下,打算通过ComboBox来选择股票/ETF,然后先测试点击按钮让我们需要的数据显示出来,见下图红框。

B_代码复用

既然之前已经有了多个股票X多个策略回测评价的函数,这里的复盘功能反而更简单一些,只有多个策略的循环,股票是需要选择一个就可以了。

回顾一下之前的评价的函数,首先我们需要在run_main_analyser的函数中添加评价,而在进行回测后result = cerebro.run() ,还需要对评价进行处理 df_analyzer = analyzer_output(strat)

def run_main_analyser (df_list,run_strategy,i, sdate1,sdate2,list_analyzer): #......cerebro = bt.Cerebro()#......add_analyzer_all(cerebro)    # 加入analyzer#......result = cerebro.run() strat = result[0]df_analyzer = analyzer_output(strat)#......

于是,add_analyzer_all的函数以及analyzer_output的函数就不需要改动,包括run_main_analyzer的函数也不需要改动,我们只需要在“经典策略收益”的按钮响应上做一个strategy的循环就可以了。

C_经典策略复盘

设置好需要用到的策略名,循环回测。

sel2 = ('基准','经典_MACD', '经典_KDJ', '经典_双均线', '短均线策略', 'EXPMA9单线', '经典布林线策略') 
straList = [myStrategys[x] for x in sel2]# ......
list_analyzer2 = []for stra1 in straList:stra2 = eval(stra1)run_main_analyser(df_list,stra2,sel21,s2,ss1,list_analyzer2)df_analyzer2 = pd.DataFrame(list_analyzer2)

最后,得到的DataFrame进行数据处理,再通过wxPython的ListCtrl控件显示在窗口中就完成了。

    df_sorted = df_analyzer2.sort_values(by='近1年', ascending=False)# .......i = 1for index,row in df_sorted.iterrows():idx = self.m_listCtrl1.InsertStringItem(1024,"NA") # 非得插入一个Item不可data_strategy = row['策略']data_halfyear = round(row['近6月'],2)data_year = round(row['近1年'],2)data_sharp = round(row['qs夏普率'],2)drank = str(i)self.m_listCtrl1.SetItem(idx,0,data_strategy)self.m_listCtrl1.SetItem(idx,1,str(data_halfyear))self.m_listCtrl1.SetItem(idx,2,str(data_year))self.m_listCtrl1.SetItem(idx,3,str(data_sharp))self.m_listCtrl1.SetItem(idx,4,drank)i +=1 

完成后在界面中选择几支股票和ETF进行了简单的测试,由于先进行了近1年的收益率的排序,所以会以排名从第1名到第7名进行显示,从这里的四个例子看到,往往MACD经典策略总是会排在比较靠前的名次上,并且前面也讨论过MACD是双金叉系列自带止损,是最经典和实用的策略之一。

至此,一个半吊子的简单的经典策略复盘的功能算是初步完成了。

04_小结

这一节的内容比较少,换了新工作单位后暂时没有什么时间继续深入的进行个人研究,也几乎没有进步的东西。但经典策略复盘这个功能的实现,一直是我的执念,并且在我开始学习量化回测backtrader之前就有的执念,虽然通过一段时间对backtrader的学习,现在实现起来并没有太大的困难,但的确是完成了心中的一个担子,要不然就一直卡在我的进程中,不完成就一直不能走下去。念头通达,开心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥与力扣刷题(蓝桥 字符统计)

题目:给定一个只包含大写字母的字符出 S, 请你输出其中出现次数最多的字符。如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字等串 S. 输出格式 若干个大写字母,代表答案。 样例输入 BABBACAC样…

protobuf安装

安装 github官方链接 https://github.com/protocolbuffers/protobuf/ 以protobuf21为例 https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip windows 解压好文件夹后,使用cmake,vs,qt creator等工具打开该项目,进行编译,编译需…

Compose 实践与探索八 —— LayoutModifier 解析

前面几节讲的 Modifier 都是起辅助作用的,比如 Modifier 的伴生对象、CombinedModifier、 ComposedModifier 以及几乎所有 Modifier 的父接口 Modifier.Element。本篇我们开始讲具有直接功效的 Modifier,分为几个大类:LayoutModifier、DrawMo…

stl之string的详解

一,string定义的方式 ,string定义了多种函数重载的方式,常用的构造函数如下: string(); string(const string& str); string(const string& str, size_t pos, size_t len npos); string(const char* s); string(const …

Leetcode-131.Palindrome Partitioning [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-131.Palindrome Partitioninghttps://leetcode.com/problems/palindrome-partitioning/description/131. 分割回文串 - 力扣(LeetCode)131. 分割回文串 - 给你一个字符串 s,请你…

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1&#xff09…

【AWS入门】AWS云计算简介

【AWS入门】AWS云计算简介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云计算?云计算能干什么?我们如何利用云计算?云计算如何实现? 带着一系列问题,我将做一个普通布道者,引领广…

二分算法刷题

1. 初识 总结:二分算法题的细节非常多,容易写出死循环。使用算法的条件不一定是数组有序,而是具有“二断性”;模板三种后面会讲。 朴素二分二分查找左端点二分查找右端点 2. 朴素二分 题目链接:704. 二分查找 - 力扣…

itsdangerous加解密源码分析|BUG汇总

这是我这两天的思考 早知道密码学的课就不旷那么多了 纯个人见解 如需转载,标记出处 目录 一、官网介绍 二、事例代码 源码分析: 加密函数dump源码使用的函数如下: 解密 ​编辑 ​编辑 关于签名: 为什么这个数字签名没有…

深度解析React Native底层核心架构

React Native 工作原理深度解析 一、核心架构:三层异构协作体系 React Native 的跨平台能力源于其独特的 JS层-Shadow层-Native层 架构设计,三者在不同线程中协同工作: JS层 运行于JavaScriptCore(iOS)或Hermes&…

前端内存优化实战指南:从内存泄漏到性能巅峰

前端内存优化实战指南:从内存泄漏到性能巅峰 一、内存问题引发的场景 1.1 典型内存灾难现场 // 经典内存泄漏示例 const zombieElements new Set();function createLeak() {const div document.createElement(div);zombieElements.add(div); // 元素永不释放div…

【工作记录】pytest使用总结

1、 fixture夹具 可参考: python3.x中 pytest之fixture - 漂泊的小虎 - 博客园 fixture是指夹具(把用例夹在中间),它包括前置工作和后置工作,前置是用例代码的准备阶段,后置是用例执行之后的清理阶段,用…

C++基础笔记

1. C关键字 这个不多说,以后接触得到,但这里做个总结: 2. 命名空间 一般类型: namespace Xianyu {// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}struct Node{struct No…

生活中的可靠性小案例12:类肤材质老化发粘问题

我一直觉得我买的某品牌车载吸尘器很好用,用了几年,目前性能也是杠杠的。然而它现在有个最大的问题,就是表面发粘了,用起来粘手,非常不舒服。 这一类问题在生活中不少见,尤其是一些用了类肤材质涂层的物件。…

黑马node.js教程(nodejs教程)——AJAX-Day01-04.案例_地区查询——查询某个省某个城市所有地区(代码示例)

文章目录 代码示例效果 代码示例 axiosTest.html <!DOCTYPE html> <!-- 文档类型声明&#xff0c;告诉浏览器这是一个HTML5文档 --> <html lang"en"> <!-- HTML根元素&#xff0c;设置文档语言为英语 --><head> <!-- 头部区域&am…

Ollama+OpenWebUI本地部署大模型

OllamaOpenWebUI本地部署大模型 前言Ollama使用Ollama安装Ollama修改配置Ollama 拉取远程大模型Ollama 构建本地大模型Ollama 运行本地模型&#xff1a;命令行交互Api调用Web 端调用 总结 前言 Ollama是一个开源项目&#xff0c;用于在本地计算机上运行大型语言模型&#xff0…

【NeurIPS 2024】LLM-ESR:用大语言模型破解序列推荐的长尾难题

标题期刊年份关键词LLM-ESR: Large Language Models Enhancement for Long-tailed Sequential RecommendationNeurIPS2024Large Language Models, Sequential Recommendation, Long-tailed &#x1f4da;研究背景 在电商和社交媒体的世界里&#xff0c;序列推荐系统&#xff…

C语言_数据结构总结9:树的基础知识介绍

1. 树的基本术语 - 祖先&#xff1a;考虑结点K&#xff0c;从根A到结点K的唯一路径上的所有其它结点&#xff0c;称为结点K的祖先。 - 子孙&#xff1a;结点B是结点K的祖先&#xff0c;结点K是B的子孙。结点B的子孙包括&#xff1a;E,F,K,L。 - 双亲&#xff1a;路径上…

Android 14 Telephony 网络选择功能介绍

一、总体介绍 (一)功能 手动搜网的流程:用户通过UI触发,调用TelephonyManager的API,比如startNetworkScan,然后这个请求会传递到RIL层,通过AT命令与基带通信,进行网络扫描。结果返回后,经过TelephonyRegistry通知应用层。中间可能涉及IPC,比如Binder通信,因为应用和…

系统思考全球化落地

感谢加密货币公司Bybit的再次邀请&#xff0c;为全球团队分享系统思考课程&#xff01;虽然大家来自不同国家&#xff0c;线上学习的形式依然让大家充满热情与互动&#xff0c;思维的碰撞不断激发新的灵感。 尽管时间存在挑战&#xff0c;但我看到大家的讨论异常积极&#xff…