指定低于开盘价2%买入的双均线策略
由polll创建,最终由iquant 被浏览 291 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,相关策略请参考以下链接:
https://bigquant.com/wiki/doc/124-exuI9VGX1a
https://bigquant.com/wiki/doc/5z66yer5ym5z2h57q562w55wl-F6yoWKprOq
本策略主要分享如何以指定价格来买入或卖出股票。
平台回测支持不同的滑点模型,相关的文档可以参考:https://bigquant.com/docs/develop/modules/trade/settings_methods.html
该滑点模型只能在 initialization 中调用及设置。滑点一般指真实的成交价位与预设的成交价位之间出现偏移,这种偏移一般是向不利于交易者的方向移动,导致交易出现额外的损失。比如,当我们下单交易时,我们的订单会影响市场,买单驱使价格上涨,卖单驱使价格下滑,价格影响的大小取决于您的订单和当前交易量相比有多大。如果您的订单太大,那么滑点方法也会进行评估:您的交易量不能超过市场的容量,通常您也不能期望交易量超过一小部分(比如百分之5,举牌)。所有这些概念都被封装在了set_slippage方法中。当订单因为不满足滑点条件没有完全成交,未成交的部分仍然可以在第二天继续成交。这会持续直到订单完全成交或被取消。
该策略中,我们的目的是用低于开盘价2%的价格买入股票,此时,就可以利用滑点模型:
class FixedPriceSlippage(SlippageModel):
def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
if order.amount > 0:
open_price = data.current(order.asset, self._price_field_buy)
price = open_price * 0.98
else:
price = data.current(order.asset, self._price_field_sell)
return (price, order.amount)
context.fix_slippage = FixedPriceSlippage(price_field_buy="open", price_field_sell="close")
context.set_slippage(us_equities=context.fix_slippage)
并且,我们还需要在每天的盘前处理函数来处理这些发出的信号,比对当天的最低价是否在开盘价的98%之下,如果不是,则需要取消订单:
# 判断订单股票的最低价是否低于开盘价的98%
def bigquant_run(context, data):
for orders in get_open_orders().values():
for _order in orders:
ins = _order.sid
try:
# 如果当日最低价高于开盘价的98%,则取消订单
low_ = data.current(ins, "low")
open_ = data.current(ins, "open")
if open_ * 0.98 < low_:
context.cancel_order(order.id)
print(f"{data.current_dt}由于开盘价的98%低于最低价,取消订单{ins}")
except:
continue
策略案例
https://bigquant.com/experimentshare/768e7746438d4616b9dc046ac2e2372c
\