Skip to main content

Stg_13_ShortdeepOTM

策略13文档

1. 策略逻辑介绍

当我们认为市场存在趋势的时候,我们只需要根据均线和市场最近的波动判断走势。如果产生了突破的机会,则我们的策略选择跟随动量short call/put。当在短期内看不到趋势或者趋势不明显的时候,我们选择short strangle来通过承担风险获得时间价值。

2.复权价格计算

对开盘当天之前的历史价格,需要根据日期读取一个权重文件,并用历史价格按照文件内的日期与权重相乘得到复权价格,下一部分的price_hist即使用复权后的价格

3. 信号参数

  1. past_days:采用过去past_days天的日内价格的平均值作为历史价格price_hist 原策略13是采用计算price_now的方式计算过去past_days个交易日的平均价格,且没有取对数 日内对数均价指的是给定从trade_start_morningtrade_end_morning以及从trade_start_afternoontrade_end_afternoon10s切片价格 Pi,i=1,,nP_i,i=1,\cdots,n ,则有平均价格price_hist =1ni=1nPi=\frac 1 n\sum_{i=1}^nP_i
  2. intra_obs:采用今天最后intra_obs个10s切片价格的平均作为今天的当天价格,不足intra_obs个时选择今天至少int(intra_obs*min_sample)个切片价格的平均作为今天的价格price_now。除当前切片外,之前的underlying价格均选择10s切片的underlying价格,当前切片则选择最新价格。当切片数量不满足要求时,price_now为空。
  3. hist_vol:采用昨天变量atm_vol的算术平均作为波动率 原策略13没有这个变量,自然也不需要在计算ratio_now的时候使用这个变量
  4. ratio:计算ratio_now=logprice_nowlogprice_histhist_vol=\frac{\log\mathrm{price\_now}-\log\mathrm{price\_hist}}{hist\_vol}的值与ratio作比。当price_now为空时,ratio_now也为空。

4. 期权行权价及到期时间的选择

  1. 到期时间:选择当前剩余交易日天数大于min_tenor天的到期时间中最短的那个期限。
  2. 行权价的选择:主要通过Delta值来完成。选定期限后,对于当前行情中的所有合约而言,当我们只需要开call/put时,选择Delta绝对值范围在single_delta_lowsingle_delta_high之间且Delta绝对值最大的合约;当我们需要开strangle时,选择Delta范围在strangle_delta_lowstrangle_delta_high之间的,且Delta之和的绝对值小于strangle_delta_bias的合约中delta之和的绝对值最小的合约对。当遇到两个要素完全一致的合约时,对于short方向来说,选择忽略掉ignore_vol后,bid价格最高的。

5. 开仓参数

原策略13有多个下单方向,目前这一策略仅有一个方向,即short

  1. 在下单前,首先计算准备下单合约的ask_px1/bid_px1,当该比值小于max_ask_bid_ratio时,订单均直接打对手价成交。
  2. trade_start_morning, trade_end_morning, trade_start_afternoontrade_end_afternoon:上午和下午开始和结束交易的时间,一般避开开盘后和收盘前的一段时间。
  3. 当策略当前没有持仓的时候,当ratio_now大于ratio时,空开put,并标记当前状态为short_put;当ratio_now小于-ratio时,空开call,并标记当前状态为short_call;当ratio_now绝对值小于ratio时,空开strangle,标记当前状态为short_strangle;当ratio_now无法计算得出时,当前状态为空。
  4. 当策略已有持仓的情况下,比较目标状态与当前状态,如果状态不一致,则比较目标合约与当前合约的差别,并下单消除这一差别。

6. 平仓参数

  1. 当目前持仓是call/put的情况下,在目标状态与当前状态一致的情况下,当持仓合约的delta绝对值值不再介于single_delta_low_exitsingle_delta_high_exit之间时,比较目标合约与当前合约的差距,并下单消除这一差距。
  2. 当目前持仓是strangle的情况下,在目标状态与当前状态一致的情况下,当持仓的合约delta之和的绝对值大于strangle_delta_max_bias时,比较目标合约与当前合约的差距,并下单消除这一差距。
  3. 当目前持仓tenor小于min_tenor时,平掉当前仓位,并根据目标状态和合约下单。

7. 策略最大开仓手数计算

实盘交易中,已知合约ii的做空保证金margini\mathrm{margin}_i和总可用资金total_capital,开盘前使用昨天14:57:00之前最后一个有效切片计算strangle组合所能开仓的最大手数total_capitalmargini+marginj\frac{\mathrm{total\_capital}}{\mathrm{margin}_i+\mathrm{margin}_j}并向下取整作为策略能开出的最大手数max_now备用,这一数值可以应用在所有开仓方向中。在盘中,max_now会随着strangle组合的变化实时更新,如果暂时没有strangle组合被选出,则选择目前最新的max_now

8. strangle开平仓算法

若当前最佳档位的挂单手数小于ignore_vol的时候,直接按照下一档定义目标档位。 定义当前目标合约i目标档位上的挂单量为 mkt_volimkt\_vol_i ,吃单比例为double_max_fak_ratio,则一次下单量为 z=mini[double_max_fak_ratio×mkt_voli]z=\min_i[\mathrm{double\_max\_fak\_ratio}\times \mathrm{mkt\_vol_i}],当目标档位非最佳档位时,前述下单量公式还需加入最佳档位的挂单手数,下单价格则一直为目标档位价格。 选择执行算法10来完成下单。

9. single开平仓算法

若当前最佳档位的挂单手数小于ignore_vol的时候,直接按照下一档定义目标档位。 定义当前目标合约i目标档位上的挂单量为 mkt_volimkt\_vol_i ,吃单比例为single_max_fak_ratio,则一次下单量为 [single_max_fak_ratio×mkt_voli][\mathrm{single\_max\_fak\_ratio}\times\mathrm{mkt\_vol_i}],当目标档位非最佳档位时,前述下单量公式还需加入最佳档位的挂单手数,下单价格则一直为目标档位价格。如果没有完全成交,则直接返回成交数量给策略。 当合约i全部收到交易所回执时定义算法状态为完成。

10. 策略调用执行算法逻辑

由于当前合约的delta计算和信号触发是由曲面变化和underlying变化驱动的,因此信号会在underlying行情推送后产生,从而产生调用执行算法的需求。具体而言,当每次执行算法收到完成回执后,根据最新的准备开平仓的合约订单簿来决定开平仓手数(因为期权的推送频率大约是0.5s一笔,而underlying大约是3s一笔,而执行算法消耗时间往往低于0.5s)。当由underlying/surface价格变化带来的信号触发后,第一次下单时记录对手第二档行情价格,记为cost。在收到第一次执行算法回执后,继续下单之前,当且仅当下单价格不差于cost时继续下单(买卖比较方向相反)。如果价格差于cost,则等待下一次信号, 下一次信号更新后,用第二档行情价格更新cost,重复以上过程。如果在调用执行期间状态发生变化,则参考状态转换算法。当组合数量达到max_now时自动停止,因而在确定开平仓手数之前,需要将挂单手数,与策略需求的最大挂单手数取最小值。如果超过pending_seconds秒状态没用变化且仍未完成max_now的数量,则不再调用执行算法。

11.状态转换算法

当信号出现后,给定策略当前等待平掉的(包括正在平仓而没有完成的和当前持有的)组合为 xtAx_t^A 手A,需要开仓的组合为 xtBx_t^B 手B(实际上由于行情变化和流动性, xtAx_t^A 并不保证同 xtBx_t^B 相等)。 当组合A与B之间存在方向和代码相同的合约时,应当首先平掉 xtAmin(xtA,xtB)x_t^A-\min(x_t^A,x_t^B)手A,其次开 min(xtA,xtB)\min(x_t^A,x_t^B) 手组合A与B之间不同的合约。 当组合A与B之间不存在代码和方向相同的合约时,需要根据组合性质选择上面的开平仓算法,首先平掉组合A,而后根据当前最新的信号选择开仓合约和方向。 当算法在执行过程中出现目标状态从A到B再到A的时候,如果这个时候还没完成A的平仓,且A尚未满足平仓条件,则按照当前的max_now继续开原来的A组合 At1A_{t-1} ,而不管最新给出的状态A目标组合 At+1A_{t+1}。如果A完成平仓了,则进入正常的状态转换逻辑。

12. 逻辑示意图

交易服务器信号收集

信号信号变量名称
策略名称Strategy
策略参数组ParameterGroup
目标状态target_state
当前状态current_state
当前价格price_now
当前动量ratio_now
持仓deltadelta
最大开仓max_now
目标puttarget_put
目标calltarget_call
当前putcurrent_put
当前callcurrent_call