钱多多小栈
专注量化回测的站点

Backtrader-快速开始(加入数据源)

加入数据源

赚钱有趣,通过数据分析,不费力气赚钱更有趣。这才是我们的目的。(官方文档使用的时国外的在线数据。为了方便验证和逻辑,我这里准备了一份国内600000.SH浦发银行的csv数据,可以下载到本地使用)

继续完善上面的代码

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import datetime  # For datetime objects
import os.path  # To manage paths
import sys  # To find out the script name (in argv[0])

# Import the backtrader platform
import backtrader as bt

def get_dataframe():
     # Get a pandas dataframe
    datapath = './600000.SH_stockinfo.csv'
    tmpdatapath = './600000.SH_stockinfo_tmp.csv'
    print('-----------------------read csv---------------------------')
    dataframe = pd.read_csv(datapath,
                                skiprows=0,
                                header=0,
                                parse_dates=True,
                                index_col=0)
    dataframe.trade_date =  pd.to_datetime(dataframe.trade_date, format="%Y%m%d")
    dataframe['openinterest'] = '0'
    feedsdf = dataframe[['trade_date', 'open', 'high', 'low', 'close', 'vol', 'openinterest']]
    feedsdf.columns =['datetime', 'open', 'high', 'low', 'close', 'volume', 'openinterest']
    feedsdf.set_index(keys='datetime', inplace =True)
    feedsdf.iloc[::-1].to_csv(tmpdatapath)
    feedsdf = pd.read_csv(tmpdatapath, skiprows=0, header=0, parse_dates=True, index_col=0)
    if os.path.isfile(tmpdatapath):
        os.remove(tmpdatapath)
        print(tmpdatapath+" removed!")
    return feedsdf

if __name__ == '__main__':
    # Create a cerebro entity
    cerebro = bt.Cerebro()

    # Datas are in a subfolder of the samples. Need to find where the script is
    # because it could have been called from anywhere

    # Get a pandas dataframe
    #(获取dataframe格式股票数据,这里做了对csv格式的解析,数据转换为Cerebro需要的数据格式)
    feedsdf = get_dataframe()
    
    # Pass it to the backtrader datafeed and add it to the cerebro(加入数据)
    data = bt.feeds.PandasData(dataname=feedsdf)

    # Add the Data Feed to Cerebro
    cerebro.adddata(data)

    # Set our desired cash start
    cerebro.broker.setcash(100000.0)

    # Print out the starting conditions
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())

    # Run over everything
    cerebro.run()

    # Print out the final result
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
执行后,输出如下:
Starting Portfolio Value: 1000000.00
Final Portfolio Value: 1000000.00

样例代码变长,输出结果没有变化。中间增加了以下的内容:

如何读取本地的数据集

如何转换数据为cerebro需要的格式

如何将数据集增加到cerebro

未经允许不得转载:钱多多量化小栈 » Backtrader-快速开始(加入数据源)

评论 抢沙发

评论前必须登录!