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.mzph.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;即使今天我仍然惊奇于这种语言所能让代码…