Backtrader错误:"DataFrame"对象没有属性"setenvironment" [英] Backtrader error: 'DataFrame' object has no attribute 'setenvironment'

查看:294
本文介绍了Backtrader错误:"DataFrame"对象没有属性"setenvironment"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新手,所以我有一个大问题.我想开始我的策略(只是一个简单的GoldenCross策略).此GoldenCross.py脚本如下所示:

 导入数学以bt形式导入backtrader类GoldenCross(bt.Strategy):参数=(("fast",50),(慢",200),(订单百分比",0.95),(代码","AAPL")def __init __():self.fast_moving_average = self.bt.indicators.SmoothedMovingAverage(self.data.close,period = self.p.fast,plotname ="50天移动平均线")self.slow_moving_average = self.bt.indicators.SmoothedMovingAverage(self.data.close,period = self.p.slow,plotname ="200天移动平均线")self.crossover = self.bt.indicators.crossover(self.fast_moving_average,self.slow_moving_average)def next(self):经过 

现在,我想使用run.py脚本运行该策略.在此脚本中,代码如下所示:

 导入os,sys,argparse将熊猫作为pd导入以bt形式导入backtrader从Strategien.GoldenCross进口GoldenCross导入日期时间cerebro = bt.Cerebro()cerebro.broker.setcash(100000)符号="AAPL"路径="/Users/me/Desktop/allgemein/Visual Studio/Stock Data/S& P500 Aktien 1H/" +符号+".csv"stock_prices = pd.read_csv(路径)feed = bt.feeds.PandasData(dataname = stock_prices)#(数据名=股票价格)cerebro.adddata(股票价格)大脑.addstrategy(GoldenCross)cerebro.run()cerebro.plot() 

现在Visual Studio编译器给了我一个错误,该错误是: "AttributeError:'DataFrame'对象没有属性'setenvironment'" .

我不知道出了什么问题.Maby问题出在我的csv数据中.我的日期"列看起来像这样:

 未命名:0日期关闭高低开0 0 2017-01-03T15:00:00.000Z 115.450 115.815 115.400 115.6001 1 2017-01-03T16:00:00.000Z 115.370 115.670 115.135 115.4502 2 2017-01-03T17:00:00.000Z 115.470 115.525 115.270 115.3653 3 2017-01-03T18:00:00.000Z 115.235 115.495 115.235 115.4754 4 2017-01-03T19:00:00.000Z 115.435 115.445 115.160 115.235………………………… 

但是我已经尝试使用:p将此日期转换为日期时间.

  stock_prices ['date'] = pd.to_datetime(stock_prices ['date'])#对象到日期时间 

但这也不能解决问题.

有人对我有个好建议吗?

最好的问候克里斯蒂安

解决方案

必须添加数据供稿(不是stock_prices)feed = bt.feeds.PandasData(dataname = stock_prices)cerebro.adddata(stock_prices)

  feed = bt.feeds.PandasData(dataname = stock_prices)cerebro.adddata(提要) 

对我来说,如果您将datetime设置为索引并解析datetime,则此方法有效

  stock_prices = pd.read_csv(path,index_col ='datetime',parse_dates = True) 

I am new to backtrader, and I have a big problem. I want to start my strategy (just a simple GoldenCross strategy). This GoldenCross.py Script looks like this:

import math
import backtrader as bt



class GoldenCross(bt.Strategy):
    params = (("fast", 50), 
                ("slow", 200), 
                ("order percentage", 0.95), 
                ("ticker", "AAPL"))

    def __init__(self):
        self.fast_moving_average = self.bt.indicators.SmoothedMovingAverage(
           self.data.close, 
           period=self.p.fast,
           plotname="50 day moving average")
        self.slow_moving_average = self.bt.indicators.SmoothedMovingAverage(
           self.data.close, 
           period=self.p.slow,
           plotname="200 day moving average")
        self.crossover = self.bt.indicators.crossover(self.fast_moving_average, self.slow_moving_average)

    def next(self):
        pass

Now I want to run the strategy with my run.py script. In this script the code looks like this:

import os, sys, argparse
import pandas as pd 
import backtrader as bt 
from Strategien.GoldenCross import GoldenCross
import datetime



cerebro = bt.Cerebro()
cerebro.broker.setcash(100000)

symbol = "AAPL"
path = "/Users/me/Desktop/allgemein/Visual Studio/Stock Data/S&P500 Aktien 1H/" + symbol + ".csv"
stock_prices = pd.read_csv(path)


feed = bt.feeds.PandasData(dataname=stock_prices)
#(dataname=stock_prices)
cerebro.adddata(stock_prices)

cerebro.addstrategy(GoldenCross)
cerebro.run()
cerebro.plot()

Now the visual studio compiler gives me back an error called: "AttributeError: 'DataFrame' object has no attribute 'setenvironment'".

I don't know what's the problem. Maby the problem is in my csv data.. My Date column looks like this:

     Unnamed: 0                      date    close     high      low     open
0              0  2017-01-03T15:00:00.000Z  115.450  115.815  115.400  115.600
1              1  2017-01-03T16:00:00.000Z  115.370  115.670  115.135  115.450
2              2  2017-01-03T17:00:00.000Z  115.470  115.525  115.270  115.365
3              3  2017-01-03T18:00:00.000Z  115.235  115.495  115.235  115.475
4              4  2017-01-03T19:00:00.000Z  115.435  115.445  115.160  115.235
...          ...                       ...      ...      ...      ...      ...

But I already tried to convert this date to date time with using :

stock_prices['date'] = pd.to_datetime(stock_prices['date']) #object to datetime

But this doesn't change the problem either..

Does anyone have a good tip for me?

best regards Christian

解决方案

must adddata feed (not stock_prices) feed = bt.feeds.PandasData(dataname=stock_prices) cerebro.adddata(stock_prices)

to

feed = bt.feeds.PandasData(dataname=stock_prices)
cerebro.adddata(feed)

for me this works if you set datetime as index and parse datetime

stock_prices = pd.read_csv(path, index_col='datetime', parse_dates=True)

这篇关于Backtrader错误:"DataFrame"对象没有属性"setenvironment"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆