2021-07-09

#先引入后面可能用到的包(package)
import pandas as pd  
from datetime import datetime
import backtrader as bt
import matplotlib.pyplot as plt
%matplotlib auto #正常顯示畫圖時出現的中文和負號
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=Falseimport tushare as ts
token='你的token'
pro=ts.pro_api(token)def get_data(code,date='20200101'):data1=ts.pro_bar(ts_code=code, adj='qfq', start_date=date)data1=data1[['trade_date','open','high','low','close','vol']]data2=pro.daily_basic(ts_code=code,fields='trade_date,turnover_rate,pe,pb')data=pd.merge(data1,data2,on='trade_date')data.index=pd.to_datetime(data.trade_date)data=data.sort_index()data['volume']=data.voldata['openinterest']=0data['datetime']=pd.to_datetime(data.trade_date)data=data[['datetime','open','high','low','close',\'volume','openinterest','turnover_rate','pe','pb']]data=data.fillna(0)return data#數據保存到本地
get_data('300002.SZ').to_csv('test.csv',index=False)
get_data('300002.SZ').head()#pandas的數據格式
import backtrader as bt
from backtrader.feeds import PandasData
class Addmoredata(PandasData):lines = ('turnover_rate','pe','pb',)params = (('turnover_rate',7),('pe',8),('pb',9),)#直接讀取本地csv格式數據
from backtrader.feeds import GenericCSVData
class AddCsvData(GenericCSVData):lines = ('turnover_rate','pe','pb',)params = (('turnover_rate',7),('pe',8),('pb',9),)添加其他數據——單只股票
class TestStrategy1(bt.Strategy):def log(self, txt, dt=None):dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def next(self):self.log(f"換手率:{self.datas[0].turnover_rate[0]},市凈率:{self.datas[0].pb[0]},市盈率:{self.datas[0].pe[0]}")cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy1)
feed = Addmoredata(dataname = get_data('300002.SZ','20200420'))
#如果是讀取csv數據使用下式
#feed = AddCsvData(dataname = 'test.csv',dtformat=('%Y-%m-%d'))
cerebro.adddata(feed)
cerebro.run()添加其他數據——多只股票
class TestStrategy2(bt.Strategy):def log(self, txt, dt=None):dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def next(self):for data in self.datas:print(data._name)self.log(f"換手率:{data.turnover_rate[0]},市凈率:{data.pb[0]},市盈率:{data.pe[0]}")cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy2)
codes=['600862.SH','300326.SZ','300394.SZ']
#加載最近兩日交易數據
for code in codes:feed = Addmoredata(dataname = get_data(code,'20200506'),name=code)cerebro.adddata(feed)
cerebro.run()

?

以換手率和市盈率構建交易策略示例
class MyStrategy(bt.Strategy):def next(self):if not self.position: # 沒有持倉if self.datas[0].turnover_rate[0]<3 and 0<self.datas[0].pe[0]<50:# 得到當前的賬戶價值total_value = self.broker.getvalue()#1手=100股,滿倉買入ss=int((total_value/100)/self.datas[0].close[0])*100self.order=self.buy(size=ss)else:if self.datas[0].turnover_rate[0]>10 or self.datas[0].pe[0]>80 :self.close(self.datas[0])cerebro = bt.Cerebro()  
cerebro.addstrategy(MyStrategy)
feed = Addmoredata(dataname = get_data('300002.SZ','20050101'))
cerebro.adddata(feed)
startcash = 100000
cerebro.broker.setcash(startcash) 
cerebro.broker.setcommission(commission=0.001) 
cerebro.run()
portvalue = cerebro.broker.getvalue()
pnl = portvalue - startcash
#打印結果
print(f'期初總資金: {round(startcash,2)}')
print(f'期末總資金: {round(portvalue,2)}')
print(f'凈收益: {round(pnl,2)}')cerebro.plot()

目前存在的幾大問題,一個是構建股票的分時圖時,因為mpl_finance更新升級為mplfinance,以及使用backtrader畫圖時,出現無法畫圖的情況,本人在此一次性告知大家,自己以后搭建環境準備,也幫助大家解答困惑。

back trader無法畫圖的問題:

pip uninstall matplotlib
pip install matplotlib==3.2.2

畫分時圖問題:

import?mpl_finance?as?mpf

mpf.candlestick_ohlc(ax,df_idx,width=0.75,?colorup='r',?colordown='g',?alpha=0.75)

ax.xaxis.set_major_locator(ticker.MaxNLocator(20))

對應的mplfinance版本

mpl-finance ? ? ? ? ? ? ? ? 0.10.1? (留著當作紀念)
mplfinance ? ? ? ? ? ? ? ? ?0.12.7a17

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Patrick Wyatt:代碼沒問題 程序卻有bug?

摘要&#xff1a;相信每個程序員都遇到過“不可能的bug”&#xff0c;代碼沒有任何問題卻出錯了&#xff01;問題肯定是出在操作系統上&#xff0c;或者是工具&#xff0c;甚至是因為計算機硬件的問題&#xff1f;&#xff01;&#xff1f;當然&#xff0c;魔獸之父也不例外&am…

視差滾動(Parallax Scrolling)插件補充

13. Windows Windows (github) 是一個讓你用占據整個屏幕的section來構建單面網站的插件。該插件提供給你一些回調函數&#xff0c;當新的section出現在可視區并且并且處理快照時被調用&#xff0c;所以你可以輕松的繼承它來自定義導航菜單或更多的東西。下面是一個例子&#x…

主流瀏覽器內核

IE trident Firefox Gecko Google chrome Webkit/blink Safar i Webkit Opera presto轉載于:https://www.cnblogs.com/codezhao/p/10451030.html

Quartz使用總結、Cron表達式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Quartz可以用來做什么&#xff1f; Quartz是一個任務調度框架。比如你遇到這樣的問題 想每月25號&#xff0c;信用卡自動還款想每年4月…

股票數據庫建立

import akshare as ak import baostock as bs import pandas as pd import datetime bs.login()stk_list_place D:/stk_list.csv #股票代碼表存儲地址 stk_place D:/Data/ #股票數據存儲地址 def update_stk_list(dateNone):#獲取指定日期的指數、股票數據stock_rs bs.qu…

利用redis實現分布式鎖:加鎖與解鎖

待補充轉載于:https://www.cnblogs.com/csuliujia/p/10451462.html

MVC日期格式化,后臺使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期

MVC控制器中&#xff0c;經常使用Newtonsoft.Json把對象序列化成json字符串傳遞到前端視圖。當對象中有DateTime類型的屬性時&#xff0c;前后臺如何處理才能把DateTime類型轉換成想要的格式呢&#xff1f; 有這樣的一個類具有DateTime類型屬性&#xff1a; using System; name…

多股回測(backtrader+quantstats+akshare)

導包 #引入技術指標數據 from __future__ import (absolute_import ,division,print_function,unicode_literals) import datetime #用于datetime對象操作 import os.path #用于管理路徑 import sys #用于在argvTo[0]中找到腳本名稱 import backtrader as bt #引入backt…

Cron表達式、定時任務

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Cron表達式。但這個表示式本身就夠復雜了。下面會有說明。 例子&#xff1a; cronSchedule("0 0/2 8-17 * * ?") // 每天8:0…

【轉載】ASP.NET自定義404和500錯誤頁面

在ASP.NET網站項目實際上線運行的過程中&#xff0c;有時候在運行環境下會出現400錯誤或者500錯誤&#xff0c;這些錯誤默認的頁面都不友好&#xff0c;比較簡單單調&#xff0c;其實我們可以自行設置這些錯誤所對應的頁面&#xff0c;讓這些錯誤跳轉到我們指定的路徑。此文將介…

年薪15萬的80后小本科:只要6分鐘,告訴你少走6年彎路

這個社會是很殘酷的&#xff0c;尤其是對于那些剛剛步入社會的80后而言。當很多人都在抱怨這個社會競爭壓力太大、沒有自己的追求&#xff0c;并因此而喪失斗志的時候&#xff0c;一個年薪15W的80后小本卻發出了這個的感慨&#xff0c;“一個人的成就&#xff0c;與歲月無關&am…

Google Go Programming In Eclipse

http://www.tutorialsavvy.com/2013/04/google-go-programming-in-eclipse.html/ Google Go Programming In Eclipse The new “Go” programming language is from Google co.It has many features better then other languages.Go language features are:-– High Speed Comp…

pycharm打開ipynb顯示為文本格式解決辦法

然后進入 添加類型 jupyter notebook 然后下方添加 *.ipynb

quartz各版本MySQL數據庫存儲建表SQL語句

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用quartz管理任務計劃很方便&#xff0c;但是當使用數據庫作為存儲介質的時候&#xff0c;必須要先創建表&#xff0c;不然就會報錯。1.…

[基礎篇]ESP32-RTOS-SDK教程(一)之Windows環境搭建

當下正是物聯網最好的時代&#xff0c;學習新的技術怎么能只學習ESP8266呢&#xff1f;要知道ESP8266還有一個孿生兄弟呢&#xff0c;最重要的是這個孿生兄弟要比ESP8266是更厲害的&#xff0c;所以我們也是非常有必要學習一下的&#xff0c;其實這篇文章去年就已經寫了&#x…

對話Linus Torvalds:大多黑客甚至連指針都未理解

摘要&#xff1a;Linus Torvalds坦言那些狡詐的通過文件名查找高速緩存&#xff0c;然后又抱怨自己能力一般的內核“惡魔”才是他欣賞的&#xff1b;相反&#xff0c;很多人連低水平的內核編程都還沒學好。 幾周前&#xff0c; Linus Torvalds在Slashdot上回答了一些問題。其中…

總結學習(提綱)

之前在私募做期權量化學習了那么久&#xff0c;趁著畢業找工作這段時間&#xff0c;對之前學習的東西&#xff0c;制作的函數等進行一個系統性的總結&#xff0c;順便每天更新的時候&#xff0c;記錄下自己的體重與波比跳次數。 1.MC的學習與策略編寫 2.python基礎學習資料的…

安卓系統上的遠程 JS 調試 Remote JavaScript Debugging on Android

每當在 Android 移動設備上調試網頁時&#xff0c;開發人員往往都會不自覺陷入調試的泥潭中去。《Android開發指南》提供了一個解決方案&#xff0c;卻有點繁瑣復雜。因此&#xff0c;許多 Web 開發人員會傾向于使用類似 Firefox Firebug 的或像 WebKit 的 Web Inspector 之類的…

js關于表單校驗完善

<!DOCTYPE html><html> <head> <meta charset"UTF-8"> <title>注冊頁面</title> <style type"text/css"> .left{ width: 100px; …

Python高效編程技巧

摘要&#xff1a;作者有多年的Python編程經驗&#xff0c;并且有很多的編程小技巧和知識&#xff0c;其中大多數是通過閱讀很流行的開源軟件&#xff0c;如Django, Flask, Requests中獲得的。 我已經使用Python編程有多年了&#xff0c;即使今天我仍然驚奇于這種語言所能讓代碼…