python使用pandas进行量化回测

 更新时间:2022年03月24日 15:41:09   作者:神出鬼没,指的就是我!  
这篇文章主要介绍了python使用pandas进行量化回测,文章围绕pandas进行量化回测的相关资料展开简单内容,文章内容可以做一些比较简单的技术指标测试,需要的朋友可以参考一下

下面文章描述可能比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(%)")

到此这篇关于python使用pandas进行量化回测的文章就介绍到这了,更多相关pandas进行量化回测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python数组条件过滤filter函数使用示例

    Python数组条件过滤filter函数使用示例

    数组条件过滤简洁实现方式,使用filter函数,实现一个条件判断函数即可,示例代码如下
    2014-07-07
  • Python3合并两个有序数组代码实例

    Python3合并两个有序数组代码实例

    这篇文章主要介绍了Python3合并两个有序数组代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Django实现内容缓存实例方法

    Django实现内容缓存实例方法

    在本篇文章里小编给大家整理了关于Django实现内容缓存实例方法,有需要的朋友们可以跟着学习下。
    2020-06-06
  • ubuntu16.04升级Python3.5到Python3.7的方法步骤

    ubuntu16.04升级Python3.5到Python3.7的方法步骤

    这篇文章主要介绍了ubuntu16.04升级Python3.5到Python3.7的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python中getservbyport和getservbyname函数的用法大全

    Python中getservbyport和getservbyname函数的用法大全

    在Python的网络编程中,getservbyport()函数和getservbyname()函数是socket模块中的两个函数,因此在使用这两个函数时,需要导入socket模块,这篇文章主要介绍了Python中getservbyport和getservbyname函数的用法,需要的朋友可以参考下
    2023-01-01
  • Python模拟登录requests.Session应用详解

    Python模拟登录requests.Session应用详解

    这篇文章主要介绍了Python模拟登录requests.Session应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python基于plotly实现画饼状图代码实例

    python基于plotly实现画饼状图代码实例

    这篇文章主要介绍了python基于plotly实现画饼状图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 零基础写python爬虫之HTTP异常处理

    零基础写python爬虫之HTTP异常处理

    我们在使用爬虫来抓取网页内容的时候,HTTP异常是必须要注意的一项,所以本文,我们来详细探寻一下HTTP异常处理的相关内容,通过一些具体的实例来分析一下,非常的简单,但是却很实用。
    2014-11-11
  • Python动态配置管理Dynaconf的实现示例详解

    Python动态配置管理Dynaconf的实现示例详解

    这篇文章主要为大家介绍了Python动态配置管理Dynaconf实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Python基于DB-API操作MySQL数据库过程解析

    Python基于DB-API操作MySQL数据库过程解析

    这篇文章主要介绍了Python基于DB-API操作MySQL数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论