文華期權定價模型策略模型計算期權理論價格及策略代碼源碼[文華財經公式]
優勢
提供期權行情函數,可直接引用波動率等數據。
全市場實時監控,自動捕獲期權各種套利機會。
支持對期權交易過程精細控制,提高交易成功率。
?
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 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容

會員登錄/注冊