文华买卖权平价策略代码源码[文华财经公式]
①什么是买卖权平价关系?
买卖权平价关系是指具有相同的到期日与执行价格的金融工具,其卖权与买权价格间必然存在的基本关系。如果两者不相同,则存在套利的空间。
欧式期权的平价关系可以表示为:
其中,C为看涨期权的当期的理论价格,P为看跌期权当期的理论价格,1年期无风险利率为r,行权价为K,为某股票现在的价格。
②根据买卖权平价关系推导套利条件
在上述理论的基础上,Tucker根据股指期货和股指期权之间的价格关系阐述了期货与期权的平价关系,并运用这一均衡关系来发现市场的套利机会并验证市场效率。
该理论假设:1)期权为欧式期权。2)税收、手续费等交易成本不计。3)借贷利率相等。
在t时刻,期货和期权的平价关系可表示为:
F为t时刻期货价格,T为期权到期日,C、P分别是看涨看跌期权的价格,r为无风险利率,贴现因子以年化无风险利率计算,通常考虑一个月内(1/12),其数值接近于1,进而上述关系可简化为:
由上式可以推导出套利开仓条件:
策略 | ||
C-P>F-K | 看涨期权价格被高估,看跌期权价格被低估 | 卖出看涨期权,买入看跌期权 |
C-P<F-K | 看涨期权价格被低估,看跌期权价格被高估 | 买入看涨期权,卖出看跌期权 |
③将上述策略编写为策略模型
Data CODC0:"m2209-C-4200"; //看涨期权 CODP0:"m2209-P-4200"; //看跌期权 CODC1:"m2209-C-4150"; //看涨期权 CODP1:"m2209-P-4150"; //看跌期权 CODC2:"m2209-C-4100"; //看涨期权 CODP2:"m2209-P-4100"; //看跌期权 CODC3:"m2209-C-4050"; //看涨期权 CODP3:"m2209-P-4050"; //看跌期权 CODC4:"m2209-C-4000"; //看涨期权 CODP4:"m2209-P-4000"; //看跌期权 COD:"m2209"; //标的期货 Vars StringArray CODC; //看涨期权 StringArray CODP; //看跌期权 String CODF; //标的期货 Numeric CDN; //期权合约数量 Numeric N; //下单手数 Numeric X; //循环变量 Numeric T; //时间间隔 Numeric D; //日期间隔 Numeric TOD; //当前日期 Numeric NOW; //当前时间 Numeric NEWPF; //F最新价 Numeric OPFLG; //模型处理标志 NumericArray STP; //行权价 NumericArray NEWPC; //C最新价 NumericArray NEWPP; //P最新价 NumericArray EPDC; //C行权日期 NumericArray EPDP; //P行权日期 NumericArray RTSC; //C距行权日剩余天数 NumericArray RTSP; //P距行权日剩余天数 NumericArray RLPC,FLPC; //C涨跌停价 NumericArray RLPP,FLPP; //P涨跌停价 NumericArray BIDPC,ASKPC; //C买卖一价 NumericArray BIDPP,ASKPP; //P买卖一价 NumericArray BRPC,SRPC; //C多空头可用持仓 NumericArray BRPP,SRPP; //P多空头可用持仓 NumericArray BKDFLGC,SKDFLGC; //C开仓处理标志 NumericArray BPDFLGC,SPDFLGC; //C开仓处理标志 NumericArray BKDFLGP,SKDFLGP; //P开仓处理标志 NumericArray BPDFLGP,SPDFLGP; //P开仓处理标志 Global_NumericArray KCFLG; //开仓处理标志 Global_NumericArray KPFLG; //开平处理标志 Global_NumericArray BKIDC,SKIDC; //C开仓委托 Global_NumericArray BPIDC,SPIDC; //C平仓委托 Global_NumericArray BKIDP,SKIDP; //P开仓委托 Global_NumericArray BPIDP,SPIDP; //P平仓委托 Global_NumericArray BKFLGC,SKFLGC; //C开仓标志 Global_NumericArray BPFLGC,SPFLGC; //C平仓标志 Global_NumericArray BKFLGP,SKFLGP; //P开仓标志 Global_NumericArray BPFLGP,SPFLGP; //P平仓标志 Global_NumericArray BKDELC,SKDELC; //C开仓撤单标志 Global_NumericArray BKDELP,SKDELP; //P开仓撤单标志 Global_NumericArray BKMC,SKMC; //C开仓委托手数 Global_NumericArray BPMC,SPMC; //C平仓委托手数 Global_NumericArray BKMP,SKMP; //P开仓委托手数 Global_NumericArray BPMP,SPMP; //P平仓委托手数 Global_NumericArray BKPC,SKPC; //C开仓委托价格 Global_NumericArray BPPC,SPPC; //C平仓委托价格 Global_NumericArray BKPP,SKPP; //P开仓委托价格 Global_NumericArray BPPP,SPPP; //P平仓委托价格 Global_NumericArray BKTC,SKTC; //C开仓委托时间 Global_NumericArray BKTP,SKTP; //P开仓委托时间 Begin //------------------------处理开启------------------------// If(1) //处理开启 { CODC[0] = "m2209-C-4200"; //看涨期权 CODP[0] = "m2209-P-4200"; //看跌期权 CODC[1] = "m2209-C-4150"; //看涨期权 CODP[1] = "m2209-P-4150"; //看跌期权 CODC[2] = "m2209-C-4100"; //看涨期权 CODP[2] = "m2209-P-4100"; //看跌期权 CODC[3] = "m2209-C-4050"; //看涨期权 CODP[3] = "m2209-P-4050"; //看跌期权 CODC[4] = "m2209-C-4000"; //看涨期权 CODP[4] = "m2209-P-4000"; //看跌期权 CDN = GetStringArraySize(CODC); //期权合约数量 CODF = "m2209"; //标的期货 OPFLG = 1; //开启模型处理 If(CODF.A_IsExchangeOpen() != 1) //如果非开盘状态 { OPFLG = 2; //关闭模型处理 } For X = 0 To CDN - 1 //遍历期权合约 { If(CODC[X].A_IsExchangeOpen() != 1 || CODP[X].A_IsExchangeOpen() != 1) //如果非开盘状态 { OPFLG = 2; //关闭模型处理 } } } //------------------------变量赋值------------------------// If(OPFLG == 1) //变量赋值 { N = 1; //下单手数 T = 15; //时间间隔 D = 5; //日期间隔 TOD = CurrentDate(); //当前日期 NOW = CurrentTime(); //当前时间 NEWPF = CODF.Price("New"); //F最新价 For X = 0 To CDN - 1 //遍历期权合约 { NEWPC[X] = CODC[X].Price("New"); //C最新价 NEWPP[X] = CODP[X].Price("New"); //P最新价 BIDPC[X] = CODC[X].Price("Bid1"); //C买一价 ASKPC[X] = CODC[X].Price("Ask1"); //C卖一价 BIDPP[X] = CODP[X].Price("Bid1"); //P买一价 ASKPP[X] = CODP[X].Price("Ask1"); //P卖一价 RLPC[X] = CODC[X].Price("RiseLimit"); //C涨停价 FLPC[X] = CODC[X].Price("FallLimit"); //C跌停价 RLPP[X] = CODP[X].Price("RiseLimit"); //P涨停价 FLPP[X] = CODP[X].Price("FallLimit"); //P跌停价 BIDPC[X] = IIF(BIDPC[X] == 0 && NEWPC[X] == FLPC[X],FLPC[X],BIDPC[X]); //C买一价 ASKPC[X] = IIF(ASKPC[X] == 0 && NEWPC[X] == RLPC[X],RLPC[X],ASKPC[X]); //C卖一价 BIDPP[X] = IIF(BIDPP[X] == 0 && NEWPP[X] == FLPP[X],FLPP[X],BIDPP[X]); //P买一价 ASKPP[X] = IIF(ASKPP[X] == 0 && NEWPP[X] == RLPP[X],RLPP[X],ASKPP[X]); //P卖一价 STP[X] = CODC[X].Price("StrikePrice"); //行权价 EPDC[X] = CODC[X].Price("ExpirationDate"); //C行权日期 EPDP[X] = CODP[X].Price("ExpirationDate"); //P行权日期 RTSC[X] = DateDiff(TOD,EPDC[X] ); //C距行权日剩余天数 RTSP[X] = DateDiff(TOD,EPDP[X] ); //P距行权日剩余天数 BRPC[X] = CODC[X].F_BuyRemainPosition(); //C多头可用持仓 SRPC[X] = CODC[X].F_SellRemainPosition(); //C空头可用持仓 BRPP[X] = CODP[X].F_BuyRemainPosition(); //P多头可用持仓 SRPP[X] = CODP[X].F_SellRemainPosition(); //P空头可用持仓 BRPC[X] = Min(BRPC[X],CODC[X].A_BuyRemainPosition()); //C多头可用持仓 SRPC[X] = Min(SRPC[X],CODC[X].A_SellRemainPosition()); //C空头可用持仓 BRPP[X] = Min(BRPP[X],CODP[X].A_BuyRemainPosition()); //P多头可用持仓 SRPP[X] = Min(SRPP[X],CODP[X].A_SellRemainPosition()); //P空头可用持仓 } } //------------------------成交判断------------------------// If(OPFLG == 1) //成交判断 { For X = 0 To CDN - 1 //遍历期权合约 { If(BKFLGC[X] == 1) //如果有C买开委托 { If(F_OrderStatus(BKIDC[X]) == Enum_Filled) //如果C买开委托成交 { Commentary("【多头开仓:C买开委托" + Text(X + 1) + "成交!】"); BKFLGC[X] = 0; //C买开标志归0 BKDELC[X] = 0; //C买开撤单标志归0 } Else If(F_OrderStatus(BKIDC[X]) == Enum_Canceled) //如果C买开委托已撤 { Commentary("【多头开仓:C买开委托" + Text(X + 1) + "已撤!】"); If(F_OrderFilledLot(BKIDC[X]) > 0) //如果C买开委托部分成交 { BKMC[X] = BKMC[X] - F_OrderFilledLot(BKIDC[X]); //C买开委托手数 } If(BKMC[X] > 0) //如果C买开委托手数大于0 { BKPC[X] = RLPC[X]; //C买开委托价格 Commentary("【多头开仓:C买开委托" + Text(X + 1) + "发出!】"); BKIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMC[X],BKPC[X]); //发出C买开委托 } BKDELC[X] = 0; //C买开撤单标志归0 } Else If(F_OrderStatus(BKIDC[X]) == Enum_Declared || F_OrderStatus(BKIDC[X]) == Enum_FillPart) //如果C买开委托挂单 { If(BKDELC[X] == 0) //如果未撤单 { If(TimeDiff(BKTC[X],NOW) >= T && BKPC[X] != RLPC[X]) //如果时间间隔T秒 { Commentary("【多头开仓:C买开委托" + Text(X + 1) + "撤单!】"); CODC[X].A_DeleteOrder(F_OrderContractNo(BKIDC[X])); //撤掉C买开委托挂单 BKDELC[X] = 1; //已发出撤掉C买开委托挂单 } } } Else If(F_OrderStatus(BKIDC[X]) == Enum_Deleted) //如果C买开委托废单 { Commentary("【多头开仓:C买开委托" + Text(X + 1) + "废单!】"); BKFLGC[X] = 0; //C买开标志归0 } } If(SPFLGC[X] == 1) //如果有C卖平委托 { If(F_OrderStatus(SPIDC[X]) == Enum_Filled) //如果C卖平委托成交 { Commentary("【多头平仓:C卖平委托" + Text(X + 1) + "成交!】"); SPFLGC[X] = 0; //C卖平标志归0 } Else If(F_OrderStatus(SPIDC[X]) == Enum_Deleted) //如果C卖平委托废单 { Commentary("【多头平仓:C卖平委托" + Text(X + 1) + "废单!】"); SPFLGC[X] = 0; //C卖平标志归0 } } If(SKFLGC[X] == 1) //如果有C卖开委托 { If(F_OrderStatus(SKIDC[X]) == Enum_Filled) //如果C卖开委托成交 { Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "成交!】"); SKFLGC[X] = 0; //C卖开标志归0 SKDELC[X] = 0; //C卖开撤单标志归0 } Else If(F_OrderStatus(SKIDC[X]) == Enum_Canceled) //如果C卖开委托已撤 { Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "已撤!】"); If(F_OrderFilledLot(SKIDC[X]) > 0) //如果C卖开委托部分成交 { SKMC[X] = SKMC[X] - F_OrderFilledLot(SKIDC[X]); //C卖开委托手数 } If(SKMC[X] > 0) //如果C卖开委托手数大于0 { SKPC[X] = FLPC[X]; //C卖开委托价格 Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "发出!】"); SKIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMC[X],SKPC[X]); //发出C卖开委托 } SKDELC[X] = 0; //C卖开撤单标志归0 } Else If(F_OrderStatus(SKIDC[X]) == Enum_Declared || F_OrderStatus(SKIDC[X]) == Enum_FillPart) //如果C卖开委托挂单 { If(SKDELC[X] == 0) //如果未撤单 { If(TimeDiff(SKTC[X],NOW) >= T && SKPC[X] != FLPC[X]) //如果时间间隔T秒 { Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "撤单!】"); CODC[X].A_DeleteOrder(F_OrderContractNo(SKIDC[X])); //撤掉C卖开委托挂单 SKDELC[X] = 1; //已发出撤掉C卖开委托挂单 } } } Else If(F_OrderStatus(SKIDC[X]) == Enum_Deleted) //如果C卖开委托废单 { Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "废单!】"); SKFLGC[X] = 0; //C卖开标志归0 } } If(BPFLGC[X] == 1) //如果有C买平委托 { If(F_OrderStatus(BPIDC[X]) == Enum_Filled) //如果C买平委托成交 { Commentary("【空头平仓:C买平委托" + Text(X + 1) + "成交!】"); BPFLGC[X] = 0; //C买平标志归0 } Else If(F_OrderStatus(BPIDC[X]) == Enum_Deleted) //如果C买平委托废单 { Commentary("【空头平仓:C买平委托" + Text(X + 1) + "废单!】"); BPFLGC[X] = 0; //C买平标志归0 } } If(BKFLGP[X] == 1) //如果有P买开委托 { If(F_OrderStatus(BKIDP[X]) == Enum_Filled) //如果P买开委托成交 { Commentary("【多头开仓:P买开委托" + Text(X + 1) + "成交!】"); BKFLGP[X] = 0; //P买开标志归0 BKDELP[X] = 0; //P买开撤单标志归0 } Else If(F_OrderStatus(BKIDP[X]) == Enum_Canceled) //如果P买开委托已撤 { Commentary("【多头开仓:P买开委托" + Text(X + 1) + "已撤!】"); If(F_OrderFilledLot(BKIDP[X]) > 0) //如果P买开委托部分成交 { BKMP[X] = BKMP[X] - F_OrderFilledLot(BKIDP[X]); //P买开委托手数 } If(BKMP[X] > 0) //如果P买开委托手数大于0 { BKPP[X] = RLPP[X]; //P买开委托价格 Commentary("【多头开仓:P买开委托" + Text(X + 1) + "发出!】"); BKIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMP[X],BKPP[X]); //发出P买开委托 } BKDELP[X] = 0; //P买开撤单标志归0 } Else If(F_OrderStatus(BKIDP[X]) == Enum_Declared || F_OrderStatus(BKIDP[X]) == Enum_FillPart) //如果P买开委托挂单 { If(BKDELP[X] == 0) //如果未撤单 { If(TimeDiff(BKTP[X],NOW) >= T && BKPP[X] != RLPP[X]) //如果时间间隔T秒 { Commentary("【多头开仓:P买开委托" + Text(X + 1) + "撤单!】"); CODP[X].A_DeleteOrder(F_OrderContractNo(BKIDP[X])); //撤掉P买开委托挂单 BKDELP[X] = 1; //已发出撤掉P买开委托挂单 } } } Else If(F_OrderStatus(BKIDP[X]) == Enum_Deleted) //如果P买开委托废单 { Commentary("【多头开仓:P买开委托" + Text(X + 1) + "废单!】"); BKFLGP[X] = 0; //P买开标志归0 } } If(SPFLGP[X] == 1) //如果有P卖平委托 { If(F_OrderStatus(SPIDP[X]) == Enum_Filled) //如果P卖平委托成交 { Commentary("【多头平仓:P卖平委托" + Text(X + 1) + "成交!】"); SPFLGP[X] = 0; //P卖平标志归0 } Else If(F_OrderStatus(SPIDP[X]) == Enum_Deleted) //如果P卖平委托废单 { Commentary("【多头平仓:P卖平委托" + Text(X + 1) + "废单!】"); SPFLGP[X] = 0; //P卖平标志归0 } } If(SKFLGP[X] == 1) //如果有P卖开委托 { If(F_OrderStatus(SKIDP[X]) == Enum_Filled) //如果P卖开委托成交 { Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "成交!】"); SKFLGP[X] = 0; //P卖开标志归0 SKDELP[X] = 0; //P卖开撤单标志归0 } Else If(F_OrderStatus(SKIDP[X]) == Enum_Canceled) //如果P卖开委托已撤 { Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "已撤!】"); If(F_OrderFilledLot(SKIDP[X]) > 0) //如果P卖开委托部分成交 { SKMP[X] = SKMP[X] - F_OrderFilledLot(SKIDP[X]); //P卖开委托手数 } If(SKMP[X] > 0) //如果P卖开委托手数大于0 { SKPP[X] = FLPP[X]; //P卖开委托价格 Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "发出!】"); SKIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMP[X],SKPP[X]); //发出P卖开委托 } SKDELP[X] = 0; //P卖开撤单标志归0 } Else If(F_OrderStatus(SKIDP[X]) == Enum_Declared || F_OrderStatus(SKIDP[X]) == Enum_FillPart) //如果P卖开委托挂单 { If(SKDELP[X] == 0) //如果未撤单 { If(TimeDiff(SKTP[X],NOW) >= T && SKPP[X] != FLPP[X]) //如果时间间隔T秒 { Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "撤单!】"); CODP[X].A_DeleteOrder(F_OrderContractNo(SKIDP[X])); //撤掉P卖开委托挂单 SKDELP[X] = 1; //已发出撤掉P卖开委托挂单 } } } Else If(F_OrderStatus(SKIDP[X]) == Enum_Deleted) //如果P卖开委托废单 { Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "废单!】"); SKFLGP[X] = 0; //P卖开标志归0 } } If(BPFLGP[X] == 1) //如果有P买平委托 { If(F_OrderStatus(BPIDP[X]) == Enum_Filled) //如果P买平委托成交 { Commentary("【空头平仓:P买平委托" + Text(X + 1) + "成交!】"); BPFLGP[X] = 0; //P买平标志归0 } Else If(F_OrderStatus(BPIDP[X]) == Enum_Deleted) //如果P买平委托废单 { Commentary("【空头平仓:P买平委托" + Text(X + 1) + "废单!】"); BPFLGP[X] = 0; //P买平标志归0 } } } } //------------------------开平处理------------------------// If(OPFLG == 1) //开平处理 { For X = 0 To CDN - 1 //遍历期权合约 { If(BKFLGC[X] == 0 && SPFLGC[X] == 0 && SKFLGC[X] == 0 && BPFLGC[X] == 0 && BKFLGP[X] == 0 && SPFLGP[X] == 0 && SKFLGP[X] == 0 && BPFLGP[X] == 0) //如果没有开平仓委托 { If(RTSC[X] > D && RTSC[X] > D) //如果满足开平仓条件 { If(KCFLG[X] == 0) //如果未执行平仓处理 { If(KPFLG[X] == 0 || KPFLG[X] == 2) //如果未执行开平处理1 { If(NEWPC[X] - NEWPP[X] > NEWPF - STP[X]) //如果满足平仓条件 { SPDFLGC[X] = 1; //开启C卖平处理 BPDFLGP[X] = 1; //开启P买平处理 KPFLG[X] = 1; //已执行开平处理1 KCFLG[X] = 1; //已执行平仓处理 } } If(KPFLG[X] == 0 || KPFLG[X] == 1) //如果未执行开平处理2 { If(NEWPC[X] - NEWPP[X] < NEWPF - STP[X]) //如果满足平仓条件 { BPDFLGC[X] = 1; //开启C买平处理 SPDFLGP[X] = 1; //开启P卖平处理 KPFLG[X] = 2; //已执行开平处理2 KCFLG[X] = 1; //已执行平仓处理 } } } Else If(KCFLG[X] == 1) //如果已执行平仓处理 { If(KPFLG[X] == 1) //如果已执行开平处理1 { SKDFLGC[X] = 1; //开启C卖开处理 BKDFLGP[X] = 1; //开启P买开处理 } Else If(KPFLG[X] == 2) //如果已执行开平处理2 { BKDFLGC[X] = 1; //开启C买开处理 SKDFLGP[X] = 1; //开启P卖开处理 } KCFLG[X] = 0; //开仓处理标志归0 } } Else If(RTSC[X] <= D || RTSP[X] <= D) //如果满足清仓条件 { If(KPFLG[X] == 1) //如果已执行开平处理1 { BPDFLGC[X] = 1; //开启C买平处理 SPDFLGP[X] = 1; //开启P卖平处理 KCFLG[X] = 0; //开仓处理标志归0 KPFLG[X] = 0; //开平处理标志归0 } Else If(KPFLG[X] == 2) //如果已执行开平处理2 { SPDFLGC[X] = 1; //开启C卖平处理 BPDFLGP[X] = 1; //开启P买平处理 KCFLG[X] = 0; //开仓处理标志归0 KPFLG[X] = 0; //开平处理标志归0 } } } } } //------------------------委托处理------------------------// If(OPFLG == 1) //委托处理 { For X = 0 To CDN - 1 //遍历期权合约 { If(BKDFLGC[X] == 1) //如果已开启C买开处理 { If(BKFLGC[X] == 0) //如果没有C买开委托 { BKMC[X] = N; //C买开委托手数 BKPC[X] = ASKPC[X]; //C买开委托价格 Commentary("【多头开仓:C买开委托" + Text(X + 1) + "发出!】"); BKIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMC[X],BKPC[X]); //发出C买开委托 BKTC[X] = NOW; //C买开委托时间 BKFLGC[X] = 1; //已发出C买开委托 } } If(SPDFLGC[X] == 1) //如果已开启C卖平处理 { If(SPFLGC[X] == 0) //如果没有C卖平委托 { If(BRPC[X] >= N) //如果C多头可用持仓达到N手 { SPMC[X] = N; //C卖平委托手数 WWW.CXH99.COM SPPC[X] = BIDPC[X]; //C卖平委托价格 Commentary("【多头平仓:C卖平委托" + Text(X + 1) + "发出!】"); SPIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMC[X],SPPC[X]); //发出C卖平委托 SPFLGC[X] = 1; //已发出C卖平委托 } } } If(SKDFLGC[X] == 1) //如果已开启C卖开处理 { If(SKFLGC[X] == 0) //如果没有C卖开委托 { SKMC[X] = N; //C卖开委托手数 SKPC[X] = BIDPC[X]; //C卖开委托价格 Commentary("【空头开仓:C卖开委托" + Text(X + 1) + "发出!】"); SKIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMC[X],SKPC[X]); //发出C卖开委托 SKTC[X] = NOW; //C卖开委托时间 SKFLGC[X] = 1; //已发出C卖开委托 } } If(BPDFLGC[X] == 1) //如果已开启C买平处理 { If(BPFLGC[X] == 0) //如果没有C买平委托 { If(SRPC[X] >= N) //如果C空头可用持仓达到N手 { BPMC[X] = N; //C买平委托手数 BPPC[X] = ASKPC[X]; //C买平委托价格 Commentary("【空头平仓:C买平委托" + Text(X + 1) + "发出!】"); BPIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMC[X],BPPC[X]); //发出C买平委托 BPFLGC[X] = 1; //已发出C买平委托 } } } If(BKDFLGP[X] == 1) //如果已开启P买开处理 { If(BKFLGP[X] == 0) //如果没有P买开委托 { BKMP[X] = N; //P买开委托手数 WWW.CXH99.COM BKPP[X] = ASKPP[X]; //P买开委托价格 Commentary("【多头开仓:P买开委托" + Text(X + 1) + "发出!】"); BKIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMP[X],BKPP[X]); //发出P买开委托 BKTP[X] = NOW; //P买开委托时间 BKFLGP[X] = 1; //已发出P买开委托 } } If(SPDFLGP[X] == 1) //如果已开启P卖平处理 { If(SPFLGP[X] == 0) //如果没有P卖平委托 { If(BRPP[X] >= N) //如果P多头可用持仓达到N手 { SPMP[X] = N; //P卖平委托手数 SPPP[X] = BIDPP[X]; //P卖平委托价格 Commentary("【多头平仓:P卖平委托" + Text(X + 1) + "发出!】"); SPIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMP[X],SPPP[X]); //发出P卖平委托 SPFLGP[X] = 1; //已发出P卖平委托 } } } If(SKDFLGP[X] == 1) //如果已开启P卖开处理 { If(SKFLGP[X] == 0) //如果没有P卖开委托 { SKMP[X] = N; //P卖开委托手数HTTP://WWW.CXH99.COM SKPP[X] = BIDPP[X]; //P卖开委托价格 Commentary("【空头开仓:P卖开委托" + Text(X + 1) + "发出!】"); SKIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMP[X],SKPP[X]); //发出P卖开委托 SKTP[X] = NOW; //P卖开委托时间 SKFLGP[X] = 1; //已发出P卖开委托 } } If(BPDFLGP[X] == 1) //如果已开启P买平处理 { If(BPFLGP[X] == 0) //如果没有P买平委托 { If(SRPP[X] >= N) //如果P空头可用持仓达到N手 { BPMP[X] = N; //P买平委托手数 BPPP[X] = ASKPP[X]; //P买平委托价格 Commentary("【空头平仓:P买平委托" + Text(X + 1) + "发出!】"); BPIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMP[X],BPPP[X]); //发出P买平委托 BPFLGP[X] = 1; //已发出P买平委托 } } } } } End
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容