如何实现以下逻辑?价格大于M1时,开仓买入认沽期权,如果有认购持仓,则平仓认购期权;价格小于M1时,如果持有认沽持仓,则平仓认沽,买入认购。
可以参考以下代码:
g.biaodi = '510050.SHSE' #设置标的 dyndata = GetQuote(g.biaodi) #获取标的实时行情 g.atmopc = GetAtmOptionContract(g.biaodi, 0, dyndata.now, 0) #获取当月平值认购期权 g.atmopp = GetAtmOptionContract(g.biaodi, 0, dyndata.now, 1) #获取当月平值认沽期权 posi = context.myacc.GetPositions() #获取所有持仓 price_type = PriceType(PbPriceType.Limit, 16, 0) #使用限价下单 if dyndata.now > M1: #当最新价大于M1 QuickInsertOrder(context.myacc, g.atmopp, 'buy', 'open', price_type, 5) #买入认沽期权 print("买入认沽期权") if posi: #如果有持仓,对于每一笔持仓判断是否为认购期权 for p in posi: info = GetContractInfo(p.contract) #获取持仓合约基本信息 if info["期权种类"] == 0: #如果为认购期权,则平仓 QuickInsertOrder(context.myacc, p.contract, 'sell', 'close', price_type, p.volume) print("认购期权平仓") if dyndata.now < M1: #当最新价小于M1 QuickInsertOrder(context.myacc, g.atmopc, 'buy', 'open', price_type, 5) #买入认购期权 print("买入认购期权") if posi: #如果有持仓,对于每一笔持仓判断是否为认沽期权 for p in posi: info = GetContractInfo(p.contract) #获取持仓合约基本信息 if info["期权种类"] == 1:#如果为认沽期权,则平仓 QuickInsertOrder(context.myacc, p.contract, 'sell', 'close', price_type, p.volume) print("认沽期权平仓")
可以参考以下代码: