历史文档

【历史文档】策略回测-如何在策略中设置滑点

由qxiao创建,最终由small_q 被浏览 513 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/data/home

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

导语

为了测试滑点给策略带来的影响,可以在平台策略的Trade模块中设置需要设置滑点模型。 常用滑点模型包含固定百分比滑点和固定金额滑点。

固定百分比滑点模型的实现

首先,我们通过重新定义FixedPriceSlippage类设置滑点spreads,本例中根据用户设置的spreads值(价格滑点的百分比),实现在买单的下单价格基础上乘以(1.0 + spreads),在卖单的下单价格基础上乘以(1.0 - spreads)。在该例子中我们在定义滑点价格的时候指定了股票的买入价格为开盘价price_field_buy=‘open’, 卖出价位收盘价 price_field_sell=‘close’,如果您的策略买入价/卖出价的设置不是这样,请适当修改以保证和策略一致。

fix_slippage = FixedPriceSlippage(price_field_buy=‘open’, price_field_sell=‘close’,spreads=0.01)

实现代码如下,只需将下面的代码粘贴到trade模块的初始化函数中即实现可设置固定百分比滑点模型

from zipline.finance.slippage import SlippageModel class FixedPriceSlippage(SlippageModel):

指定初始化函

def init(self, spreads, price_field_buy, price_field_sell):
self.spreads = spreads
self._price_field_buy = price_field_buy
self._price_field_sell = price_field_sell
def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
if order.limit is None:
price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell
price_base = data.current(order.asset, price_field)

买单的下单价格向上偏移 spreads百分比 , 卖单的下单价格向下偏移 spreads百分比

price = price_base * (1.0 + self.spreads) if order.amount > 0 else price_base * (1.0 - self.spreads) else: price = order.limit

返回希望成交的价格和数量

return (price, order.amount)

设置滑点模型

fix_slippage = FixedPriceSlippage(price_field_buy='open', price_field_sell='close',spreads=0.01)
context.set_slippage(us_equities=fix_slippage)`

固定金额滑点模型的实现

首先,我们通过重新定义FixedPriceSlippage类设置滑点spreads,本例中根据用户设置的spreads值(价格滑点的百分比),实现在买单的下单价格基础上加上 spreads 元,在卖单的下单价格基础上减去spreads 元。在该例子中我们在定义滑点价格的时候指定了股票的买入价格为开盘价price_field_buy=‘open’,卖出价位收盘价 price_field_sell=‘close’,如果您的策略买入价/卖出价的设置不是这样,请适当修改以保证和策略一致。

实现代码如下,只需将下面的代码粘贴到trade模块的初始化函数中即实现可设置固定金额滑点模型。

from zipline.finance.slippage import SlippageModel class FixedPriceSlippage(SlippageModel):

指定初始化函数

def init(self, spreads, price_field_buy, price_field_sell):
self.spreads = spreads
self._price_field_buy = price_field_buy
self._price_field_sell = price_field_sell
def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
if order.limit is None:
price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell
price_base = data.current(order.asset, price_field)

买单的下单价格向上偏移 spreads元 , 卖单的下单价格向下偏移 spreads元

price = price_base  + spreads  if order.amount > 0 else price_base  -  spreads else: price = order.limit

返回希望成交的价格和数量

return (price, order.amount)

设置滑点模型

fix_slippage = FixedPriceSlippage(price_field_buy='open', price_field_sell='close',spreads=0.01)
context.set_slippage(us_equities=fix_slippage)`

结语:本例通过两段示例代码展示了如何通过重定义下单价格,通过修改下单价格实现滑点模型。

\

{link}