使用pandas进行量化回测(akshare)

本人看法,也就比excel高级一点,距离backtrader这些框架又差一点。做最基础的测试可以,如果后期加入加仓功能,或者是止盈止损等功能,很不合适。只能做最简单的技术指标测试。所以别太当回事。

导包,常用包导入:

import os
import akshare as ak
import requests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import talib as ta
%matplotlib inline
plt.style.use("ggplot")

获取数据,本文使用akshare中债券数据为对象分析:

bond_zh_hs_daily_df = ak.bond_zh_hs_daily(symbol="sh010107")

添加指标:

def backtest_trend_strategy(ohlc: pd.DataFrame,fast_period: int = 50,slow_period: int = 200,threshold: float = 1.0) -> pd.DataFrame:"""封装向量化回测的逻辑"""# 计算指标ohlc["fast_ema"] = talib.EMA(ohlc.close, fast_period)ohlc["slow_ema"] = talib.EMA(ohlc.close, slow_period)ohlc["pct_diff"] = (ohlc["fast_ema"] / ohlc["slow_ema"] - 1) * 100# 生成信号,1表示做多,-1表示做空,0表示空仓ohlc["signal"] = np.where(ohlc["pct_diff"] > threshold, 1, 0)ohlc["signal"] = np.where(ohlc["pct_diff"] < -threshold, -1, ohlc["signal"])# 计算策略收益率ohlc["returns"] = np.log(ohlc["close"] / ohlc["close"].shift(1))ohlc["strategy"] = ohlc["signal"].shift(1) * ohlc["returns"]ohlc["strategy_returns"] = ohlc["strategy"].cumsum()return ohlc

运行策略,并绘制图片:

data = strategy1(data)fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(12, 15), sharex=True)ax[0].plot(data.index, data["close"])
ax[0].plot(data.index, data["fast_ema"])
ax[0].plot(data.index, data["slow_ema"])
ax[0].set_title("Price and Indicators")ax[1].plot(data.index, data["signal"])
ax[1].set_title("Strategy Position")data[["returns", "strategy"]].cumsum().plot(ax=ax[2], title="Strategy Return")

 参数优化:

# 选择核心参数和扫描区间,其它参数保持不变
fast_period_rng = np.arange(5, 101, 5)total_return = []
for fast_period in fast_period_rng:ohlc = data.filter(["open", "high", "low", "close"])res = backtest_trend_strategy(ohlc, fast_period, 200, 1.0)total_return.append(res["strategy_returns"].iloc[-1])# 散点图:策略收益率 vs 快速均线回溯期
fig, ax = plt.subplots(figsize=(12, 7))
ax.plot(fast_period_rng, total_return, "r-o", markersize=10)
ax.set_title("Strategy Return vs Fast period")
ax.set_xlabel("fast_period")
ax.set_ylabel("return(%)")

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

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

相关文章

【BZOJ4543】【POI2014】Hotel加强版(长链剖分)

传送门 题意&#xff1a;求树上满足三点之间距离两两相等的三元组个数 n≤1e5n\le 1e5n≤1e5 原题数据是n≤5000n\le5000n≤5000 考虑怎么做f[u][i]f[u][i]f[u][i]表示uuu为根&#xff0c;深度为iii的点的个数g[u][i]g[u][i]g[u][i]表示uuu为根&#xff0c;满足2点到lcalcalca的…

使用vue+webpack从零搭建项目

vue到现在已经成为一个热门的框架&#xff0c;在项目实践当中&#xff0c;如果想要创建一个新项目&#xff0c;通常都会使用vue-cli的脚手架工具&#xff0c;毋容置疑能够方便很多&#xff0c;很多东西也不需要自己亲自去配置。都知道&#xff0c;脚手架其实是vue结合webpack去…

CentOS 6 和 CentOS 7 防火墙的关闭

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。CentOS6.5查看防火墙的状态&#xff1a; 1[linuxidclocalhost ~]$service iptable status显示结果&#xff1a; 12345[linuxidclocalhost …

怎样从Linux终端管理进程:10个你必须知道的命令

本文由 极客范 - Ben Zhang 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。Linux终端有一系列有用的命令。它们可以显示正在运行的进程、杀死进程和改变进程的优先级。本文列举了一些经典传统的命令和一些有用新…

易盛极星多合约回测(问题很多)

注意&#xff0c;使用此函数&#xff0c;在考虑手续费时&#xff0c;无法做到统一。 import talib import numpy as np import EsTalib from EsSeries import NumericSeries# 策略参数字典 g_params[p1] 5 g_params[p2] 10 g_params[p3] 120 g_params[ZQ] 5 #交易周期…

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径&#xff0c;比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难&#xff0c;但是各不相同&#xff0c;每次用到时还要…

搞了个30天学习量化的数据资料,可以bt做全球。数据链接白送

待会上传代码,资料,打包好了,拿来就能用。累死我了,搞了两天,必须收费,绝不允许白嫖。不然对不起我熬夜,那么辛苦。 确定后,扫描百度网盘 链接:https://pan.baidu.com/s/1C0k6zkjHchFVQaHe4nRMsg?pwd=kkgb 提取码:kkgb 如何回测k线图 如何根据形态选股

解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 项目中使用 JPA 和 mysql 。表名是全大写的。 出现 如下报错&#xff1a; java.sql.SQLSyntaxErrorException: Table XXX_ms.work_tas…

自学Linux命令的四种方法

本文由 极客范 - 小道空空 翻译自 Danny Stieben。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。如果你想成为Linux高手&#xff0c;那么掌握一些Linux命令是必不可少的。下面是自学Linux命令的四种方法。 每日提示 学习Linux命令的…

第五周学习总结

第六章&#xff1a; 主要内容: 1.接口 2.实现接口 3.理解接口 4.接口回调 5.接口与多态 6.接口变量做参数 7.面向接口编程 Example6_1: Example6_2: Example6_3: Example6_4: Example6_5: Example6_6: 总结&#xff1a;这章节没有较大问题&#xff0c;例题也都做了一遍。蛮顺利…

Android 设备的CPU类型(通常称为”ABIs”)

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器&#xff0c;很少设备&#xff0c;三星 Galaxy S6是其中之一。armeabi: 第5代、第6代的ARM处理器&#xff0c;早期的手机用的比较多。x86: 平板、模…

国信证券学习系列(1)

软件不错&#xff0c;满足了我对股票&#xff0c;期货&#xff0c;期权的全部要求。而且数据可以提供下载&#xff0c;简直没话说了。 数据清洗问题&#xff0c;我其实很早以前就在思考这个问题&#xff0c;回测&#xff0c;到底在测什么&#xff1f;什么样的数据可以用来回测&…

JNA—JNI终结者

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA。 JNA(Java Native Access)框架是一个开源的Java框架&#xff0c;是SUN公司…

FIFO存储器

FIFO( First Input First Output)简单说就是指先进先出。由于微电子技术的飞速发展&#xff0c;新一代FIFO芯片容量越来越大&#xff0c;体积越来越小&#xff0c;价格越来越便宜。作为一种新型大规模集成电路&#xff0c;FIFO芯片以其灵活、方便、高效的特性&#xff0c;逐渐在…

通过8个技巧让你成为一个超强的Linux终端用户

本文由 极客范 - minejo 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。使用Linux终端不仅仅是只输入命令。学习这些基本的技巧&#xff0c;你就会逐渐掌握Bash shell&#xff0c;这个在大多数Linux发行版上默认…

国信证券学习系列(2)

获取指数池&#xff1a; def init(ContextInfo):#设置股票池stock300 ContextInfo.get_stock_list_in_sector(沪深300)ContextInfo.stock300_weight {}stock300_symbol []stock300_weightlist [] ContextInfo.index_code ContextInfo.stockcode"."ContextInfo.m…

旅游服务商Bikego完成A轮融资,共建创投、马蜂窝投资

2月26日消息&#xff0c;近日Bikego宣布完成A轮融资&#xff0c;共建创投、北京马蜂窝之旅国际旅行社投资。目前金额尚未公开。 bikego领趣旅行成立于2016年&#xff0c;是一家目的地日游服务运营商。从内容切入&#xff0c;提供国内自由行客户的白天玩法解决方案&#xff0c;…

python-flask-1

https://askubuntu.com/questions/244641/how-to-set-up-and-use-a-virtual-python-environment-in-ubuntu 1. virtualenv安装 sudo apt-get install virtualenv sudo apt install virtualenvwrapper echo "source /usr/share/virtualenvwrapper/virtualenvwrapper.sh&quo…

JSch:Java Secure Channel -- java 代码实现 ssh 远程操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JSch 是SSH2的一个纯Java实现。 它允许你连接到一个 sshd 服务器&#xff0c;使用端口转发&#xff0c;X11转发&#xff0c;文件传输等…

国信证券学习系列(3)

日内回转策略&#xff1a;做T策略 择时交易&#xff1a; if date[-8:-3] ! 14:55:if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则平仓if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextIn…