您现在的位置:程序化交易>> 期货公式>> 文华财经>> 文华财经公式>>正文内容

文华买卖权平价策略代码源码[文华财经公式]

①什么是买卖权平价关系?

买卖权平价关系是指具有相同的到期日与执行价格的金融工具,其卖权与买权价格间必然存在的基本关系。如果两者不相同,则存在套利的空间。

欧式期权的平价关系可以表示为:

其中,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  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!

 


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容