①什么是買(mǎi)賣(mài)權(quán)平價(jià)關(guān)系?
買(mǎi)賣(mài)權(quán)平價(jià)關(guān)系是指具有相同的到期日與執(zhí)行價(jià)格的金融工具,其賣(mài)權(quán)與買(mǎi)權(quán)價(jià)格間必然存在的基本關(guān)系。如果兩者不相同,則存在套利的空間。
歐式期權(quán)的平價(jià)關(guān)系可以表示為:
其中,C為看漲期權(quán)的當(dāng)期的理論價(jià)格,P為看跌期權(quán)當(dāng)期的理論價(jià)格,1年期無(wú)風(fēng)險(xiǎn)利率為r,行權(quán)價(jià)為K,
為某股票現(xiàn)在的價(jià)格。
?
②根據(jù)買(mǎi)賣(mài)權(quán)平價(jià)關(guān)系推導(dǎo)套利條件
在上述理論的基礎(chǔ)上,Tucker根據(jù)股指期貨和股指期權(quán)之間的價(jià)格關(guān)系闡述了期貨與期權(quán)的平價(jià)關(guān)系,并運(yùn)用這一均衡關(guān)系來(lái)發(fā)現(xiàn)市場(chǎng)的套利機(jī)會(huì)并驗(yàn)證市場(chǎng)效率。
該理論假設(shè):1)期權(quán)為歐式期權(quán)。2)稅收、手續(xù)費(fèi)等交易成本不計(jì)。3)借貸利率相等。
在t時(shí)刻,期貨和期權(quán)的平價(jià)關(guān)系可表示為:
F為t時(shí)刻期貨價(jià)格,T為期權(quán)到期日,C、P分別是看漲看跌期權(quán)的價(jià)格,r為無(wú)風(fēng)險(xiǎn)利率,貼現(xiàn)因子
以年化無(wú)風(fēng)險(xiǎn)利率計(jì)算,通常考慮一個(gè)月內(nèi)(1/12),其數(shù)值接近于1,進(jìn)而上述關(guān)系可簡(jiǎn)化為:
由上式可以推導(dǎo)出套利開(kāi)倉(cāng)條件:
?
| ? | ? | 策略 |
| C-P>F-K | 看漲期權(quán)價(jià)格被高估,看跌期權(quán)價(jià)格被低估 | 賣(mài)出看漲期權(quán),買(mǎi)入看跌期權(quán) |
| C-P<F-K | 看漲期權(quán)價(jià)格被低估,看跌期權(quán)價(jià)格被高估 | 買(mǎi)入看漲期權(quán),賣(mài)出看跌期權(quán) |
?
③將上述策略編寫(xiě)為策略模型
Data
CODC0:"m2209-C-4200"; //看漲期權(quán)
CODP0:"m2209-P-4200"; //看跌期權(quán)
CODC1:"m2209-C-4150"; //看漲期權(quán)
CODP1:"m2209-P-4150"; //看跌期權(quán)
CODC2:"m2209-C-4100"; //看漲期權(quán)
CODP2:"m2209-P-4100"; //看跌期權(quán)
CODC3:"m2209-C-4050"; //看漲期權(quán)
CODP3:"m2209-P-4050"; //看跌期權(quán)
CODC4:"m2209-C-4000"; //看漲期權(quán)
CODP4:"m2209-P-4000"; //看跌期權(quán)
COD:"m2209"; //標(biāo)的期貨
Vars
StringArray CODC; //看漲期權(quán)
StringArray CODP; //看跌期權(quán)
String CODF; //標(biāo)的期貨
Numeric CDN; //期權(quán)合約數(shù)量
Numeric N; //下單手?jǐn)?shù)
Numeric X; //循環(huán)變量
Numeric T; //時(shí)間間隔
Numeric D; //日期間隔
Numeric TOD; //當(dāng)前日期
Numeric NOW; //當(dāng)前時(shí)間
Numeric NEWPF; //F最新價(jià)
Numeric OPFLG; //模型處理標(biāo)志
NumericArray STP; //行權(quán)價(jià)
NumericArray NEWPC; //C最新價(jià)
NumericArray NEWPP; //P最新價(jià)
NumericArray EPDC; //C行權(quán)日期
NumericArray EPDP; //P行權(quán)日期
NumericArray RTSC; //C距行權(quán)日剩余天數(shù)
NumericArray RTSP; //P距行權(quán)日剩余天數(shù)
NumericArray RLPC,FLPC; //C漲跌停價(jià)
NumericArray RLPP,FLPP; //P漲跌停價(jià)
NumericArray BIDPC,ASKPC; //C買(mǎi)賣(mài)一價(jià)
NumericArray BIDPP,ASKPP; //P買(mǎi)賣(mài)一價(jià)
NumericArray BRPC,SRPC; //C多空頭可用持倉(cāng)
NumericArray BRPP,SRPP; //P多空頭可用持倉(cāng)
NumericArray BKDFLGC,SKDFLGC; //C開(kāi)倉(cāng)處理標(biāo)志
NumericArray BPDFLGC,SPDFLGC; //C開(kāi)倉(cāng)處理標(biāo)志
NumericArray BKDFLGP,SKDFLGP; //P開(kāi)倉(cāng)處理標(biāo)志
NumericArray BPDFLGP,SPDFLGP; //P開(kāi)倉(cāng)處理標(biāo)志
Global_NumericArray KCFLG; //開(kāi)倉(cāng)處理標(biāo)志
Global_NumericArray KPFLG; //開(kāi)平處理標(biāo)志
Global_NumericArray BKIDC,SKIDC; //C開(kāi)倉(cāng)委托
Global_NumericArray BPIDC,SPIDC; //C平倉(cāng)委托
Global_NumericArray BKIDP,SKIDP; //P開(kāi)倉(cāng)委托
Global_NumericArray BPIDP,SPIDP; //P平倉(cāng)委托
Global_NumericArray BKFLGC,SKFLGC; //C開(kāi)倉(cāng)標(biāo)志
Global_NumericArray BPFLGC,SPFLGC; //C平倉(cāng)標(biāo)志
Global_NumericArray BKFLGP,SKFLGP; //P開(kāi)倉(cāng)標(biāo)志
Global_NumericArray BPFLGP,SPFLGP; //P平倉(cāng)標(biāo)志
Global_NumericArray BKDELC,SKDELC; //C開(kāi)倉(cāng)撤單標(biāo)志
Global_NumericArray BKDELP,SKDELP; //P開(kāi)倉(cāng)撤單標(biāo)志
Global_NumericArray BKMC,SKMC; //C開(kāi)倉(cāng)委托手?jǐn)?shù)
Global_NumericArray BPMC,SPMC; //C平倉(cāng)委托手?jǐn)?shù)
Global_NumericArray BKMP,SKMP; //P開(kāi)倉(cāng)委托手?jǐn)?shù)
Global_NumericArray BPMP,SPMP; //P平倉(cāng)委托手?jǐn)?shù)
Global_NumericArray BKPC,SKPC; //C開(kāi)倉(cāng)委托價(jià)格
Global_NumericArray BPPC,SPPC; //C平倉(cāng)委托價(jià)格
Global_NumericArray BKPP,SKPP; //P開(kāi)倉(cāng)委托價(jià)格
Global_NumericArray BPPP,SPPP; //P平倉(cāng)委托價(jià)格
Global_NumericArray BKTC,SKTC; //C開(kāi)倉(cāng)委托時(shí)間
Global_NumericArray BKTP,SKTP; //P開(kāi)倉(cāng)委托時(shí)間
Begin
//------------------------處理開(kāi)啟------------------------//
If(1) //處理開(kāi)啟
{
CODC[0] = "m2209-C-4200"; //看漲期權(quán)
CODP[0] = "m2209-P-4200"; //看跌期權(quán)
CODC[1] = "m2209-C-4150"; //看漲期權(quán)
CODP[1] = "m2209-P-4150"; //看跌期權(quán)
CODC[2] = "m2209-C-4100"; //看漲期權(quán)
CODP[2] = "m2209-P-4100"; //看跌期權(quán)
CODC[3] = "m2209-C-4050"; //看漲期權(quán)
CODP[3] = "m2209-P-4050"; //看跌期權(quán)
CODC[4] = "m2209-C-4000"; //看漲期權(quán)
CODP[4] = "m2209-P-4000"; //看跌期權(quán)
CDN = GetStringArraySize(CODC); //期權(quán)合約數(shù)量
CODF = "m2209"; //標(biāo)的期貨
OPFLG = 1; //開(kāi)啟模型處理
If(CODF.A_IsExchangeOpen() != 1) //如果非開(kāi)盤(pán)狀態(tài)
{
OPFLG = 2; //關(guān)閉模型處理
}
For X = 0 To CDN - 1 //遍歷期權(quán)合約
{
If(CODC[X].A_IsExchangeOpen() != 1 || CODP[X].A_IsExchangeOpen() != 1) //如果非開(kāi)盤(pán)狀態(tài)
{
OPFLG = 2; //關(guān)閉模型處理
}
}
}
//------------------------變量賦值------------------------//
If(OPFLG == 1) //變量賦值
{
N = 1; //下單手?jǐn)?shù)
T = 15; //時(shí)間間隔
D = 5; //日期間隔
TOD = CurrentDate(); //當(dāng)前日期
NOW = CurrentTime(); //當(dāng)前時(shí)間
NEWPF = CODF.Price("New"); //F最新價(jià)
For X = 0 To CDN - 1 //遍歷期權(quán)合約
{
NEWPC[X] = CODC[X].Price("New"); //C最新價(jià)
NEWPP[X] = CODP[X].Price("New"); //P最新價(jià)
BIDPC[X] = CODC[X].Price("Bid1"); //C買(mǎi)一價(jià)
ASKPC[X] = CODC[X].Price("Ask1"); //C賣(mài)一價(jià)
BIDPP[X] = CODP[X].Price("Bid1"); //P買(mǎi)一價(jià)
ASKPP[X] = CODP[X].Price("Ask1"); //P賣(mài)一價(jià)
RLPC[X] = CODC[X].Price("RiseLimit"); //C漲停價(jià)
FLPC[X] = CODC[X].Price("FallLimit"); //C跌停價(jià)
RLPP[X] = CODP[X].Price("RiseLimit"); //P漲停價(jià)
FLPP[X] = CODP[X].Price("FallLimit"); //P跌停價(jià)
BIDPC[X] = IIF(BIDPC[X] == 0 && NEWPC[X] == FLPC[X],FLPC[X],BIDPC[X]); //C買(mǎi)一價(jià)
ASKPC[X] = IIF(ASKPC[X] == 0 && NEWPC[X] == RLPC[X],RLPC[X],ASKPC[X]); //C賣(mài)一價(jià)
BIDPP[X] = IIF(BIDPP[X] == 0 && NEWPP[X] == FLPP[X],FLPP[X],BIDPP[X]); //P買(mǎi)一價(jià)
ASKPP[X] = IIF(ASKPP[X] == 0 && NEWPP[X] == RLPP[X],RLPP[X],ASKPP[X]); //P賣(mài)一價(jià)
STP[X] = CODC[X].Price("StrikePrice"); //行權(quán)價(jià)
EPDC[X] = CODC[X].Price("ExpirationDate"); //C行權(quán)日期
EPDP[X] = CODP[X].Price("ExpirationDate"); //P行權(quán)日期
RTSC[X] = DateDiff(TOD,EPDC[X] ); //C距行權(quán)日剩余天數(shù)
RTSP[X] = DateDiff(TOD,EPDP[X] ); //P距行權(quán)日剩余天數(shù)
BRPC[X] = CODC[X].F_BuyRemainPosition(); //C多頭可用持倉(cāng)
SRPC[X] = CODC[X].F_SellRemainPosition(); //C空頭可用持倉(cāng)
BRPP[X] = CODP[X].F_BuyRemainPosition(); //P多頭可用持倉(cāng)
SRPP[X] = CODP[X].F_SellRemainPosition(); //P空頭可用持倉(cāng)
BRPC[X] = Min(BRPC[X],CODC[X].A_BuyRemainPosition()); //C多頭可用持倉(cāng)
SRPC[X] = Min(SRPC[X],CODC[X].A_SellRemainPosition()); //C空頭可用持倉(cāng)
BRPP[X] = Min(BRPP[X],CODP[X].A_BuyRemainPosition()); //P多頭可用持倉(cāng)
SRPP[X] = Min(SRPP[X],CODP[X].A_SellRemainPosition()); //P空頭可用持倉(cāng)
}
}
//------------------------成交判斷------------------------//
If(OPFLG == 1) //成交判斷
{
For X = 0 To CDN - 1 //遍歷期權(quán)合約
{
If(BKFLGC[X] == 1) //如果有C買(mǎi)開(kāi)委托
{
If(F_OrderStatus(BKIDC[X]) == Enum_Filled) //如果C買(mǎi)開(kāi)委托成交
{
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "成交!】");
BKFLGC[X] = 0; //C買(mǎi)開(kāi)標(biāo)志歸0
BKDELC[X] = 0; //C買(mǎi)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(BKIDC[X]) == Enum_Canceled) //如果C買(mǎi)開(kāi)委托已撤
{
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "已撤!】");
If(F_OrderFilledLot(BKIDC[X]) > 0) //如果C買(mǎi)開(kāi)委托部分成交
{
BKMC[X] = BKMC[X] - F_OrderFilledLot(BKIDC[X]); //C買(mǎi)開(kāi)委托手?jǐn)?shù)
}
If(BKMC[X] > 0) //如果C買(mǎi)開(kāi)委托手?jǐn)?shù)大于0
{
BKPC[X] = RLPC[X]; //C買(mǎi)開(kāi)委托價(jià)格
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
BKIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMC[X],BKPC[X]); //發(fā)出C買(mǎi)開(kāi)委托
}
BKDELC[X] = 0; //C買(mǎi)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(BKIDC[X]) == Enum_Declared || F_OrderStatus(BKIDC[X]) == Enum_FillPart) //如果C買(mǎi)開(kāi)委托掛單
{
If(BKDELC[X] == 0) //如果未撤單
{
If(TimeDiff(BKTC[X],NOW) >= T && BKPC[X] != RLPC[X]) //如果時(shí)間間隔T秒
{
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "撤單!】");
CODC[X].A_DeleteOrder(F_OrderContractNo(BKIDC[X])); //撤掉C買(mǎi)開(kāi)委托掛單
BKDELC[X] = 1; //已發(fā)出撤掉C買(mǎi)開(kāi)委托掛單
}
}
}
Else If(F_OrderStatus(BKIDC[X]) == Enum_Deleted) //如果C買(mǎi)開(kāi)委托廢單
{
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "廢單!】");
BKFLGC[X] = 0; //C買(mǎi)開(kāi)標(biāo)志歸0
}
}
If(SPFLGC[X] == 1) //如果有C賣(mài)平委托
{
If(F_OrderStatus(SPIDC[X]) == Enum_Filled) //如果C賣(mài)平委托成交
{
Commentary("【多頭平倉(cāng):C賣(mài)平委托" + Text(X + 1) + "成交!】");
SPFLGC[X] = 0; //C賣(mài)平標(biāo)志歸0
}
Else If(F_OrderStatus(SPIDC[X]) == Enum_Deleted) //如果C賣(mài)平委托廢單
{
Commentary("【多頭平倉(cāng):C賣(mài)平委托" + Text(X + 1) + "廢單!】");
SPFLGC[X] = 0; //C賣(mài)平標(biāo)志歸0
}
}
If(SKFLGC[X] == 1) //如果有C賣(mài)開(kāi)委托
{
If(F_OrderStatus(SKIDC[X]) == Enum_Filled) //如果C賣(mài)開(kāi)委托成交
{
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "成交!】");
SKFLGC[X] = 0; //C賣(mài)開(kāi)標(biāo)志歸0
SKDELC[X] = 0; //C賣(mài)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(SKIDC[X]) == Enum_Canceled) //如果C賣(mài)開(kāi)委托已撤
{
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "已撤!】");
If(F_OrderFilledLot(SKIDC[X]) > 0) //如果C賣(mài)開(kāi)委托部分成交
{
SKMC[X] = SKMC[X] - F_OrderFilledLot(SKIDC[X]); //C賣(mài)開(kāi)委托手?jǐn)?shù)
}
If(SKMC[X] > 0) //如果C賣(mài)開(kāi)委托手?jǐn)?shù)大于0
{
SKPC[X] = FLPC[X]; //C賣(mài)開(kāi)委托價(jià)格
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
SKIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMC[X],SKPC[X]); //發(fā)出C賣(mài)開(kāi)委托
}
SKDELC[X] = 0; //C賣(mài)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(SKIDC[X]) == Enum_Declared || F_OrderStatus(SKIDC[X]) == Enum_FillPart) //如果C賣(mài)開(kāi)委托掛單
{
If(SKDELC[X] == 0) //如果未撤單
{
If(TimeDiff(SKTC[X],NOW) >= T && SKPC[X] != FLPC[X]) //如果時(shí)間間隔T秒
{
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "撤單!】");
CODC[X].A_DeleteOrder(F_OrderContractNo(SKIDC[X])); //撤掉C賣(mài)開(kāi)委托掛單
SKDELC[X] = 1; //已發(fā)出撤掉C賣(mài)開(kāi)委托掛單
}
}
}
Else If(F_OrderStatus(SKIDC[X]) == Enum_Deleted) //如果C賣(mài)開(kāi)委托廢單
{
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "廢單!】");
SKFLGC[X] = 0; //C賣(mài)開(kāi)標(biāo)志歸0
}
}
If(BPFLGC[X] == 1) //如果有C買(mǎi)平委托
{
If(F_OrderStatus(BPIDC[X]) == Enum_Filled) //如果C買(mǎi)平委托成交
{
Commentary("【空頭平倉(cāng):C買(mǎi)平委托" + Text(X + 1) + "成交!】");
BPFLGC[X] = 0; //C買(mǎi)平標(biāo)志歸0
}
Else If(F_OrderStatus(BPIDC[X]) == Enum_Deleted) //如果C買(mǎi)平委托廢單
{
Commentary("【空頭平倉(cāng):C買(mǎi)平委托" + Text(X + 1) + "廢單!】");
BPFLGC[X] = 0; //C買(mǎi)平標(biāo)志歸0
}
}
If(BKFLGP[X] == 1) //如果有P買(mǎi)開(kāi)委托
{
If(F_OrderStatus(BKIDP[X]) == Enum_Filled) //如果P買(mǎi)開(kāi)委托成交
{
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "成交!】");
BKFLGP[X] = 0; //P買(mǎi)開(kāi)標(biāo)志歸0
BKDELP[X] = 0; //P買(mǎi)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(BKIDP[X]) == Enum_Canceled) //如果P買(mǎi)開(kāi)委托已撤
{
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "已撤!】");
If(F_OrderFilledLot(BKIDP[X]) > 0) //如果P買(mǎi)開(kāi)委托部分成交
{
BKMP[X] = BKMP[X] - F_OrderFilledLot(BKIDP[X]); //P買(mǎi)開(kāi)委托手?jǐn)?shù)
}
If(BKMP[X] > 0) //如果P買(mǎi)開(kāi)委托手?jǐn)?shù)大于0
{
BKPP[X] = RLPP[X]; //P買(mǎi)開(kāi)委托價(jià)格
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
BKIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMP[X],BKPP[X]); //發(fā)出P買(mǎi)開(kāi)委托
}
BKDELP[X] = 0; //P買(mǎi)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(BKIDP[X]) == Enum_Declared || F_OrderStatus(BKIDP[X]) == Enum_FillPart) //如果P買(mǎi)開(kāi)委托掛單
{
If(BKDELP[X] == 0) //如果未撤單
{
If(TimeDiff(BKTP[X],NOW) >= T && BKPP[X] != RLPP[X]) //如果時(shí)間間隔T秒
{
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "撤單!】");
CODP[X].A_DeleteOrder(F_OrderContractNo(BKIDP[X])); //撤掉P買(mǎi)開(kāi)委托掛單
BKDELP[X] = 1; //已發(fā)出撤掉P買(mǎi)開(kāi)委托掛單
}
}
}
Else If(F_OrderStatus(BKIDP[X]) == Enum_Deleted) //如果P買(mǎi)開(kāi)委托廢單
{
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "廢單!】");
BKFLGP[X] = 0; //P買(mǎi)開(kāi)標(biāo)志歸0
}
}
If(SPFLGP[X] == 1) //如果有P賣(mài)平委托
{
If(F_OrderStatus(SPIDP[X]) == Enum_Filled) //如果P賣(mài)平委托成交
{
Commentary("【多頭平倉(cāng):P賣(mài)平委托" + Text(X + 1) + "成交!】");
SPFLGP[X] = 0; //P賣(mài)平標(biāo)志歸0
}
Else If(F_OrderStatus(SPIDP[X]) == Enum_Deleted) //如果P賣(mài)平委托廢單
{
Commentary("【多頭平倉(cāng):P賣(mài)平委托" + Text(X + 1) + "廢單!】");
SPFLGP[X] = 0; //P賣(mài)平標(biāo)志歸0
}
}
If(SKFLGP[X] == 1) //如果有P賣(mài)開(kāi)委托
{
If(F_OrderStatus(SKIDP[X]) == Enum_Filled) //如果P賣(mài)開(kāi)委托成交
{
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "成交!】");
SKFLGP[X] = 0; //P賣(mài)開(kāi)標(biāo)志歸0
SKDELP[X] = 0; //P賣(mài)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(SKIDP[X]) == Enum_Canceled) //如果P賣(mài)開(kāi)委托已撤
{
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "已撤!】");
If(F_OrderFilledLot(SKIDP[X]) > 0) //如果P賣(mài)開(kāi)委托部分成交
{
SKMP[X] = SKMP[X] - F_OrderFilledLot(SKIDP[X]); //P賣(mài)開(kāi)委托手?jǐn)?shù)
}
If(SKMP[X] > 0) //如果P賣(mài)開(kāi)委托手?jǐn)?shù)大于0
{
SKPP[X] = FLPP[X]; //P賣(mài)開(kāi)委托價(jià)格
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
SKIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMP[X],SKPP[X]); //發(fā)出P賣(mài)開(kāi)委托
}
SKDELP[X] = 0; //P賣(mài)開(kāi)撤單標(biāo)志歸0
}
Else If(F_OrderStatus(SKIDP[X]) == Enum_Declared || F_OrderStatus(SKIDP[X]) == Enum_FillPart) //如果P賣(mài)開(kāi)委托掛單
{
If(SKDELP[X] == 0) //如果未撤單
{
If(TimeDiff(SKTP[X],NOW) >= T && SKPP[X] != FLPP[X]) //如果時(shí)間間隔T秒
{
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "撤單!】");
CODP[X].A_DeleteOrder(F_OrderContractNo(SKIDP[X])); //撤掉P賣(mài)開(kāi)委托掛單
SKDELP[X] = 1; //已發(fā)出撤掉P賣(mài)開(kāi)委托掛單
}
}
}
Else If(F_OrderStatus(SKIDP[X]) == Enum_Deleted) //如果P賣(mài)開(kāi)委托廢單
{
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "廢單!】");
SKFLGP[X] = 0; //P賣(mài)開(kāi)標(biāo)志歸0
}
}
If(BPFLGP[X] == 1) //如果有P買(mǎi)平委托
{
If(F_OrderStatus(BPIDP[X]) == Enum_Filled) //如果P買(mǎi)平委托成交
{
Commentary("【空頭平倉(cāng):P買(mǎi)平委托" + Text(X + 1) + "成交!】");
BPFLGP[X] = 0; //P買(mǎi)平標(biāo)志歸0
}
Else If(F_OrderStatus(BPIDP[X]) == Enum_Deleted) //如果P買(mǎi)平委托廢單
{
Commentary("【空頭平倉(cāng):P買(mǎi)平委托" + Text(X + 1) + "廢單!】");
BPFLGP[X] = 0; //P買(mǎi)平標(biāo)志歸0
}
}
}
}
//------------------------開(kāi)平處理------------------------//
If(OPFLG == 1) //開(kāi)平處理
{
For X = 0 To CDN - 1 //遍歷期權(quán)合約
{
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) //如果沒(méi)有開(kāi)平倉(cāng)委托
{
If(RTSC[X] > D && RTSC[X] > D) //如果滿足開(kāi)平倉(cāng)條件
{
If(KCFLG[X] == 0) //如果未執(zhí)行平倉(cāng)處理
{
If(KPFLG[X] == 0 || KPFLG[X] == 2) //如果未執(zhí)行開(kāi)平處理1
{
If(NEWPC[X] - NEWPP[X] > NEWPF - STP[X]) //如果滿足平倉(cāng)條件
{
SPDFLGC[X] = 1; //開(kāi)啟C賣(mài)平處理
BPDFLGP[X] = 1; //開(kāi)啟P買(mǎi)平處理
KPFLG[X] = 1; //已執(zhí)行開(kāi)平處理1
KCFLG[X] = 1; //已執(zhí)行平倉(cāng)處理
}
}
If(KPFLG[X] == 0 || KPFLG[X] == 1) //如果未執(zhí)行開(kāi)平處理2
{
If(NEWPC[X] - NEWPP[X] < NEWPF - STP[X]) //如果滿足平倉(cāng)條件
{
BPDFLGC[X] = 1; //開(kāi)啟C買(mǎi)平處理
SPDFLGP[X] = 1; //開(kāi)啟P賣(mài)平處理
KPFLG[X] = 2; //已執(zhí)行開(kāi)平處理2
KCFLG[X] = 1; //已執(zhí)行平倉(cāng)處理
}
}
}
Else If(KCFLG[X] == 1) //如果已執(zhí)行平倉(cāng)處理
{
If(KPFLG[X] == 1) //如果已執(zhí)行開(kāi)平處理1
{
SKDFLGC[X] = 1; //開(kāi)啟C賣(mài)開(kāi)處理
BKDFLGP[X] = 1; //開(kāi)啟P買(mǎi)開(kāi)處理
}
Else If(KPFLG[X] == 2) //如果已執(zhí)行開(kāi)平處理2
{
BKDFLGC[X] = 1; //開(kāi)啟C買(mǎi)開(kāi)處理
SKDFLGP[X] = 1; //開(kāi)啟P賣(mài)開(kāi)處理
}
KCFLG[X] = 0; //開(kāi)倉(cāng)處理標(biāo)志歸0
}
}
Else If(RTSC[X] <= D || RTSP[X] <= D) //如果滿足清倉(cāng)條件
{
If(KPFLG[X] == 1) //如果已執(zhí)行開(kāi)平處理1
{
BPDFLGC[X] = 1; //開(kāi)啟C買(mǎi)平處理
SPDFLGP[X] = 1; //開(kāi)啟P賣(mài)平處理
KCFLG[X] = 0; //開(kāi)倉(cāng)處理標(biāo)志歸0
KPFLG[X] = 0; //開(kāi)平處理標(biāo)志歸0
}
Else If(KPFLG[X] == 2) //如果已執(zhí)行開(kāi)平處理2
{
SPDFLGC[X] = 1; //開(kāi)啟C賣(mài)平處理
BPDFLGP[X] = 1; //開(kāi)啟P買(mǎi)平處理
KCFLG[X] = 0; //開(kāi)倉(cāng)處理標(biāo)志歸0
KPFLG[X] = 0; //開(kāi)平處理標(biāo)志歸0
}
}
}
}
}
//------------------------委托處理------------------------//
If(OPFLG == 1) //委托處理
{
For X = 0 To CDN - 1 //遍歷期權(quán)合約
{
If(BKDFLGC[X] == 1) //如果已開(kāi)啟C買(mǎi)開(kāi)處理
{
If(BKFLGC[X] == 0) //如果沒(méi)有C買(mǎi)開(kāi)委托
{
BKMC[X] = N; //C買(mǎi)開(kāi)委托手?jǐn)?shù)
BKPC[X] = ASKPC[X]; //C買(mǎi)開(kāi)委托價(jià)格
Commentary("【多頭開(kāi)倉(cāng):C買(mǎi)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
BKIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMC[X],BKPC[X]); //發(fā)出C買(mǎi)開(kāi)委托
BKTC[X] = NOW; //C買(mǎi)開(kāi)委托時(shí)間
BKFLGC[X] = 1; //已發(fā)出C買(mǎi)開(kāi)委托
}
}
If(SPDFLGC[X] == 1) //如果已開(kāi)啟C賣(mài)平處理
{
If(SPFLGC[X] == 0) //如果沒(méi)有C賣(mài)平委托
{
If(BRPC[X] >= N) //如果C多頭可用持倉(cāng)達(dá)到N手
{
SPMC[X] = N; //C賣(mài)平委托手?jǐn)?shù) www.tumamayizhan.com
SPPC[X] = BIDPC[X]; //C賣(mài)平委托價(jià)格
Commentary("【多頭平倉(cāng):C賣(mài)平委托" + Text(X + 1) + "發(fā)出!】");
SPIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMC[X],SPPC[X]); //發(fā)出C賣(mài)平委托
SPFLGC[X] = 1; //已發(fā)出C賣(mài)平委托
}
}
}
If(SKDFLGC[X] == 1) //如果已開(kāi)啟C賣(mài)開(kāi)處理
{
If(SKFLGC[X] == 0) //如果沒(méi)有C賣(mài)開(kāi)委托
{
SKMC[X] = N; //C賣(mài)開(kāi)委托手?jǐn)?shù)
SKPC[X] = BIDPC[X]; //C賣(mài)開(kāi)委托價(jià)格
Commentary("【空頭開(kāi)倉(cāng):C賣(mài)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
SKIDC[X] = CODC[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMC[X],SKPC[X]); //發(fā)出C賣(mài)開(kāi)委托
SKTC[X] = NOW; //C賣(mài)開(kāi)委托時(shí)間
SKFLGC[X] = 1; //已發(fā)出C賣(mài)開(kāi)委托
}
}
If(BPDFLGC[X] == 1) //如果已開(kāi)啟C買(mǎi)平處理
{
If(BPFLGC[X] == 0) //如果沒(méi)有C買(mǎi)平委托
{
If(SRPC[X] >= N) //如果C空頭可用持倉(cāng)達(dá)到N手
{
BPMC[X] = N; //C買(mǎi)平委托手?jǐn)?shù)
BPPC[X] = ASKPC[X]; //C買(mǎi)平委托價(jià)格
Commentary("【空頭平倉(cāng):C買(mǎi)平委托" + Text(X + 1) + "發(fā)出!】");
BPIDC[X] = CODC[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMC[X],BPPC[X]); //發(fā)出C買(mǎi)平委托
BPFLGC[X] = 1; //已發(fā)出C買(mǎi)平委托
}
}
}
If(BKDFLGP[X] == 1) //如果已開(kāi)啟P買(mǎi)開(kāi)處理
{
If(BKFLGP[X] == 0) //如果沒(méi)有P買(mǎi)開(kāi)委托
{
BKMP[X] = N; //P買(mǎi)開(kāi)委托手?jǐn)?shù) www.tumamayizhan.com
BKPP[X] = ASKPP[X]; //P買(mǎi)開(kāi)委托價(jià)格
Commentary("【多頭開(kāi)倉(cāng):P買(mǎi)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
BKIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Entry,BKMP[X],BKPP[X]); //發(fā)出P買(mǎi)開(kāi)委托
BKTP[X] = NOW; //P買(mǎi)開(kāi)委托時(shí)間
BKFLGP[X] = 1; //已發(fā)出P買(mǎi)開(kāi)委托
}
}
If(SPDFLGP[X] == 1) //如果已開(kāi)啟P賣(mài)平處理
{
If(SPFLGP[X] == 0) //如果沒(méi)有P賣(mài)平委托
{
If(BRPP[X] >= N) //如果P多頭可用持倉(cāng)達(dá)到N手
{
SPMP[X] = N; //P賣(mài)平委托手?jǐn)?shù)
SPPP[X] = BIDPP[X]; //P賣(mài)平委托價(jià)格
Commentary("【多頭平倉(cāng):P賣(mài)平委托" + Text(X + 1) + "發(fā)出!】");
SPIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Exit,SPMP[X],SPPP[X]); //發(fā)出P賣(mài)平委托
SPFLGP[X] = 1; //已發(fā)出P賣(mài)平委托
}
}
}
If(SKDFLGP[X] == 1) //如果已開(kāi)啟P賣(mài)開(kāi)處理
{
If(SKFLGP[X] == 0) //如果沒(méi)有P賣(mài)開(kāi)委托
{
SKMP[X] = N; //P賣(mài)開(kāi)委托手?jǐn)?shù)HTTP://www.tumamayizhan.com
SKPP[X] = BIDPP[X]; //P賣(mài)開(kāi)委托價(jià)格
Commentary("【空頭開(kāi)倉(cāng):P賣(mài)開(kāi)委托" + Text(X + 1) + "發(fā)出!】");
SKIDP[X] = CODP[X].A_SendOrder(Enum_Sell,Enum_Entry,SKMP[X],SKPP[X]); //發(fā)出P賣(mài)開(kāi)委托
SKTP[X] = NOW; //P賣(mài)開(kāi)委托時(shí)間
SKFLGP[X] = 1; //已發(fā)出P賣(mài)開(kāi)委托
}
}
If(BPDFLGP[X] == 1) //如果已開(kāi)啟P買(mǎi)平處理
{
If(BPFLGP[X] == 0) //如果沒(méi)有P買(mǎi)平委托
{
If(SRPP[X] >= N) //如果P空頭可用持倉(cāng)達(dá)到N手
{
BPMP[X] = N; //P買(mǎi)平委托手?jǐn)?shù)
BPPP[X] = ASKPP[X]; //P買(mǎi)平委托價(jià)格
Commentary("【空頭平倉(cāng):P買(mǎi)平委托" + Text(X + 1) + "發(fā)出!】");
BPIDP[X] = CODP[X].A_SendOrder(Enum_Buy,Enum_Exit,BPMP[X],BPPP[X]); //發(fā)出P買(mǎi)平委托
BPFLGP[X] = 1; //已發(fā)出P買(mǎi)平委托
}
}
}
}
}
End
?