公司做网站应记入哪个会计科目,wordpress谷歌地图插件,鹰潭市城乡建设局网站,赣州网站制作本系列是使用Backtrader在量化领域的学习与实践#xff0c;着重介绍Backtrader的使用。Backtrader 中几个核心组件#xff1a;
Cerebro#xff1a;BackTrader的基石#xff0c;所有的操作都是基于Cerebro的。Feed#xff1a;将运行策略所需的基础数据加载到Cerebro中着重介绍Backtrader的使用。Backtrader 中几个核心组件
CerebroBackTrader的基石所有的操作都是基于Cerebro的。Feed将运行策略所需的基础数据加载到Cerebro中一般为K线数据。IndicatorBackTader自带的指标并集成了talib中的指标。我们也可以选择继承一个Indicator实现自己的指标。Strategy交易策略。这里是整个过程中最复杂的部分需要我们计算买入/卖出信号。Analyzer分析器以图形和风险收益等指标对交易策略的回测结果进行分析评价。Order订单记录了与当前订单相关的所有数据。Trader交易记录了与当前交易相关的所有数据。Position持仓记录了与当前持仓相关的所有数据。Broker可以理解成经纪人整个策略的初始资金、交易费率、滑点等参数需要通过Broker进行设置。Observer观察者对数据进行监控观察比如资金曲线等等。Plotting可视化组件
本次介绍Backtrader中Broker模块其是Backtrader核心模块之一 Broker模拟经纪商交易系统相关功能。
在使用Backtrader时结合量化策略编写过程通常会考虑
Broker是什么它在回测时有什么作用Broker经纪商模块在资金管理、滑点管理等基础参数上在回测中如何使用Broker在交易撮合上都支持哪些模式…
Broker 经纪商模块
Broker模拟经纪商交易系统相关功能支持不同订单类型、对交易进行“验资验券”并模拟交易所进行交易撮合。最常见的有初始资金、交易税费、滑点、期货保证金比率等。 在 Backtrader 中从数据准备、策略编制、策略回测到绩效分析整个回测流程各个模块相互协调从交易流程大致如下
step1设置交易条件初始资金、交易税费、滑点、成交量限制等step2在 Strategy 策略逻辑中下达交易指令 buy、sell、close或取消交易 cancelstep3Order 模块会解读交易订单解读的信息将交由经纪商 Broker 模块处理step4经纪商 Broker 会根据订单信息检查订单并确定是否接收订单step5经纪商 Broker 接收订单后会按订单要求撮合成交 trade并进行成交结算step6Order 模块返回经纪商 Broker 中的订单执行结果。
在backtrader中做策略回测在策略运行前Broker实现账户资金、份额等信息初始化在回测过程中接受订单Order发出的信息并进行模拟撮合操作同时实时更新账户资金、份额信息。
Broker 支持的订单类型
Order.Market 按下一个 Bar 即生成订单的那个交易日的下一个交易日的开盘价来执行成交Order.Close 按下一个 Bar 的收盘价来执行成交Order.Limit 限价单需要指定成交价格只有达到指定价格limit Price或有更好价格时才会执行即以指定价或低于指点价买入以指点价或更高指定价卖出Order.Stop 止损单需要指定止损价格Stop Price一旦股价突破止损价格将会以市价单的方式成交Order.StopLimit 止损限价单需要指定止损价格Stop price和限价Limit Price一旦股价达到设置的止损价格将以限价单的方式下单Order.StopTrail 跟踪止损订单是一种止损价格会自动调整的止损单调整范围通过设置止损价格和市场价格之间的差价来确定Order.StopTrailLimit 跟踪止损限价单是一种止损价格会自动调整的止损限价单订单中的限价 Limit Price 不会发生变动止损价会发生变动变动逻辑与上面介绍的跟踪止损订单一致
Broker 如何管理参数
通过使用Broker实现初始资金、手续费、滑点等管理通过2中方式实现
方法1通过创建backtrader.brokers.BackBroker()实例 ,将该实例赋值与cerebro.broker # samples/cheat-on-open/cheat-on-open.pycerebro.broker bt.brokers.BackBroker()# 各参数初始值为# params (# (cash, 10000.0), # (checksubmit, True), # (eosbar, False),# (filler, None),# # slippage options# (slip_perc, 0.0),# (slip_fixed, 0.0),# (slip_open, False),# (slip_match, True),# (slip_limit, True),# (slip_out, False),# (coc, False),# (coo, False),# (int2pnl, True),# (shortcash, True),# (fundstartval, 100.0),# (fundmode, False),)方法2通过broker中的“set_xxx方法赋值或修改参数可通过get_xxx方法查看设置参数的值 # samples/slippage/slippage.pycerebro.broker.set_slippage_fixed(args.slip_fixed,slip_openargs.slip_open,slip_matchnot args.no_slip_match,slip_outargs.slip_out)Broker 资金与持仓如何管理
在backtrader中每次订单Order执行完后将更新持仓与金额。
如何了解策略回测资金情况
在策略执行前可以通过set_cash或setcash对资金进行初始化在策略执行过程中可调用add_cash(cash)调整资金cash 为正数表示增加资金cash 为负数表示减少资金。在执行过程中通过get_cash()或getcash查看持有资金。
如何了解策略回测持仓情况
通过getposition(data) 查看当前标的持仓数据
Broker ”滑点“ 提升成交率
在实盘和回测中为提高在”预期“价格成交概率通常会取个价格范围比如计划价格2.00元买入 实际买入价格2.02元。
在backtrader中提供了百分比滑点和固定滑点: 百分比滑点 假设percn%: 若计划买入价格为x实际成交买入价格x * (1 n% )若计划卖出价格为x实际成家卖出价格x * (1 - n%) BackBroker.set_slippage_perc(perc, slip_openTrue, slip_limitTrue, slip_matchTrue, slip_outFalse)固定滑点 假设fixedn 若计划买入价格为x实际成交买入价格x n若计划卖出价格为x实际成家卖出价格x - n BackBroker.set_slippage_fixed(fixed, slip_openTrue, slip_limitTrue, slip_matchTrue, slip_outFalse)在backtrader中不同的订单类型中slippage是如何工作的呢 Close 不支持该订单类型 Market 支持该订单类型 在Market订单类型即以开票价成交下需设置slip_open True。需要注意的是通过BackBroker() 实例化broker其默认值为False而通过方式2即set_slippage_perc和set_slipage_fixed 其默认值为True。 Limit 需要根据参数设置情况而定 如果匹配价格是开盘价则根据参数 slip_open 应用滑点。如果适用价格永远不会低于要求的限价如果匹配价格不是限价则滑点将应用于最高价/最低价。在这种情况下slip_mlimit适用于决定在超过上限的情况下是否会进行匹配 Stop 支持该订单类型 执行逻辑同Market订单类型逻辑 StopLimit 需要根据参数设置情况而定 执行逻辑同Limit订单类型逻辑
Broker 中的 ”Cheating 交易“
Backtrader 默认是 “当日收盘后下单次日以开盘价成交”这种模式在回测过程中能有效避免使用未来数据。 Backtrader 还提供了一些 cheating 式的交易时机模式Cheat-On-Open 和 Cheat-On-Close。
Cheat-On-Open 是“当日下单当日以开盘价成交”模式Cheat-On-Close 是“当日下单当日以收盘价成交”模式
cerebro bt.Cerebro(cheat_on_openTrue)Broker 中的 成交量限制
通过 Backtrader 中的 fillers 模块来限制实际成交量fillers 会告诉 Broker 在各个成交时间点应该成交多少量一共有 3 种形式
形式1bt.broker.fillers.FixedSize(size)形式2bt.broker.fillers.FixedBarPerc(perc)形式3bt.broker.fillers.BarPointPerc(minmov0.01perc100.0)
在 Broker 中使用Filler同样有两种方式
方式一通过broker中‘set_filler进行设置
import backtrader as btcerebro Cerebro()
cerebro.broker.set_filler(bt.broker.fillers.FixedSize())方式二通过创建backtrader.broker.BrokerBack(fillerfiller)实例赋值与broker
import backtrader as btcerebro Cerebro()
filler bt.broker.fillers.FixedSize()
newbroker bt.broker.BrokerBack(fillerfiller)
cerebro.broker newbrokerimport pandas as pd
import numpy as np%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
plt.rcParams[figure.figsize] 15, 15daily_price pd.read_csv(./data/daily_price.csv, parse_dates[datetime])# 筛选 600466.SH 和 603228.SH 2只股票的数据集
data1 daily_price.query(fsec_code600466.SH).set_index(datetime).drop(columns[sec_code])
data2 daily_price.query(fsec_code603228.SH).set_index(datetime).drop(columns[sec_code])