網站首頁 編程語言 正文
下面文章描述可能比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(%)")
原文鏈接:https://blog.csdn.net/qq_26742269/article/details/123697226
相關推薦
- 2023-07-14 react 中redux的使用步驟
- 2022-09-13 本地使用Docker搭建go開發環境的全過程_Golang
- 2023-04-06 C語言中雙鏈表的基本操作_C 語言
- 2022-08-13 python 中導出requirements.txt 的幾種方法
- 2022-09-06 Minio設置文件鏈接永久有效的完整步驟_其它綜合
- 2022-12-06 .net程序開發IOC控制反轉和DI依賴注入詳解_ASP.NET
- 2022-04-02 IDEA集成Docker實現打包的方法_docker
- 2022-09-26 nodemon安裝在開發環境(非全局安裝)報錯解決【兩種方式】
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支