Backtrader获取数据集当天的全部数据

在Backtrader中使用:

  • self.datas[0].getlinealiases():获得数据的列名
  • list(self.datas[0].lines):行的值
    因此组合一下:
	dict(zip(
	    self.datas[0].getlinealiases(),  # key
	    [i[0] for i in list(self.datas[0].lines)]  # value
	))

即可得到当前数据的全部值,其中zip()函数是将两个列表对应匹配并打包;dict()则是解包并转换为python字典格式

示例代码

from datetime import datetime
import backtrader
import pandas as pd
import efinance


def get_k_data(stock_code, begin: datetime, end: datetime) -> pd.DataFrame:
    """根据efinance工具包获取股票数据
    :param stock_code:股票代码
    :param begin: 开始日期
    :param end: 结束日期
    """
    # stock_code = '600519'  # 股票代码,茅台
    k_dataframe: pd.DataFrame = efinance.stock.get_quote_history(
        stock_code, beg=begin.strftime("%Y%m%d"), end=end.strftime("%Y%m%d"))
    k_dataframe = k_dataframe.iloc[:, :9]
    k_dataframe.columns = ['name', 'code', 'date', 'open', 'close', 'high', 'low', 'volume', 'turnover']
    k_dataframe.index = pd.to_datetime(k_dataframe.date)
    k_dataframe.drop(['name', 'code', "date"], axis=1, inplace=True)
    return k_dataframe


class MyStrategy1(backtrader.Strategy):  # 策略
    def __init__(self):
        # 初始化交易指令、买卖价格和手续费
        self.close_price = self.datas[0].close  # 这里加一个数据引用,方便后续操作

    def next(self):  # 固定的函数,框架执行过程中会不断循环next(),过一个K线,执行一次next()
        line_value = dict(zip(
            self.datas[0].getlinealiases(),  # key
            [i[0] for i in list(self.datas[0].lines)]  # value
        ))
        print('========================================')
        print("今天是:", self.datetime.date())
        print("当前数据的所有值:", line_value)


if __name__ == '__main__':
    # 获取数据
    start_time = datetime(2020, 1, 1)
    end_time = datetime(2021, 1, 1)
    dataframe = get_k_data('600519', begin=start_time, end=end_time)
    # =============== 为系统注入数据 =================
    # 加载数据
    data = backtrader.feeds.PandasData(dataname=dataframe, fromdate=start_time, todate=end_time)
    # 初始化cerebro回测系统
    cerebral_system = backtrader.Cerebro()  # Cerebro引擎在后台创建了broker(经纪人)实例,系统默认每个broker的初始资金量为10000
    # 将数据传入回测系统
    cerebral_system.adddata(data)  # 导入数据,在策略中使用 self.datas 来获取数据源
    # 将交易策略加载到回测系统中
    cerebral_system.addstrategy(MyStrategy1)
    # =============== 系统设置 ==================
    # 设置启动资金为 100000
    start_cash = 1000000
    cerebral_system.broker.setcash(start_cash)
    # 设置手续费 万2.5
    cerebral_system.broker.setcommission(commission=0.00025)
    # 运行回测系统
    cerebral_system.run()
首先,你需要安装akshare和backtrader这两个库,可以使用以下命令进行安装: ``` pip install akshare pip install backtrader ``` 接着,你需要从akshare获取股票数据。以获取上证指数为例,你可以使用以下代码: ```python import akshare as ak stock_zh_index_daily_df = ak.stock_zh_index_daily(symbol="sh000001", start_date="20000101") ``` 这将获取从2000年1月1日起的上证指数日线数据,并存储在一个名为`stock_zh_index_daily_df`的DataFrame中。 接下来,你需要使用backtrader来编写回测程序。以下是一个简单的回测例子: ```python import backtrader as bt class MyStrategy(bt.Strategy): def __init__(self): self.data_close = self.datas[0].close def next(self): if self.data_close[0] > self.data_close[-1]: self.buy() elif self.data_close[0] < self.data_close[-1]: self.sell() cerebro = bt.Cerebro() data = bt.feeds.PandasData(dataname=stock_zh_index_daily_df) cerebro.adddata(data) cerebro.addstrategy(MyStrategy) cerebro.run() ``` 这个例子中,我们定义了一个简单的策略:如果当前收盘价比前一天的收盘价高,则买入;反之,则卖出。我们使用`bt.feeds.PandasData()`将从akshare获取数据转换成backtrader所需的数据格式,并将其添加到回测系统中。然后,我们将策略添加到回测系统中,并运行回测。 注意,这只是一个简单的例子,你需要根据你的具体需求编写你自己的策略和回测程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值