/// <summary> /// 跨式期权开仓 /// </summary> /// <param name="dataToday"></param> /// <param name="signal"></param> /// <param name="positions"></param> /// <param name="myAccount"></param> /// <param name="pairs"></param> /// <param name="today"></param> /// <param name="index"></param> /// <param name="duration"></param> private void openStrangle(ref Dictionary <string, List <KLine> > dataToday, ref Dictionary <string, MinuteSignal> signal, ref SortedDictionary <DateTime, Dictionary <string, PositionsWithDetail> > positions, ref BasicAccount myAccount, ref SortedDictionary <DateTime, List <StranglePair> > pairs, DateTime today, int index, double duration) { DateTime now = TimeListUtility.IndexToMinuteDateTime(Kit.ToInt_yyyyMMdd(today), index); double etfPriceNow = dataToday[targetVariety][index].open; var optionInfoList = OptionUtilities.getUnmodifiedOptionInfoList(this.optionInfoList, today); //选取指定的看涨期权 var list = OptionUtilities.getOptionListByDate(OptionUtilities.getOptionListByStrike(OptionUtilities.getOptionListByOptionType(OptionUtilities.getOptionListByDuration(optionInfoList, today, duration), "认购"), etfPriceNow, etfPriceNow + 0.5), Kit.ToInt_yyyyMMdd(today)).OrderBy(x => x.strike).ToList(); OptionInfo call = list[0]; //根据给定的看涨期权选取对应的看跌期权 OptionInfo put = OptionUtilities.getCallByPutOrPutByCall(optionInfoList, call); if (call.strike != 0 && put.strike != 0 && (call.modifiedDate > today.AddDays(10) || call.modifiedDate < today)) //跨式期权组合存在进行开仓 { tradeAssistant(ref dataToday, ref signal, call.optionCode, call.contractMultiplier, today, now, index); tradeAssistant(ref dataToday, ref signal, put.optionCode, put.contractMultiplier, today, now, index); StranglePair openPair = new StranglePair() { callCode = call.optionCode, putCode = put.optionCode, callPosition = call.contractMultiplier, putPosition = put.contractMultiplier, endDate = call.endDate, etfPrice = etfPriceNow, callStrike = call.strike, putStrike = put.strike, modifiedDate = now, strangleOpenPrice = dataToday[call.optionCode][index].open + dataToday[put.optionCode][index].open, closeDate = new DateTime(), closePrice = 0 }; List <StranglePair> pairList = new List <StranglePair>(); pairList.Add(openPair); pairs.Add(now, pairList); MinuteTransactionWithBar.ComputePosition(signal, dataToday, ref positions, ref myAccount, slipPoint: slipPoint, now: now, nowIndex: index); } }