首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backtrader错误:'DataFrame‘对象没有属性'setenvironment’

Backtrader错误:'DataFrame‘对象没有属性'setenvironment’
EN

Stack Overflow用户
提问于 2020-06-10 10:31:28
回答 2查看 4.7K关注 0票数 4

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

代码语言:javascript
复制
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

现在,我想用我的run.py脚本运行策略。在这个脚本中,代码如下所示:

代码语言:javascript
复制
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()

现在,visual编译器返回一个名为:“AttributeError:'DataFrame‘对象没有属性’setenvironment‘”的属性错误。

我不知道有什么问题。问题是我的csv数据..。我的日期栏如下所示:

代码语言:javascript
复制
     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
...          ...                       ...      ...      ...      ...      ...

但是,我已经尝试使用以下方法来转换此日期:

代码语言:javascript
复制
stock_prices['date'] = pd.to_datetime(stock_prices['date']) #object to datetime

但这也改变不了问题。

有人给我一个好消息吗?

向克里斯蒂安问好

EN

回答 2

Stack Overflow用户

发布于 2020-08-20 00:29:32

必须添加数据提要(而不是stock_prices)提要= bt.feeds.PandasData(dataname=stock_prices) cerebro.adddata(stock_prices)

代码语言:javascript
复制
feed = bt.feeds.PandasData(dataname=stock_prices)
cerebro.adddata(feed)

对于我来说,如果您将日期时间设置为索引和解析日期时间,则此操作有效。

代码语言:javascript
复制
stock_prices = pd.read_csv(path, index_col='datetime', parse_dates=True)
票数 6
EN

Stack Overflow用户

发布于 2020-07-15 19:06:42

从从self.bt.whatever中移除自我开始。在这里bt不是自我的一员。此外,您还没有调用正确的交叉指示器。名字应该是骆驼大写的。尝试:

代码语言:javascript
复制
class GoldenCross(bt.Strategy):
    params = (("fast", 50),
                ("slow", 200),
                ("order percentage", 0.95),
                ("ticker", "AAPL"))

    def __init__(self):
        self.fast_moving_average = bt.indicators.SmoothedMovingAverage(
           self.data.close,
           period=self.p.fast,
           plotname="50 day moving average")
        self.slow_moving_average = bt.indicators.SmoothedMovingAverage(
           self.data.close,
           period=self.p.slow,
           plotname="200 day moving average")
        self.crossover = bt.indicators.CrossOver(self.fast_moving_average, self.slow_moving_average) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62301378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档