0

我无法修复错误 - 'numpy.int64' 对象没有属性 'to_pydatetime',我将非常感激,如果有人能帮我解决这个问题?我已经尝试卸载 pyfolio 并从 git 安装它。请看下面的完整代码

import os
import glob
import requests
import pandas as pd
from nsepy import *
from datetime import datetime
import backtrader as bt
import backtrader.feeds as btfeeds
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

class TestStrategy(bt.Strategy):

    def log(self, txt, dt=None):
        ''' Logging function for this strategy'''
        dt = dt or self.datas[0].datetime.date(0)
        print('%s, %s' % (dt.isoformat(), txt))

    def __init__(self):
        # Keep a reference to the "close" line in the data[0] dataseries
        self.dataclose = self.datas[0].close

    def next(self):
        # Simply log the closing price of the series from the reference
        self.log('Close, %.2f' % self.dataclose[0])

if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.addstrategy(TestStrategy)
    
    #Data feed block
    data_path = "/Users/kumarun/Documents/data/files"
    joined_files = os.path.join(data_path, "Oct-MONTHLY-Expirydata_2020.csv")
    joined_list = glob.glob(joined_files)
    df = pd.concat(map(pd.read_csv, joined_list), ignore_index=True)
    df.columns=['Ticker','date', 'open', 'high', 'low', 'close', 'volume','Open Interest']
    filtered = df[(df['Ticker'] == 'BANKNIFTY')]
#Cerebro block
    filtered.date = pd.to_datetime(filtered.date, format='%d-%m-%Y %H:%M:%S')
    feed = bt.feeds.PandasData(dataname=filtered)
    cerebro.adddata(feed)
    cerebro.broker.setcash(100000.0)

    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())

    cerebro.run()

    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

数据输入格式

4

1 回答 1

0

我觉得您可能会遇到列名问题。尝试使用以下方法命名您的列名:

 data = bt.feeds.PandasData(
        dataname=filtered,
        datetime="date",
        open='open',
        high='high',
        low='low',
        close='close',
        volume='volume',
        openinterest="Open Interest"
    )

此外,可以删除Ticker名称列,并使用以下方法添加名称:

ticker = 'BANKNIFTY'
cerebro.adddata(feed, name=ticker)
于 2022-02-03T12:10:47.373 回答