配置数据 DataFeed#
我们目标是通过策略实现资产增值,这就离不开价格数据,甚至是其他有用的数据。本小节,我们将学习如何系统配置数据源,即添加数据源 DataFeed。
配置 DataFeed 要用到的是 backtrader.feeds 中提供的数据工具。要用到的数据文件是 orcl-1995-2014(点击下载即可下载)。
假设,数据文件被下载到当前目录,通过 bt.feeds.YahooFinanceCSVDataFeed 即可创建 datafeed。
data = bt.feeds.YahooFinanceCSVData(
  dataname="./orcl-1995-2014.txt",
  fromdate=datetime.datetime(2000, 1, 1),
  todate=datetime.datetime(2000, 12, 31),
  reverse=False
)Yahoo 在线下载的 CSV 数据按日期降序排列,YahooFinanceCSVData 也是按这个标准解析。但我们提供的数据是升序排列,故设置参数 reverse=True。
接下来,我们通过 cerebro.adddata 将数据添加系统即可。
cerebro.adddata(data)将这部分实现补充到我们的系统中。
完整示例#
import datetime  # For datetime objects
import os.path  # To manage paths
import sys  # To find out the script name (in argv[0])
import backtrader as bt
if __name__ == '__main__':
    cerebro = bt.Cerebro()
    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    datapath = os.path.join(modpath, './datas/orcl-1995-2014.txt')
    data = bt.feeds.YahooFinanceCSVData(
        dataname=datapath,
        fromdate=datetime.datetime(2000, 1, 1),
        todate=datetime.datetime(2000, 12, 31),
        reverse=False)
    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())运行输出:
Starting Portfolio Value: 100000.00
Final Portfolio Value: 100000.00系统已经有了数据源,但资产并未增值,为什么?让我们继续下一节,策略(Strategy)类的学习。