簡體   English   中英

Backtrader 錯誤:“DataFrame”object 沒有屬性“setenvironment”

[英]Backtrader error: 'DataFrame' object has no attribute 'setenvironment'

我是反向交易者的新手,我有一個大問題。 我想開始我的策略(只是一個簡單的 GoldenCross 策略)。 這個 GoldenCross.py 腳本如下所示:

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 腳本運行這個策略。 在此腳本中,代碼如下所示:

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 Studio 編譯器返回一個錯誤,名為: “AttributeError: 'DataFrame' object has no attribute 'setenvironment'”

我不知道有什么問題。 可能問題出在我的 csv 數據中。我的日期列如下所示:

     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
...          ...                       ...      ...      ...      ...      ...

但我已經嘗試使用以下方法將此日期轉換為日期時間:

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

但這也改變不了問題..

有人對我有什么好的建議嗎?

最好的問候克里斯蒂安

必須添加數據提要(不是 stock_prices)提要 = bt.feeds.PandasData(dataname=stock_prices) cerebro.adddata(stock_prices)

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

對我來說,如果您將日期時間設置為索引並解析日期時間,則此方法有效

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

從 self.bt.whatever 中刪除 self 開始... bt 不是 self 的成員。 此外,您還沒有調用正確的交叉指標。 名字應該是駝峰式的。 嘗試:

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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM