AttributeError: 'numpy.float64' object has no attribute 'to_pydatetime'


from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
import backtrader as bt
import akshare as ak
import datetime
import pandas as pd
class akharePdData(bt.feeds.PandasData):
    '''從Tushare讀取A股票數據日線'''
    params = (
        ('fromdate', datetime.datetime(2018, 1, 2)),
        ('todate', datetime.datetime(2022,3, 21)),
        ('nullvalue' , 0.0),
        ('dtformat' , ('%Y-%m-%d')),
        ('datetime',-1),
        ('open', 2),
        ('high', 4),
        ('low', 5),
        ('close', 3),
        ('volume', 6),
        ('openinterest', -1),
    )


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    dt_start=datetime.datetime.strptime("2018-01-01", "%Y-%m-%d")
    dt_end=datetime.datetime.strptime("2022-03-31", "%Y-%m-%d")
    print(dt_start)
    stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol='603777', period="daily", start_date="20180101",
                                            end_date="20220331", adjust="")
    stock_zh_a_hist_df['date'] = pd.to_datetime(stock_zh_a_hist_df['日期'])
    stock_zh_a_hist_df.index = pd.to_datetime(stock_zh_a_hist_df['日期'], format='%Y-%m-%d')
    data = akharePdData(dataname=stock_zh_a_hist_df, fromdate=dt_start, todate=dt_end)
    print(stock_zh_a_hist_df)
    print(stock_zh_a_hist_df.dtypes)
    print(stock_zh_a_hist_df.columns.values[0])
    cerebro.adddata(data)
    cerebro.broker.setcash(100000.0)
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
    cerebro.run()
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    cerebro.plot()

以上修改后可運行,主要改動如下: 

注意點:

("2018-01-01", "%Y-%m-%d")和pd.to_datetime(stock_zh_a_hist_df['日期'], format='%Y-%m-%d')此二者格式一致

 ('nullvalue' , 0.0),
 ('dtformat' , ('%Y-%m-%d')),
 ('datetime',-1),  這三個部分也要格式一致,同時datetime必須為-1


另附上官網評論
    • cnkenzh
      cnkenzh2021-06-09
      請教一個問題,我用akshare的數據代替了例程里面從csv文件里面讀取數據,運行后得到一個錯誤,顯示調用pandafeed.py時, dt = tstamp.to_pydatetime()

      AttributeError: 'int' object has no attribute 'to_pydatetime'
      這是什么問題?要怎樣解決?謝謝
    • 飯飯
      飯飯回復cnkenzh2021-12-15
      時間戳要在index里,而且需要是start="20200101" ,dates = datetime.datetime.strptime(start, "%Y%m%d") dates為最終格式



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM