策略分享

指定低于开盘价2%买入的双均线策略

由polll创建,最终由iquant 被浏览 285 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,相关策略请参考以下链接:

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

\

标签

双均线策略金融交易量化交易交易策略回测结果