使用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.pswp.cn/news/449360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449360.shtml
英文地址,請注明出處:http://en.pswp.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…