代码如下解析:
import pandas as pd
import matplotlib.pyplot as plt
import backtrader as bt
import backtrader.feeds as btfeed
import backtrader.indicators as btind
from backtrader import analyzers
import pyalgotrade
import PySimpleGUI as sg
import akshare as ak
import pandas as pd
import datetime
stock=sg.popup_get_file('输入股票代码比如sz002466')
start_date=sg.popup_get_file('输入数据开始时间比如20200101')
start_cash=sg.popup_get_file('输入开始资金比如1000000')
#定义测试类
class testStrategy(bt.Strategy):
#定义记录函数
def log(self,txt,dt=None):
dt=dt or self.datas[0].datetime.date(0)
print('%s,%s'%(dt.isoformat(),txt))
#初始化数据
def __init__(self):
self.dataclose=self.datas[0].close
#定义交易状态检测函数,交易前
def notify_order(self,order):
#如果交易提交/接受
if order.status in[order.Submitted,order.Accepted]:
print('交易提交,交易接受')
#如果交易完成
if order.status in[order.Completed]:
#如果交易类型是买
if order.isbuy():
self.log('买的价格,%.2f'%order.executed.price)
#如果交易类型是卖
elif order.issell():
self.log('卖的价格,%.2f'%order.executed.price)
self.bar_executed=len(self)
#如果交易交易取消,保证金不足,交易拒绝
elif order.status in[order.Canceled,order.Margin,order.Rejected]:
self.log('交易取消/保证金不足/交易拒绝')
self.order=None
#主交易函数
def next(self):
self.log('收盘价,%.2f'%self.dataclose[0])
#写交易函数,连续下跌3天买入,连续上涨3天卖出
#如果今天的价格小于昨天的价格
if self.dataclose[0]<self.dataclose[-1]:
#如果昨天的价格小于前天的价格
if self.dataclose[-1]<self.dataclose[-2]:
#记录买卖的价格
self.log('买的价格%.2f'%self.dataclose[0])
self.buy(size=200)#单位为股,代表1手
elif self.dataclose[0]>self.dataclose[-1]:
if self.dataclose[-1]>self.dataclose[-2]:
self.log('卖出的价格%.2f'%self.dataclose[0])
self.sell(size=100)
#简单例子
if __name__=="__main__":
#将大脑实例化
cerebro=bt.Cerebro()
cerebro.addstrategy(testStrategy)
#加入数据
df=ak.stock_zh_a_daily(symbol=stock,start_date=start_date)
df.index=pd.to_datetime(df['date'])
data=btfeed.PandasData(dataname=df)
cerebro.adddata(data=data)
#设置开始资金
cerebro.broker.set_cash(int(start_cash))
#设置交易费用
cerebro.broker.setcommission(0.003)
print('开始值{}'.format(cerebro.broker.getvalue()))
cerebro.run()
print('最终值{}'.format(cerebro.broker.getvalue()))
cerebro.plot(style='candle')
plt.show()
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993319/viewspace-2897593/ ,如需转载,请注明出处,否则将追究法律责任。