[英]After running Cerebro nothing is happening to my portfolio value in backtrader, how do i check if it is working or not
import backtrader as bt import backtrader.feeds as btfeed import backtrader.analyzers as btanalyzers import talib as ta import numpy as np import pandas as pd进口 backtrader 作为 bt 进口 backtrader.feeds 作为 btfeed 进口 backtrader.analyzers 作为 btanalyzers 进口 talib 作为 ta 进口 numpy 作为 np 进口 pandas 作为 pd
from datetime import datetime从日期时间导入日期时间
class MACross(bt.Strategy): class MACross(bt.Strategy):
def __init__(self):
ma_fast = bt.ind.SMA(period = 10)
ma_slow = bt.ind.SMA(period = 50)
self.crossover = bt.ind.CrossOver(ma_fast, ma_slow)
def next(self):
if not self.position:
if self.crossover >0:
self.buy()
elif self.crossover <0:
self.close()
class dataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%m/%d/%Y %H:%M'),
('datetime', 0),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
('openinterest', -1)
)
cerebro = bt.Cerebro()
data = dataFeed(dataname='data.csv')
cerebro.addstrategy(MACross)
cerebro.adddata(data)
back = cerebro.run()
cerebro.broker.getvalue()
back[0].analyzers.sharpe.get_analysis()
cerebro.plot()
[[<Figure size 640x480 with 5 Axes>]]
Assuming the code is all correct (not in the format posted)假设代码都是正确的(不是发布的格式)
To check if the value has changed use:要检查值是否已更改,请使用:
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
If this doesnt change have a look at the original example posted thats如果这没有改变,请查看发布的原始示例
also a crossover strategy and see where it differs.也是一个交叉策略,看看它有什么不同。
Extract:提炼:
def __init__(self): #indicators created here
sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average
sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average
self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal
#--init--
def next(self):
if not self.position: # not in the market
if self.crossover > 0: # if fast crosses slow to the upside
self.order = self.buy() #go long
elif self.crossover < 0: # in the market & cross to the downside
self.order = self.sell()
else:
if len(self) >= (self.bar_executed + 5):
self.close() # close long position
https://www.backtrader.com/docu/quickstart/quickstart/ https://www.backtrader.com/docu/quickstart/quickstart/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.