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

文华期权定价模型策略模型计算期权理论价格及策略代码源码[文华财经公式]

优势


提供期权行情函数,可直接引用波动率等数据。
全市场实时监控,自动捕获期权各种套利机会。
支持对期权交易过程精细控制,提高交易成功率。

 

1、什么是期权定价公式

Black-Scholes-Merton期权定价模型(Black-Scholes-Merton Option Pricing Model),即布莱克—斯克尔斯期权定价模型。

B-S-M定价公式:C=S·N(d1)-X·exp(-r·T)·N(d2)

其中:

d1=[ln(S/X)+(r+σ^2/2)T]/(σ√T) d2=d1-σ·√T

C—期权初始合理价格 X—期权执行价格

S—所交易金融资产现价T—期权有效期

r—连续复利计无风险利率

σ—股票连续复利(对数)回报率的年度波动率(标准差)

N(d1),N(d2)—正态分布变量的累积概率分布函数,在此应当说明两点:

第一,该模型中无风险利率必须是连续复利形式。一个简单的或不连续的无风险利率(设为r0)一般是一年计息一次,而r要求为连续复利利率。r0必须转化为r方能代入上式计算。

两者换算关系为:r=LN(1+r0)或r0=exp(r)-1例如r0=0.06,则r=LN(1+0.06)=0.0583,即100以583%的连续复利投资第二年将获106,该结果与直接用r0=0.06计算的答案一致。

第二,期权有效期T的相对数表示,即期权有效天数与一年365天的比值。如果期权有效期为100天,则T=100/365=0.274。

 

2、年化波动率及BS公式函数计算

①计算年化波动率:

记录收盘价:CallOptions.PutOptions

计算对数Ln(今日收盘价/昨日收盘价)

计算N天的标准差:如N天标准差=STD()

计算N天的波动率:N天的标准差*SQRT(252)

计算年化的波动率:N天波动率/SQRT(2N)

②推导理论价格计算案例

例如:某股票市价为3.84元,无风险利率为6%,年波动率为15%,求工商银行行权价为3.6元、期限为半年的欧式认购期权和认沽期权价格,其中:期限内不支付红利。

此例中S=3.84,K=3.6,r=0.06,σ=0.15,T=0.5。

计算过程可分为三步:

第一步,先计算出和。





 

第二步,计算和。由标准正态分布表可查的


则可得


第三步,将上述结果及已知条件代入B-S公式,股票欧式认购期权价格为:


欧式认沽期权价格为:



 

3、B-S-M模型失效或者可能误差的原因:

①模型对平值期权的估价令人满意,特别是对剩余有效期限超过两月,且不支付红利者效果更好一点。

②对于高度增值或减值的期权,模型的估价有较大偏差,会高估减值期权而低估增值期权。

③对临近到期日的期权的估价存在一定的误差。

④离散度过高或过低的情况下,会低估低离散度的买入期权,高估高离散度的买方期权。

⑤模型基于对市场部分情况的假设条件过于严苛,这与现实情况有所差别,可能会影响到模型的可靠性。

 

4、根据以上推导过程,编写策略模型计算期权理论价格,形成套利策略如下:

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 R; //无风险收益率
	Numeric D; //日期间隔
	Numeric P; //条件比例
	Numeric TKN; //数据区长度
	Numeric TOD; //当前日期
	Numeric NEWPF; //F最新价
	Numeric HVLF; //F价格波动率
	Numeric RLPF,FLPF; //F涨跌停价
	Numeric BIDPF,ASKPF; //F买卖一价
	Numeric BRPF,SRPF; //F多空头可用持仓
	Numeric OPFLG; //模型处理标志
	Var_TickData TKD; //数据区
	NumericArray STP; //行权价
	NumericArray LNP; //自然对数
	NumericArray NEWPC; //C最新价
	NumericArray NEWPP; //P最新价
	NumericArray EPDC; //C行权日期
	NumericArray EPDP; //P行权日期
	NumericArray HVLC; //C历史波动率
	NumericArray HVLP; //P历史波动率
	NumericArray THPC; //C理论价格
	NumericArray THPP; //P理论价格
	NumericArray RTS; //距行权日剩余天数
	NumericArray D1,D2; //中间值
	NumericArray STRC; //C隐含波动率
	NumericArray STRP; //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平仓处理标志
	NumericArray BKDFLGF,SKDFLGF; //F开仓处理标志
	NumericArray BPDFLGF,SPDFLGF; //F平仓处理标志
	Global_NumericArray BCFLG; //多头处理标志
	Global_NumericArray SCFLG; //空头处理标志
	Global_NumericArray BKIDC,SKIDC; //C开仓委托
	Global_NumericArray BPIDC,SPIDC; //C平仓委托
	Global_NumericArray BKIDP,SKIDP; //P开仓委托
	Global_NumericArray BPIDP,SPIDP; //P平仓委托
	Global_NumericArray BKIDF,SKIDF; //F开仓委托
	Global_NumericArray BPIDF,SPIDF; //F平仓委托
	Global_NumericArray BKFLGC,SKFLGC; //C开仓标志
	Global_NumericArray BPFLGC,SPFLGC; //C平仓标志
	Global_NumericArray BKFLGP,SKFLGP; //P开仓标志
	Global_NumericArray BPFLGP,SPFLGP; //P平仓标志
	Global_NumericArray BKFLGF,SKFLGF; //F开仓标志
	Global_NumericArray BPFLGF,SPFLGF; //F平仓标志
	Global_NumericArray BKMC,SKMC; //C开仓委托手数
	Global_NumericArray BPMC,SPMC; //C平仓委托手数
	Global_NumericArray BKMP,SKMP; //P开仓委托手数
	Global_NumericArray BPMP,SPMP; //P平仓委托手数
	Global_NumericArray BKMF,SKMF; //F开仓委托手数
	Global_NumericArray BPMF,SPMF; //F平仓委托手数
	Global_NumericArray BKPC,SKPC; //C开仓委托价格
	Global_NumericArray BPPC,SPPC; //C平仓委托价格
	Global_NumericArray BKPP,SKPP; //P开仓委托价格
	Global_NumericArray BPPP,SPPP; //P平仓委托价格
	Global_NumericArray BKPF,SKPF; //F开仓委托价格
	Global_NumericArray BPPF,SPPF; //F平仓委托价格
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 = 10; //下单手数
		R = 1; //无风险收益率
		D = 5; //日期间隔
		P = 0.5; //条件比例
		TOD = CurrentDate(); //当前日期
		NEWPF = CODF.Price("New"); //F最新价
		BIDPF = CODF.Price("Bid1"); //F买一价
		ASKPF = CODF.Price("Ask1"); //F卖一价
		RLPF = CODF.Price("RiseLimit"); //F涨停价
		FLPF = CODF.Price("FallLimit"); //F跌停价
		BIDPF = IIF(BIDPF == 0 && NEWPF == FLPF,FLPF,BIDPF); //F买一价
		ASKPF = IIF(ASKPF == 0 && NEWPF == RLPF,RLPF,ASKPF); //F卖一价
		BRPF = CODF.F_BuyRemainPosition(); //F多头可用持仓
		SRPF = CODF.F_SellRemainPosition(); //F空头可用持仓
		BRPF = Min(BRPF,CODF.A_BuyRemainPosition()); //F多头可用持仓
		SRPF = Min(SRPF,CODF.A_SellRemainPosition()); //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"); //行权价
			STRC[X] = CODC[X].Price("Stdderiation"); //C隐含波动率
			STRP[X] = CODP[X].Price("Stdderiation"); //P隐含波动率
			HVLC[X] = CODC[X].Price("HistoricalVolatility"); //C历史波动率
			HVLP[X] = CODP[X].Price("HistoricalVolatility"); //P历史波动率
			EPDC[X] = CODC[X].Price("ExpirationDate"); //C行权日期
			EPDP[X] = CODP[X].Price("ExpirationDate"); //P行权日期
			RTS[X] = DateDiff(TOD,EPDC[X] ); //距行权日剩余天数
			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) //数据取值
	{
		TKD = Def_TickData(CODF,1,11); //数据区
		If(TKD.State == 1) //如果数据区有效
		{
			TKN = TKD.Num; //数据区长度
			For X = 1 To TKN - 1 //遍历数据区
			{
				LNP[X - 1] = Ln(TKD[X].TickPrice / TKD[X - 1].TickPrice); //自然对数
			}
			HVLF = StandardDevArray(LNP,2) * Sqrt(252); //F价格波动率
			For X = 0 To CDN - 1 //遍历期权合约
			{
				D1[X] = (Ln(NEWPF / STP[X]) + (R / 10 + 0.5 * Power(HVLF,2)) * RTS[X]) / (HVLF * Power(RTS[X],0.5)); //期权理论价格中间值
				D2[X] = D1[X] - HVLF * Power(RTS[X],0.5); //期权理论价格中间值
				THPC[X] = NEWPF * NormalSCDensity(D1[X]) - STP[X] * Exp(-1 * (R / 10) * RTS[X]) * NormalSCDensity(D2[X]); //根据B-S-M公式计算看涨期权理论价格
				THPP[X] = STP[X] * Exp(-1 * (R / 10) * RTS[X]) * (1 - NormalSCDensity(D2[X])) - NEWPF * (1 - NormalSCDensity(D1[X])); //根据B-S-M公式计算看跌期权理论价格
			}
		}
		Else //如果数据区无效
		{
			OPFLG = 2; //关闭模型处理
		}
	}
	//------------------------成交判断------------------------//
	If(OPFLG == 1) //成交判断
	{
		For X = 0 To CDN - 1 //遍历期权合约
		{
			If(BKFLGF[X] == 1) //如果有F买开委托
			{
				If(F_OrderStatus(BKIDF[X]) == Enum_Filled) //如果F买开委托成交
				{
					Commentary("【多头开仓:F买开委托" + Text(X + 1) + "成交!】");
					BKFLGF[X] = 0; //F买开标志归0
				}
				Else If(F_OrderStatus(BKIDF[X]) == Enum_Deleted) //如果F买开委托废单
				{
					Commentary("【多头开仓:F买开委托" + Text(X + 1) + "废单!】");
					BKFLGF[X] = 0; //F买开标志归0
				}
			}
			If(BKFLGP[X] == 1) //如果有P买开委托
			{
				If(F_OrderStatus(BKIDP[X]) == Enum_Filled) //如果P买开委托成交
				{
					Commentary("【多头开仓:P买开委托" + Text(X + 1) + "成交!】");
					BKFLGP[X] = 0; //P买开标志归0
				}
				Else If(F_OrderStatus(BKIDP[X]) == Enum_Deleted) //如果P买开委托废单
				{
					Commentary("【多头开仓:P买开委托" + Text(X + 1) + "废单!】");
					BKFLGP[X] = 0; //P买开标志归0
				}
			}
			If(SPFLGF[X] == 1) //如果有F卖平委托
			{
				If(F_OrderStatus(SPIDF[X]) == Enum_Filled) //如果F卖平委托成交
				{
					Commentary("【多头平仓:F卖平委托" + Text(X + 1) + "成交!】");
					SPFLGF[X] = 0; //F卖平标志归0
				}
				Else If(F_OrderStatus(SPIDF[X]) == Enum_Deleted) //如果F卖平委托废单
				{
					Commentary("【多头平仓:F卖平委托" + Text(X + 1) + "废单!】");
					SPFLGF[X] = 0; //F卖平标志归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(SKFLGF[X] == 1) //如果有F卖开委托
			{
				If(F_OrderStatus(SKIDF[X]) == Enum_Filled) //如果F卖开委托成交
				{
					Commentary("【空头开仓:F卖开委托" + Text(X + 1) + "成交!】");
					SKFLGF[X] = 0; //F卖开标志归0
				}
				Else If(F_OrderStatus(SKIDF[X]) == Enum_Deleted) //如果F卖开委托废单
				{
					Commentary("【空头开仓:F卖开委托" + Text(X + 1) + "废单!】");
					SKFLGF[X] = 0; //F卖开标志归0
				}
			}
			If(BKFLGC[X] == 1) //如果有C买开委托
			{
				If(F_OrderStatus(BKIDC[X]) == Enum_Filled) //如果C买开委托成交
				{
					Commentary("【空头开仓:C买开委托" + Text(X + 1) + "成交!】");
					BKFLGC[X] = 0; //C买开标志归0
				}
				Else If(F_OrderStatus(BKIDC[X]) == Enum_Deleted) //如果C买开委托废单
				{
					Commentary("【空头开仓:C买开委托" + Text(X + 1) + "废单!】");
					BKFLGC[X] = 0; //C买开标志归0
				}
			}
			If(BPFLGF[X] == 1) //如果有F买平委托
			{
				If(F_OrderStatus(BPIDF[X]) == Enum_Filled) //如果F买平委托成交
				{
					Commentary("【空头平仓:F买平委托" + Text(X + 1) + "成交!】");
					BPFLGF[X] = 0; //F买平标志归0
				}
				Else If(F_OrderStatus(BPIDF[X]) == Enum_Deleted) //如果F买平委托废单
				{
					Commentary("【空头平仓:F买平委托" + Text(X + 1) + "废单!】");
					BPFLGF[X] = 0; //F买平标志归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(OPFLG == 1) //多空处理
	{
		For X = 0 To CDN - 1 //遍历期权合约
		{
			If(BKFLGF[X] == 0 && SPFLGF[X] == 0 && BKFLGP[X] == 0 && SPFLGP[X] == 0 &&
				SKFLGF[X] == 0 && BPFLGF[X] == 0 && BKFLGC[X] == 0 && SPFLGC[X] == 0) //如果没有开平仓委托
			{
				If(DateDiff(TOD,EPDC[X]) > D && DateDiff(TOD,EPDP[X]) > D) //如果满足开仓条件
				{
					If(BCFLG[X] == 0) //如果未执行多头开仓
					{
						If(THPP[X] > P * NEWPP[X] && STRP[X] > HVLP[X]) //如果满足多头开仓条件
						{
							BKDFLGF[X] = 1; //开启F买开处理
							BKDFLGP[X] = 1; //开启P买开处理
							BCFLG[X] = 1; //已执行多头开仓
						}
					}
					If(SCFLG[X] == 0) //如果未执行空头开仓
					{
						If(NEWPC[X] < P * THPC[X] && STRC[X] < HVLC[X]) //如果满足空头开仓条件
						{
							SKDFLGF[X] = 1; //开启F卖开处理
							BKDFLGC[X] = 1; //开启C买开处理
							SCFLG[X] = 1; //已执行空头开仓
						}
					}
				}
				Else If(DateDiff(TOD,EPDC[X]) <= D || DateDiff(TOD,EPDP[X]) <= D) //如果满足平仓条件
				{
					If(BCFLG[X] == 1) //如果已执行多头开仓
					{
						SPDFLGF[X] = 1; //开启F卖平处理
						SPDFLGP[X] = 1; //开启P卖平处理
						BCFLG[X] = 0; //多头处理标志归0
					}
					If(SCFLG[X] == 1) //如果已执行空头开仓
					{
						BPDFLGF[X] = 1; //开启F买平处理
						SPDFLGC[X] = 1; //开启C卖平处理
						SCFLG[X] = 0; //空头处理标志归0
					}
				}
			}
		}
	}
	//------------------------委托处理------------------------//
	If(OPFLG == 1) //委托处理
	{
		For X = 0 To CDN - 1 //遍历期权合约
		{
			If(BKDFLGF[X] == 1) //如果已开启F买开处理
			{
				If(BKFLGF[X] == 0) //如果没有F买开委托
				{
					BKMF[X] = N; //F买开委托手数
					BKPF[X] = ASKPF; //F买开委托价格
					Commentary("【多头开仓:F买开委托" + Text(X + 1) + "发出!】");
					BKIDF[X] = CODF.A_SendOrder(Enum_Buy,Enum_Entry,BKMF[X],BKPF[X]); //发出F买开委托
					BKFLGF[X] = 1; //已发出F买开委托
				}
			}
			If(BKDFLGP[X] == 1) //如果已开启P买开处理
			{
				If(BKFLGP[X] == 0) //如果没有P买开委托
				{
					BKMP[X] = N; //P买开委托手数
					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买开委托
					BKFLGP[X] = 1; //已发出P买开委托
				}
			}
			If(SPDFLGF[X] == 1) //如果已开启F卖平处理
			{
				If(SPFLGF[X] == 0) //如果没有F卖平委托
				{
					If(BRPF >= N) //如果F多头可用持仓达到N手
					{
						SPMF[X] = N; //F卖平委托手数
						SPPF[X] = BIDPF; //F卖平委托价格
						Commentary("【多头平仓:F卖平委托" + Text(X + 1) + "发出!】");
						SPIDF[X] = CODF.A_SendOrder(Enum_Sell,Enum_Exit,SPMF[X],SPPF[X]); //发出F卖平委托
						SPFLGF[X] = 1; //已发出F卖平委托
					}
				}
			}
			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(SKDFLGF[X] == 1) //如果已开启F卖开处理
			{
				If(SKFLGF[X] == 0) //如果没有F卖开委托
				{
					SKMF[X] = N; //F卖开委托手数
					SKPF[X] = BIDPF; //F卖开委托价格
					Commentary("【空头开仓:F卖开委托" + Text(X + 1) + "发出!】");
					SKIDF[X] = CODF.A_SendOrder(Enum_Sell,Enum_Entry,SKMF[X],SKPF[X]); //发出F卖开委托
					SKFLGF[X] = 1; //已发出F卖开委托
				}
			}
			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买开委托
					BKFLGC[X] = 1; //已发出C买开委托
				}
			}
			If(BPDFLGF[X] == 1) //如果已开启F买平处理
			{
				If(BPFLGF[X] == 0) //如果没有F买平委托
				{
					If(SRPF >= N) //如果F空头可用持仓达到N手
					{
						BPMF[X] = N; //F买平委托手数
						BPPF[X] = ASKPF; //F买平委托价格
						Commentary("【空头平仓:F买平委托" + Text(X + 1) + "发出!】");
						BPIDF[X] = CODF.A_SendOrder(Enum_Buy,Enum_Exit,BPMF[X],BPPF[X]); //发出F买平委托
						BPFLGF[X] = 1; //已发出A买平委托
					}
				}
			}
			If(SPDFLGC[X] == 1) //如果已开启C卖平处理
			{
				If(SPFLGC[X] == 0) //如果没有C卖平委托
				{
					If(BRPC[X] >= N) //如果C多头可用持仓达到N手
					{
						SPMC[X] = N; //C卖平委托手数
						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卖平委托
					}
				}
			}
		}
	}
End

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!

 


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

相关文章

    没有相关内容