<ins id="d3tjn"><th id="d3tjn"><delect id="d3tjn"></delect></th></ins>

        <strike id="d3tjn"><span id="d3tjn"><ol id="d3tjn"></ol></span></strike>

        <output id="d3tjn"></output>

            您現在的位置:程序化交易>> 期貨公式>> 文華財經>> 文華財經公式>>正文內容

            文華日歷價差套利策略[文華財經公式]

            ①日歷價差套利策略簡介

            日歷價差是指買進到期日較遠的期權,同時又賣出相同行權價格、相同數量但到期日較近的期權,賺取兩個不同期權隱含波動率的差價或者其它期權定價參數的差價,以獲得利潤的期權套利交易策略。

            ?

            ②推導套利條件

            1)、開倉策略:

            X=V(近月隱含波動率)-V (歷史波動率)+V (近月隱含波動率 )-V(遠月隱含波動率) X>0,通過賣出一份近月看漲期權,同時買出一份遠月看漲期權,建立日歷價差組合。

            2)、平倉策略:

            考慮到該組合并沒有對沖標的物價格變動的風險,在近月期權到期前幾天,組合的Gamma風險值可能比較大,標的物價格的變化會大幅增加收益的波動率。因此,策略采取在當月合約到期前8天進行平倉。

            ?

            ③將上述策略編寫為策略模型

            Data
            	CODA0:"c2209-C-3160"; //近月合約
            	CODB0:"c2211-C-3160"; //遠月合約
            	CODA1:"c2209-C-3120"; //近月合約
            	CODB1:"c2211-C-3120"; //遠月合約
            	CODA2:"c2209-C-3080"; //近月合約
            	CODB2:"c2211-C-3080"; //遠月合約
            	CODA3:"c2209-C-3040"; //近月合約
            	CODB3:"c2211-C-3040"; //遠月合約
            	CODA4:"c2209-C-3000"; //近月合約
            	CODB4:"c2211-C-3000"; //遠月合約
            	COD:"c2209"; //標的期貨
            Vars
            	StringArray CODA; //看漲期權
            	StringArray CODB; //看跌期權
            	String CODF; //標的期貨
            	Numeric CDN; //期權合約數量
            	Numeric N; //下單手數
            	Numeric Length; //周期
            	Numeric X; //循環變量
            	Numeric D; //日期間隔
            	Numeric TKN; //數據區長度
            	Numeric TOD; //當前日期
            	Numeric HVLF; //F價格波動率
            	Numeric OPFLG; //模型處理標志
            	Var_TickData TKD; //數據區
            	NumericArray LNP; //自然對數
            	NumericArray EPDA; //行權日期
            	NumericArray RTS; //距行權日剩余天數
            	NumericArray STRA; //近月合約隱含波動率
            	NumericArray STRB; //遠月合約隱含波動率
            	NumericArray PRC; //隱含波動率綜合價差
            	NumericArray NEWPA; //A最新價
            	NumericArray NEWPB; //B最新價
            	NumericArray RLPA,FLPA; //A漲跌停價
            	NumericArray RLPB,FLPB; //B漲跌停價
            	NumericArray BIDPA,ASKPA; //A買賣一價
            	NumericArray BIDPB,ASKPB; //B買賣一價
            	NumericArray BRPA,SRPA; //A多空頭可用持倉
            	NumericArray BRPB,SRPB; //B多空頭可用持倉
            	NumericArray BKDFLG; //買開處理標志
            	NumericArray SKDFLG; //賣開處理標志
            	NumericArray BPDFLG; //買平處理標志
            	NumericArray SPDFLG; //賣平處理標志
            	Global_NumericArray BCFLG; //多頭處理標志
            	Global_NumericArray SCFLG; //空頭處理標志
            	Global_NumericArray BKIDA,SKIDA; //A開倉委托
            	Global_NumericArray BKIDB,SKIDB; //B開倉委托
            	Global_NumericArray BPIDA,SPIDA; //A平倉委托
            	Global_NumericArray BPIDB,SPIDB; //B平倉委托
            	Global_NumericArray BKFLGA,SKFLGA; //A開倉標志
            	Global_NumericArray BKFLGB,SKFLGB; //B開倉標志
            	Global_NumericArray BPFLGA,SPFLGA; //A平倉標志
            	Global_NumericArray BPFLGB,SPFLGB; //B平倉標志
            	Global_NumericArray BKMA,SKMA; //A開倉委托手數
            	Global_NumericArray BKMB,SKMB; //B開倉委托手數
            	Global_NumericArray BPMA,SPMA; //A平倉委托手數
            	Global_NumericArray BPMB,SPMB; //B平倉委托手數
            	Global_NumericArray BKPA,SKPA; //A開倉委托價格
            	Global_NumericArray BKPB,SKPB; //B開倉委托價格
            	Global_NumericArray BPPA,SPPA; //A平倉委托價格
            	Global_NumericArray BPPB,SPPB; //B平倉委托價格
            Begin
            	//------------------------處理開啟------------------------//
            	If(1) //處理開啟
            	{
            		CODA[0] = "c2209-C-3160"; //近月合約
            		CODB[0] = "c2211-C-3160"; //遠月合約 
            		CODA[1] = "c2209-C-3120"; //近月合約
            		CODB[1] = "c2211-C-3120"; //遠月合約 
            		CODA[2] = "c2209-C-3080"; //近月合約
            		CODB[2] = "c2211-C-3080"; //遠月合約 
            		CODA[3] = "c2209-C-3040"; //近月合約
            		CODB[3] = "c2211-C-3040"; //遠月合約 
            		CODA[4] = "c2209-C-3000"; //近月合約
            		CODB[4] = "c2211-C-3000"; //遠月合約 
            		CDN = GetStringArraySize(CODA); //期權合約數量
            		CODF = "c2209"; //標的期貨
            		OPFLG = 1; //開啟模型處理
            		If(CODF.A_IsExchangeOpen() != 1) //如果非開盤狀態
            		{
            			OPFLG = 2; //關閉模型處理
            		}
            		For X = 0 To CDN - 1 //遍歷期權合約
            		{
            			If(CODA[X].A_IsExchangeOpen() != 1 || CODB[X].A_IsExchangeOpen() != 1) //如果非開盤狀態
            			{
            				OPFLG = 2; //關閉模型處理
            			}
            		}
            	}
            	//------------------------變量賦值------------------------//
            	If(OPFLG == 1) //變量賦值
            	{
            		N = 10; //下單手數
            		Length = 5; //周期
            		D = 5; //日期間隔
            		TOD = CurrentDate(); //當前日期
            		For X = 0 To CDN - 1 //遍歷期權合約
            		{
            			NEWPA[X] = CODA[X].Price("New"); //A最新價
            			NEWPB[X] = CODB[X].Price("New"); //B最新價
            			BIDPA[X] = CODA[X].Price("Bid1"); //A買一價
            			ASKPA[X] = CODA[X].Price("Ask1"); //A賣一價
            			BIDPB[X] = CODB[X].Price("Bid1"); //B買一價
            			ASKPB[X] = CODB[X].Price("Ask1"); //B賣一價
            			RLPA[X] = CODA[X].Price("RiseLimit"); //A漲停價
            			FLPA[X] = CODA[X].Price("FallLimit"); //A跌停價
            			RLPB[X] = CODB[X].Price("RiseLimit"); //B漲停價
            			FLPB[X] = CODB[X].Price("FallLimit"); //B跌停價
            			BIDPA[X] = IIF(BIDPA[X] == 0 && NEWPA[X] == FLPA[X],FLPA[X],BIDPA[X]); //A買一價
            			ASKPA[X] = IIF(ASKPA[X] == 0 && NEWPA[X] == RLPA[X],RLPA[X],ASKPA[X]); //A賣一價
            			BIDPB[X] = IIF(BIDPB[X] == 0 && NEWPB[X] == FLPB[X],FLPB[X],BIDPB[X]); //B買一價
            			ASKPB[X] = IIF(ASKPB[X] == 0 && NEWPB[X] == RLPB[X],RLPB[X],ASKPB[X]); //B賣一價
            			STRA[X] = CODA[X].Price("Stdderiation"); //A隱含波動率
            			STRB[X] = CODB[X].Price("Stdderiation"); //B隱含波動率
            			EPDA[X] = CODA[X].Price("ExpirationDate"); //A行權日期
            			RTS[X] = DateDiff(TOD,EPDA[X] ); //距行權日剩余天數
            			BRPA[X] = CODA[X].F_BuyRemainPosition(); //A多頭可用持倉
            			SRPA[X] = CODA[X].F_SellRemainPosition(); //A空頭可用持倉
            			BRPB[X] = CODB[X].F_BuyRemainPosition(); //B多頭可用持倉
            			SRPB[X] = CODB[X].F_SellRemainPosition(); //B空頭可用持倉
            			BRPA[X] = Min(BRPA[X],CODA[X].A_BuyRemainPosition()); //A多頭可用持倉
            			SRPA[X] = Min(SRPA[X],CODA[X].A_SellRemainPosition()); //A空頭可用持倉
            			BRPB[X] = Min(BRPB[X],CODB[X].A_BuyRemainPosition()); //B多頭可用持倉
            			SRPB[X] = Min(SRPB[X],CODB[X].A_SellRemainPosition()); //B空頭可用持倉
            		}
            	}
            	//------------------------數據取值------------------------//
            	If(OPFLG == 1) //數據取值
            	{
            		TKD = Def_TickData(CODF,1,6); //數據區
            		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 //遍歷期權合約
            			{
            				PRC[X] = STRA[X] - HVLF + STRA[X] - STRB[X]; //隱含波動率綜合價差
            			}
            		}
            		Else //如果數據區無效
            		{
            			OPFLG = 2; //關閉模型處理
            		}
            	}
            	//------------------------成交判斷------------------------//
            	If(OPFLG == 1) //成交判斷
            	{
            		For X = 0 To CDN - 1 //遍歷期權合約
            		{
            			If(SKFLGA[X] == 1) //如果有A賣開委托
            			{
            				If(F_OrderStatus(SKIDA[X]) == Enum_Filled) //如果A賣開委托成交
            				{
            					Commentary("【空頭開倉:A賣開委托" + Text(X + 1) + "成交!】");
            					SKFLGA[X] = 0; //A賣開標志歸0
            				}
            				Else If(F_OrderStatus(SKIDA[X]) == Enum_Deleted) //如果A賣開委托廢單
            				{
            					Commentary("【空頭開倉:A賣開委托" + Text(X + 1) + "廢單!】");
            					SKFLGA[X] = 0; //A賣開標志歸0
            				}
            			}
            			If(BKFLGB[X] == 1) //如果有B買開委托
            			{
            				If(F_OrderStatus(BKIDB[X]) == Enum_Filled) //如果B買開委托成交
            				{
            					Commentary("【空頭開倉:B買開委托" + Text(X + 1) + "成交!】");
            					BKFLGB[X] = 0; //B買開標志歸0
            				}
            				Else If(F_OrderStatus(BKIDB[X]) == Enum_Deleted) //如果B買開委托廢單
            				{
            					Commentary("【空頭開倉:B買開委托" + Text(X + 1) + "廢單!】");
            					BKFLGB[X] = 0; //B買開標志歸0
            				}
            			}
            			If(BPFLGA[X] == 1) //如果有A買平委托
            			{
            				If(F_OrderStatus(BPIDA[X]) == Enum_Filled) //如果A買平委托成交
            				{
            					Commentary("【空頭平倉:A買平委托" + Text(X + 1) + "成交!】");
            					BPFLGA[X] = 0; //A買平標志歸0
            				}
            				Else If(F_OrderStatus(BPIDA[X]) == Enum_Deleted) //如果A買平委托廢單
            				{
            					Commentary("【空頭平倉:A買平委托" + Text(X + 1) + "廢單!】");
            					BPFLGA[X] = 0; //A買平標志歸0
            				}
            			}
            			If(SPFLGB[X] == 1) //如果有B賣平委托
            			{
            				If(F_OrderStatus(SPIDB[X]) == Enum_Filled) //如果B賣平委托成交
            				{
            					Commentary("【空頭平倉:B賣平委托" + Text(X + 1) + "成交!】");
            					SPFLGB[X] = 0; //B賣平標志歸0
            				}
            				Else If(F_OrderStatus(SPIDB[X]) == Enum_Deleted) //如果B賣平委托廢單
            				{
            					Commentary("【空頭平倉:B賣平委托" + Text(X + 1) + "廢單!】");
            					SPFLGB[X] = 0; //B賣平標志歸0
            				}
            			}
            		}
            	}
            	//------------------------空頭處理------------------------//
            	If(OPFLG == 1) //空頭處理
            	{
            		For X = 0 To CDN - 1 //遍歷期權合約
            		{
            			If(SKFLGA[X] == 0 && BKFLGB[X] == 0 && BPFLGA[X] == 0 && SPFLGB[X] == 0) //如果沒有開平倉委托
            			{
            				If(SCFLG[X] == 0) //如果未執行空頭開倉
            				{
            					If(PRC[X] > 0 && RTS[X] > D) //如果滿足空頭開倉條件
            					{
            						SKDFLG[X] = 1; //開啟賣開處理
            						SCFLG[X] = 1; //已執行空頭開倉
            					}
            				}
            				Else If(SCFLG[X] == 1) //如果已執行空頭開倉
            				{
            					If(RTS[X] <= D) //如果滿足空頭平倉條件
            					{
            						BPDFLG[X] = 1; //開啟買平處理
            						SCFLG[X] = 0; //空頭處理標志歸0
            					}
            				}
            			}
            		}
            	}
            	//------------------------委托處理------------------------//
            	If(OPFLG == 1) //委托處理
            	{
            		For X = 0 To CDN - 1 //遍歷期權合約
            		{
            			If(SKDFLG[X] == 1) //如果已開啟賣開處理
            			{
            				If(SKFLGA[X] == 0 && BKFLGB[X] == 0) //如果沒有開倉委托
            				{
            					SKMA[X] = N; //A賣開委托手數
            					SKPA[X] = BIDPA[X]; //A賣開委托價格
            					Commentary("【空頭開倉:A賣開委托" + Text(X + 1) + "發出!】");
            					SKIDA[X] = CODA[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMA[X],SKPA[X]); //發出A賣開委托
            					SKFLGA[X] = 1; //已發出A賣開委托
            					BKMB[X] = N; //B買開委托手數
            					BKPB[X] = ASKPB[X]; //B買開委托價格
            					Commentary("【空頭開倉:B買開委托" + Text(X + 1) + "發出!】");
            					BKIDB[X] = CODB[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMB[X],BKPB[X]); //發出B買開委托
            					BKFLGB[X] = 1; //已發出B買開委托
            				}
            			}
            			If(BPDFLG[X] == 1) //如果已開啟買平處理
            			{
            				If(BPFLGA[X] == 0 && SPFLGB[X] == 0) //如果沒有平倉委托
            				{
            					If(SRPA[X] >= N) //如果A空頭可用持倉達到N手
            					{
            						BPMA[X] = N; //A買平委托手數
            						BPPA[X] = ASKPA[X]; //A買平委托價格
            						Commentary("【空頭平倉:A買平委托" + Text(X + 1) + "發出!】");
            						BPIDA[X] = CODA[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMA[X],BPPA[X]); //發出A買平委托
            						BPFLGA[X] = 1; //已發出A買平委托
            					}
            					If(BRPB[X] >= N) //如果B多頭可用持倉達到N手
            					{
            						SPMB[X] = N; //B賣平委托手數
            						SPPB[X] = BIDPB[X]; //B賣平委托價格
            						Commentary("【空頭平倉:B賣平委托" + Text(X + 1) + "發出!】");
            						SPIDB[X] = CODB[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMB[X],SPPB[X]); //發出B賣平委托
            						SPFLGB[X] = 1; //已發出B賣平委托
            					}
            				}
            			}
            		}
            	}
            End
            						

            ?

             

            有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友

            可聯系技術人員 QQ: 1145508240  點擊這里給我發消息進行 有償 編寫!不貴!點擊查看價格!

             


            【字體: 】【打印文章】【查看評論

            相關文章

              沒有相關內容
              男男乱J伦高H小说

                <ins id="d3tjn"><th id="d3tjn"><delect id="d3tjn"></delect></th></ins>

                  <strike id="d3tjn"><span id="d3tjn"><ol id="d3tjn"></ol></span></strike>

                  <output id="d3tjn"></output>