文華日歷價(jià)差套利策略[文華財(cái)經(jīng)公式]
①日歷價(jià)差套利策略簡(jiǎn)介
日歷價(jià)差是指買進(jìn)到期日較遠(yuǎn)的期權(quán),同時(shí)又賣出相同行權(quán)價(jià)格、相同數(shù)量但到期日較近的期權(quán),賺取兩個(gè)不同期權(quán)隱含波動(dòng)率的差價(jià)或者其它期權(quán)定價(jià)參數(shù)的差價(jià),以獲得利潤(rùn)的期權(quán)套利交易策略。
?
②推導(dǎo)套利條件
1)、開(kāi)倉(cāng)策略:
X=V(近月隱含波動(dòng)率)-V (歷史波動(dòng)率)+V (近月隱含波動(dòng)率 )-V(遠(yuǎn)月隱含波動(dòng)率) X>0,通過(guò)賣出一份近月看漲期權(quán),同時(shí)買出一份遠(yuǎn)月看漲期權(quán),建立日歷價(jià)差組合。
2)、平倉(cāng)策略:
考慮到該組合并沒(méi)有對(duì)沖標(biāo)的物價(jià)格變動(dòng)的風(fēng)險(xiǎn),在近月期權(quán)到期前幾天,組合的Gamma風(fēng)險(xiǎn)值可能比較大,標(biāo)的物價(jià)格的變化會(huì)大幅增加收益的波動(dòng)率。因此,策略采取在當(dāng)月合約到期前8天進(jìn)行平倉(cāng)。
?
③將上述策略編寫為策略模型
Data CODA0:"c2209-C-3160"; //近月合約 CODB0:"c2211-C-3160"; //遠(yuǎn)月合約 CODA1:"c2209-C-3120"; //近月合約 CODB1:"c2211-C-3120"; //遠(yuǎn)月合約 CODA2:"c2209-C-3080"; //近月合約 CODB2:"c2211-C-3080"; //遠(yuǎn)月合約 CODA3:"c2209-C-3040"; //近月合約 CODB3:"c2211-C-3040"; //遠(yuǎn)月合約 CODA4:"c2209-C-3000"; //近月合約 CODB4:"c2211-C-3000"; //遠(yuǎn)月合約 COD:"c2209"; //標(biāo)的期貨 Vars StringArray CODA; //看漲期權(quán) StringArray CODB; //看跌期權(quán) String CODF; //標(biāo)的期貨 Numeric CDN; //期權(quán)合約數(shù)量 Numeric N; //下單手?jǐn)?shù) Numeric Length; //周期 Numeric X; //循環(huán)變量 Numeric D; //日期間隔 Numeric TKN; //數(shù)據(jù)區(qū)長(zhǎng)度 Numeric TOD; //當(dāng)前日期 Numeric HVLF; //F價(jià)格波動(dòng)率 Numeric OPFLG; //模型處理標(biāo)志 Var_TickData TKD; //數(shù)據(jù)區(qū) NumericArray LNP; //自然對(duì)數(shù) NumericArray EPDA; //行權(quán)日期 NumericArray RTS; //距行權(quán)日剩余天數(shù) NumericArray STRA; //近月合約隱含波動(dòng)率 NumericArray STRB; //遠(yuǎn)月合約隱含波動(dòng)率 NumericArray PRC; //隱含波動(dòng)率綜合價(jià)差 NumericArray NEWPA; //A最新價(jià) NumericArray NEWPB; //B最新價(jià) NumericArray RLPA,FLPA; //A漲跌停價(jià) NumericArray RLPB,FLPB; //B漲跌停價(jià) NumericArray BIDPA,ASKPA; //A買賣一價(jià) NumericArray BIDPB,ASKPB; //B買賣一價(jià) NumericArray BRPA,SRPA; //A多空頭可用持倉(cāng) NumericArray BRPB,SRPB; //B多空頭可用持倉(cāng) NumericArray BKDFLG; //買開(kāi)處理標(biāo)志 NumericArray SKDFLG; //賣開(kāi)處理標(biāo)志 NumericArray BPDFLG; //買平處理標(biāo)志 NumericArray SPDFLG; //賣平處理標(biāo)志 Global_NumericArray BCFLG; //多頭處理標(biāo)志 Global_NumericArray SCFLG; //空頭處理標(biāo)志 Global_NumericArray BKIDA,SKIDA; //A開(kāi)倉(cāng)委托 Global_NumericArray BKIDB,SKIDB; //B開(kāi)倉(cāng)委托 Global_NumericArray BPIDA,SPIDA; //A平倉(cāng)委托 Global_NumericArray BPIDB,SPIDB; //B平倉(cāng)委托 Global_NumericArray BKFLGA,SKFLGA; //A開(kāi)倉(cāng)標(biāo)志 Global_NumericArray BKFLGB,SKFLGB; //B開(kāi)倉(cāng)標(biāo)志 Global_NumericArray BPFLGA,SPFLGA; //A平倉(cāng)標(biāo)志 Global_NumericArray BPFLGB,SPFLGB; //B平倉(cāng)標(biāo)志 Global_NumericArray BKMA,SKMA; //A開(kāi)倉(cāng)委托手?jǐn)?shù) Global_NumericArray BKMB,SKMB; //B開(kāi)倉(cāng)委托手?jǐn)?shù) Global_NumericArray BPMA,SPMA; //A平倉(cāng)委托手?jǐn)?shù) Global_NumericArray BPMB,SPMB; //B平倉(cāng)委托手?jǐn)?shù) Global_NumericArray BKPA,SKPA; //A開(kāi)倉(cāng)委托價(jià)格 Global_NumericArray BKPB,SKPB; //B開(kāi)倉(cāng)委托價(jià)格 Global_NumericArray BPPA,SPPA; //A平倉(cāng)委托價(jià)格 Global_NumericArray BPPB,SPPB; //B平倉(cāng)委托價(jià)格 Begin //------------------------處理開(kāi)啟------------------------// If(1) //處理開(kāi)啟 { CODA[0] = "c2209-C-3160"; //近月合約 CODB[0] = "c2211-C-3160"; //遠(yuǎn)月合約 CODA[1] = "c2209-C-3120"; //近月合約 CODB[1] = "c2211-C-3120"; //遠(yuǎn)月合約 CODA[2] = "c2209-C-3080"; //近月合約 CODB[2] = "c2211-C-3080"; //遠(yuǎn)月合約 CODA[3] = "c2209-C-3040"; //近月合約 CODB[3] = "c2211-C-3040"; //遠(yuǎn)月合約 CODA[4] = "c2209-C-3000"; //近月合約 CODB[4] = "c2211-C-3000"; //遠(yuǎn)月合約 CDN = GetStringArraySize(CODA); //期權(quán)合約數(shù)量 CODF = "c2209"; //標(biāo)的期貨 OPFLG = 1; //開(kāi)啟模型處理 If(CODF.A_IsExchangeOpen() != 1) //如果非開(kāi)盤狀態(tài) { OPFLG = 2; //關(guān)閉模型處理 } For X = 0 To CDN - 1 //遍歷期權(quán)合約 { If(CODA[X].A_IsExchangeOpen() != 1 || CODB[X].A_IsExchangeOpen() != 1) //如果非開(kāi)盤狀態(tài) { OPFLG = 2; //關(guān)閉模型處理 } } } //------------------------變量賦值------------------------// If(OPFLG == 1) //變量賦值 { N = 10; //下單手?jǐn)?shù) Length = 5; //周期 D = 5; //日期間隔 TOD = CurrentDate(); //當(dāng)前日期 For X = 0 To CDN - 1 //遍歷期權(quán)合約 { NEWPA[X] = CODA[X].Price("New"); //A最新價(jià) NEWPB[X] = CODB[X].Price("New"); //B最新價(jià) BIDPA[X] = CODA[X].Price("Bid1"); //A買一價(jià) ASKPA[X] = CODA[X].Price("Ask1"); //A賣一價(jià) BIDPB[X] = CODB[X].Price("Bid1"); //B買一價(jià) ASKPB[X] = CODB[X].Price("Ask1"); //B賣一價(jià) RLPA[X] = CODA[X].Price("RiseLimit"); //A漲停價(jià) FLPA[X] = CODA[X].Price("FallLimit"); //A跌停價(jià) RLPB[X] = CODB[X].Price("RiseLimit"); //B漲停價(jià) FLPB[X] = CODB[X].Price("FallLimit"); //B跌停價(jià) BIDPA[X] = IIF(BIDPA[X] == 0 && NEWPA[X] == FLPA[X],FLPA[X],BIDPA[X]); //A買一價(jià) ASKPA[X] = IIF(ASKPA[X] == 0 && NEWPA[X] == RLPA[X],RLPA[X],ASKPA[X]); //A賣一價(jià) BIDPB[X] = IIF(BIDPB[X] == 0 && NEWPB[X] == FLPB[X],FLPB[X],BIDPB[X]); //B買一價(jià) ASKPB[X] = IIF(ASKPB[X] == 0 && NEWPB[X] == RLPB[X],RLPB[X],ASKPB[X]); //B賣一價(jià) STRA[X] = CODA[X].Price("Stdderiation"); //A隱含波動(dòng)率 STRB[X] = CODB[X].Price("Stdderiation"); //B隱含波動(dòng)率 EPDA[X] = CODA[X].Price("ExpirationDate"); //A行權(quán)日期 RTS[X] = DateDiff(TOD,EPDA[X] ); //距行權(quán)日剩余天數(shù) BRPA[X] = CODA[X].F_BuyRemainPosition(); //A多頭可用持倉(cāng) SRPA[X] = CODA[X].F_SellRemainPosition(); //A空頭可用持倉(cāng) BRPB[X] = CODB[X].F_BuyRemainPosition(); //B多頭可用持倉(cāng) SRPB[X] = CODB[X].F_SellRemainPosition(); //B空頭可用持倉(cāng) BRPA[X] = Min(BRPA[X],CODA[X].A_BuyRemainPosition()); //A多頭可用持倉(cāng) SRPA[X] = Min(SRPA[X],CODA[X].A_SellRemainPosition()); //A空頭可用持倉(cāng) BRPB[X] = Min(BRPB[X],CODB[X].A_BuyRemainPosition()); //B多頭可用持倉(cāng) SRPB[X] = Min(SRPB[X],CODB[X].A_SellRemainPosition()); //B空頭可用持倉(cāng) } } //------------------------數(shù)據(jù)取值------------------------// If(OPFLG == 1) //數(shù)據(jù)取值 { TKD = Def_TickData(CODF,1,6); //數(shù)據(jù)區(qū) If(TKD.State == 1) //如果數(shù)據(jù)區(qū)有效 { TKN = TKD.Num; //數(shù)據(jù)區(qū)長(zhǎng)度 For X = 1 To TKN - 1 //遍歷數(shù)據(jù)區(qū) { LNP[X - 1] = Ln(TKD[X].TickPrice / TKD[X - 1].TickPrice); //自然對(duì)數(shù) } HVLF = StandardDevArray(LNP,2) * Sqrt(252) ; //F價(jià)格波動(dòng)率 For X = 0 To CDN - 1 //遍歷期權(quán)合約 { PRC[X] = STRA[X] - HVLF + STRA[X] - STRB[X]; //隱含波動(dòng)率綜合價(jià)差 } } Else //如果數(shù)據(jù)區(qū)無(wú)效 { OPFLG = 2; //關(guān)閉模型處理 } } //------------------------成交判斷------------------------// If(OPFLG == 1) //成交判斷 { For X = 0 To CDN - 1 //遍歷期權(quán)合約 { If(SKFLGA[X] == 1) //如果有A賣開(kāi)委托 { If(F_OrderStatus(SKIDA[X]) == Enum_Filled) //如果A賣開(kāi)委托成交 { Commentary("【空頭開(kāi)倉(cāng):A賣開(kāi)委托" + Text(X + 1) + "成交!】"); SKFLGA[X] = 0; //A賣開(kāi)標(biāo)志歸0 } Else If(F_OrderStatus(SKIDA[X]) == Enum_Deleted) //如果A賣開(kāi)委托廢單 { Commentary("【空頭開(kāi)倉(cāng):A賣開(kāi)委托" + Text(X + 1) + "廢單!】"); SKFLGA[X] = 0; //A賣開(kāi)標(biāo)志歸0 } } If(BKFLGB[X] == 1) //如果有B買開(kāi)委托 { If(F_OrderStatus(BKIDB[X]) == Enum_Filled) //如果B買開(kāi)委托成交 { Commentary("【空頭開(kāi)倉(cāng):B買開(kāi)委托" + Text(X + 1) + "成交!】"); BKFLGB[X] = 0; //B買開(kāi)標(biāo)志歸0 } Else If(F_OrderStatus(BKIDB[X]) == Enum_Deleted) //如果B買開(kāi)委托廢單 { Commentary("【空頭開(kāi)倉(cāng):B買開(kāi)委托" + Text(X + 1) + "廢單!】"); BKFLGB[X] = 0; //B買開(kāi)標(biāo)志歸0 } } If(BPFLGA[X] == 1) //如果有A買平委托 { If(F_OrderStatus(BPIDA[X]) == Enum_Filled) //如果A買平委托成交 { Commentary("【空頭平倉(cāng):A買平委托" + Text(X + 1) + "成交!】"); BPFLGA[X] = 0; //A買平標(biāo)志歸0 } Else If(F_OrderStatus(BPIDA[X]) == Enum_Deleted) //如果A買平委托廢單 { Commentary("【空頭平倉(cāng):A買平委托" + Text(X + 1) + "廢單!】"); BPFLGA[X] = 0; //A買平標(biāo)志歸0 } } If(SPFLGB[X] == 1) //如果有B賣平委托 { If(F_OrderStatus(SPIDB[X]) == Enum_Filled) //如果B賣平委托成交 { Commentary("【空頭平倉(cāng):B賣平委托" + Text(X + 1) + "成交!】"); SPFLGB[X] = 0; //B賣平標(biāo)志歸0 } Else If(F_OrderStatus(SPIDB[X]) == Enum_Deleted) //如果B賣平委托廢單 { Commentary("【空頭平倉(cāng):B賣平委托" + Text(X + 1) + "廢單!】"); SPFLGB[X] = 0; //B賣平標(biāo)志歸0 } } } } //------------------------空頭處理------------------------// If(OPFLG == 1) //空頭處理 { For X = 0 To CDN - 1 //遍歷期權(quán)合約 { If(SKFLGA[X] == 0 && BKFLGB[X] == 0 && BPFLGA[X] == 0 && SPFLGB[X] == 0) //如果沒(méi)有開(kāi)平倉(cāng)委托 { If(SCFLG[X] == 0) //如果未執(zhí)行空頭開(kāi)倉(cāng) { If(PRC[X] > 0 && RTS[X] > D) //如果滿足空頭開(kāi)倉(cāng)條件 { SKDFLG[X] = 1; //開(kāi)啟賣開(kāi)處理 SCFLG[X] = 1; //已執(zhí)行空頭開(kāi)倉(cāng) } } Else If(SCFLG[X] == 1) //如果已執(zhí)行空頭開(kāi)倉(cāng) { If(RTS[X] <= D) //如果滿足空頭平倉(cāng)條件 { BPDFLG[X] = 1; //開(kāi)啟買平處理 SCFLG[X] = 0; //空頭處理標(biāo)志歸0 } } } } } //------------------------委托處理------------------------// If(OPFLG == 1) //委托處理 { For X = 0 To CDN - 1 //遍歷期權(quán)合約 { If(SKDFLG[X] == 1) //如果已開(kāi)啟賣開(kāi)處理 { If(SKFLGA[X] == 0 && BKFLGB[X] == 0) //如果沒(méi)有開(kāi)倉(cāng)委托 { SKMA[X] = N; //A賣開(kāi)委托手?jǐn)?shù) SKPA[X] = BIDPA[X]; //A賣開(kāi)委托價(jià)格 Commentary("【空頭開(kāi)倉(cāng):A賣開(kāi)委托" + Text(X + 1) + "發(fā)出!】"); SKIDA[X] = CODA[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMA[X],SKPA[X]); //發(fā)出A賣開(kāi)委托 SKFLGA[X] = 1; //已發(fā)出A賣開(kāi)委托 BKMB[X] = N; //B買開(kāi)委托手?jǐn)?shù) BKPB[X] = ASKPB[X]; //B買開(kāi)委托價(jià)格 Commentary("【空頭開(kāi)倉(cāng):B買開(kāi)委托" + Text(X + 1) + "發(fā)出!】"); BKIDB[X] = CODB[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMB[X],BKPB[X]); //發(fā)出B買開(kāi)委托 BKFLGB[X] = 1; //已發(fā)出B買開(kāi)委托 } } If(BPDFLG[X] == 1) //如果已開(kāi)啟買平處理 { If(BPFLGA[X] == 0 && SPFLGB[X] == 0) //如果沒(méi)有平倉(cāng)委托 { If(SRPA[X] >= N) //如果A空頭可用持倉(cāng)達(dá)到N手 { BPMA[X] = N; //A買平委托手?jǐn)?shù) BPPA[X] = ASKPA[X]; //A買平委托價(jià)格 Commentary("【空頭平倉(cāng):A買平委托" + Text(X + 1) + "發(fā)出!】"); BPIDA[X] = CODA[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMA[X],BPPA[X]); //發(fā)出A買平委托 BPFLGA[X] = 1; //已發(fā)出A買平委托 } If(BRPB[X] >= N) //如果B多頭可用持倉(cāng)達(dá)到N手 { SPMB[X] = N; //B賣平委托手?jǐn)?shù) SPPB[X] = BIDPB[X]; //B賣平委托價(jià)格 Commentary("【空頭平倉(cāng):B賣平委托" + Text(X + 1) + "發(fā)出!】"); SPIDB[X] = CODB[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMB[X],SPPB[X]); //發(fā)出B賣平委托 SPFLGB[X] = 1; //已發(fā)出B賣平委托 } } } } } End
?
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容