




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ADX均線策略(TB版)策略概述該策略基于ADX(平均方向性移動指數(shù))和EMA(指數(shù)移動平均線)構(gòu)建交易系統(tǒng),旨在捕捉市場趨勢變化,實現(xiàn)買入和賣出操作。參數(shù)設(shè)置DMI_N:14計算DMI指標(biāo)的周期數(shù)。DMI_M:30,用于平滑ADX指標(biāo)的周期數(shù)。AvgLen:30,用于計算EMA的周期數(shù)。EntryBar:2,入場確認(rèn)后的等待周期數(shù)。FastLength:5,快速移動平均線周期數(shù)(擴(kuò)展部分)。SlowLength:20,慢速移動平均線周期數(shù)(擴(kuò)展部分)。TrailingStart1、TrailingStart2、TrailingStop1、TrailingStop2:跟蹤止盈的啟動和設(shè)置參數(shù)(擴(kuò)展部分)。StopLossSet:30,固定止損點(diǎn)數(shù)(擴(kuò)展部分)。入場條件做多條件:上根K線的收盤價高于30根K線最高價的EMA。ADX指標(biāo)向上(即當(dāng)前ADX值大于前一根K線的ADX值)。當(dāng)前價格大于等于多頭觸發(fā)價(BuyTarget),多頭觸發(fā)價=收盤價+(30根K線最高價的EMA-30根K線最低價的EMA)/2。滿足上述條件后的EntryBar周期內(nèi)入場。做空條件:上根K線的收盤價低于30根K線最低價的EMA。ADX指標(biāo)向上。當(dāng)前價格小于等于空頭觸發(fā)價(SellTarget),空頭觸發(fā)價=收盤價-(30根K線最高價的EMA-30根K線最低價的EMA)/2。滿足上述條件后的EntryBar周期內(nèi)入場。出場條件多單出場:當(dāng)前價格下破30根K線最高價的EMA??蛇x跟蹤止盈或固定止損出場??諉纬鰣觯寒?dāng)前價格上破30根K線最低價的EMA??蛇x跟蹤止盈或固定止損出場。擴(kuò)展交易規(guī)則兩均線交叉買入:當(dāng)快速移動平均線(FastLength周期)上穿慢速移動平均線(SlowLength周期),且ADX值大于25時,執(zhí)行買入操作。兩均線交叉賣出:當(dāng)快速移動平均線下穿慢速移動平均線,且ADX值大于25時,執(zhí)行賣出操作。跟蹤止盈:根據(jù)最高價(多單)或最低價(空單)與入場價的差距,動態(tài)調(diào)整止損點(diǎn),以實現(xiàn)跟蹤止盈。代碼邏輯策略代碼中包含了DMI指標(biāo)的計算過程、EMA的計算、入場條件的判斷、出場條件的判斷以及擴(kuò)展交易規(guī)則的實現(xiàn)。實現(xiàn)了對市場趨勢的識別和交易信號的生成。做多代碼:ParamsNumericDMI_N(14);NumericDMI_M(30);NumericAvgLen(30);NumericEntryBar(2);VarsNumericSeriesoDMIPlus;NumericSeriesoDMIMinus;NumericSeriesoDMI;NumericSeriesoADX;NumericSeriesoADXR;NumericSeriesoVolty;NumericSeriessDMI;NumericSeriessADX;NumericSeriescumm;NumericSeriessVolty;NumericPlusDM;NumericMinusDM;NumericUpperMove;NumericLowerMove;NumericSumPlusDM(0);NumericSumMinusDM(0);NumericSumTR(0);NumericSeriesAvgPlusDM;NumericSeriesAvgMinusDM;NumericSF;NumericDivisor;Numerici;NumericSeriesTRValue;NumericSeriesUpperMA(0);NumericSeriesLowerMA(0);NumericSeriesADXValue(0);NumericSeriesChanSpread(0);BoolBuySetup(False);NumericSeriesBuyTarget(0);NumericSeriesMROBS(0);BoolSeriesCon1;NumericMinpoint;BeginIf(!CallAuctionFilter())Return;Minpoint=Minmove*PriceScale;SF=1/DMI_N;TRValue=TrueRange;If(CurrentBar==DMI_N){Fori=0ToDMI_N-1{PlusDM=0;MinusDM=0;UpperMove=High[i]-High[i+1];LowerMove=Low[i+1]-Low[i];If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}SumPlusDM=SumPlusDM+PlusDM;SumMinusDM=SumMinusDM+MinusDM;SumTR=SumTR+TRValue[i];}AvgPlusDM=SumPlusDM/DMI_N;AvgMinusDM=SumMinusDM/DMI_N;sVolty=SumTR/DMI_N;}Elseif(CurrentBar>DMI_N){PlusDM=0;MinusDM=0;UpperMove=High-High[1];LowerMove=Low[1]-Low;If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);}Else{oDMIPlus=InvalidNumeric;oDMIMinus=InvalidNumeric;oDMI=InvalidNumeric;oADX=InvalidNumeric;oADXR=InvalidNumeric;oVolty=InvalidNumeric;}If(sVolty>0){oDMIPlus=100*AvgPlusDM/sVolty;oDMIMinus=100*AvgMinusDM/sVolty;}else{oDMIPlus=0;oDMIMinus=0;}Divisor=oDMIPlus+oDMIMinus;if(Divisor>0){sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;}else{sDMI=0;}cumm=Cum(sDMI);If(CurrentBar>0){If(CurrentBar<=DMI_N){sADX=Cumm/CurrentBar;oADXR=(sADX+sADX[CurrentBar-1])*0.5;}Else{sADX=sADX[1]+SF*(sDMI-sADX[1]);oADXR=(sADX+sADX[DMI_M-1])*0.5;}}oVolty=sVolty;oDMI=sDMI;oADX=sADX;ADXValue=oADX;UpperMA=XAverage(High,AvgLen);LowerMA=XAverage(Low,AvgLen);ChanSpread=(UpperMA-LowerMA)/2;BuySetup=Close>UpperMAandADXValue>ADXValue[1];IF(BuySetup){BuyTarget=Close+ChanSpread;}MROBS=NthCon(BuySetup,1);If(MROBS>EntryBar){MROBS=0;}IF(MROBS[1]<>0andMarketPosition==0andCurrentBar>100){If(High>=BuyTarget[1]AndVol>0){Buy(0,max(Open,BuyTarget[1]));}}If(MarketPosition==1andBarsSinceEntry>0AndVol>0){If(Low<=UpperMA[1]-Minpoint){Sell(0,min(Open,UpperMA[1]-minpoint));}}End做多代碼解讀:ParamsNumericDMI_N(14);//聲明數(shù)值型參數(shù)名DMI_N,初始值為14.//NumericDMI_M(30);//聲明數(shù)值型參數(shù)名DMI_M,初始值為30.//NumericAvgLen(30);//聲明數(shù)值型參數(shù)名為AvgLen,初始值為30.//NumericEntryBar(2);//聲明數(shù)值型參數(shù)名為EntryBar,初始值為2.//Vars//DMI最終算出結(jié)果需要的變量名。//NumericSeriesoDMIPlus;//聲明數(shù)值序列變量名為oDMIPlus.//NumericSeriesoDMIMinus;//聲明數(shù)值序列變量名為oDMIMinus.//NumericSeriesoDMI;//聲明數(shù)值序列變量名為oDMI.//NumericSeriesoADX;//聲明數(shù)值序列變量名為oADX.//NumericSeriesoADXR;//聲明數(shù)值序列變量名為oADXR.//NumericSeriesoVolty;//聲明數(shù)值序列變量名為oVolty.////DMI過程計算中需要的變量名。//NumericSeriessDMI;//聲明數(shù)值序列變量名sDMI.//NumericSeriessADX;//聲明數(shù)值序列變量名sADX.//NumericSeriescumm;//聲明數(shù)值序列變量名cumm。//NumericSeriessVolty;//聲明數(shù)值序列變量名sVilty。//NumericPlusDM;//聲明數(shù)值變量名PlusDM。//NumericMinusDM;//聲明數(shù)值變量名MinusDM。//NumericUpperMove;//聲明數(shù)值變量名UpperMove。//NumericLowerMove;//聲明數(shù)值變量名LowerMove。//NumericSumPlusDM(0);//聲明數(shù)值變量名SumPlusDM,賦值為0.//NumericSumMinusDM(0);//聲明數(shù)值變量名SumMinusDM,賦值為0.//NumericSumTR(0);//聲明數(shù)值變量名SumTR,賦值為0.//NumericSeriesAvgPlusDM;//聲明數(shù)值序列變量名AvgPlusDM.//NumericSeriesAvgMinusDM;//聲明數(shù)值序列變量名AvgMinusDM.//NumericSF;//聲明數(shù)值變量名SF。//NumericDivisor;聲明數(shù)值變量名Divisor。//Numerici;//聲明數(shù)值變量名i。//NumericSeriesTRValue;//聲明數(shù)值序列變量名TRValue。////計算EMA用的變量名。//NumericSeriesUpperMA(0);//聲明數(shù)值序列變量UpperMA,賦值為0.//NumericSeriesLowerMA(0);//聲明數(shù)值序列變量LowerMA,賦值為0.//NumericSeriesADXValue(0);//聲明數(shù)值序列變量ADXValue,賦值為0.//NumericSeriesChanSpread(0);//聲明數(shù)值序列變量ChanSpread,賦值為0.//BoolBuySetup(False);//聲明布爾型變量名BuySetup,初始判斷為假。//NumericSeriesBuyTarget(0);//聲明數(shù)值變量名BuyTarget,賦值為0.//NumericSeriesMROBS(0);//聲明數(shù)值變量名MROBS,賦值為0.//BoolSeriesCon1;//聲明布爾型序列變量名Con1.//NumericMinpoint;//聲明數(shù)值型變量名Minpoint。//BeginIf(!CallAuctionFilter())Return;//集合競價和小節(jié)休息過濾。//Minpoint=Minmove*PriceScale;//這兩句一般固定的直接調(diào)用就行,一個過濾,一個計算最小變動價位。////DMI指標(biāo)計算,最終將輸出ADX指標(biāo)SF=1/DMI_N;//變量SF是一個隨周期而變化的系數(shù),根據(jù)上面的賦值,可以直接得出SF=1/14。//TRValue=TrueRange;//變量TRValue值,直接調(diào)用以前我們解讀過的求真實波動函數(shù)TrueRange的值。//If(CurrentBar==DMI_N)//假如當(dāng)前k線數(shù)位等于14,按照下列語句來計算。//{Fori=0ToDMI_N-1//循環(huán)語句,就是下列計算方程i值從0-13給它計算一遍。//{PlusDM=0;//先直接等于0了//MinusDM=0;//先等于0//UpperMove=High[i]-High[i+1];//開始從UpperMove=最高價High[0]-最高價High[1],一直計算到High[13]-High[14],相當(dāng)于反復(fù)算了14次//LowerMove=Low[i+1]-Low[i];//同上的,算這變量LowerMove,也來14次,但記住了,循環(huán)計算也是按照順序邏輯來的,就像我們小學(xué)記的九九乘法表那樣,先把1乘以到9,再2乘以到9,程序也是這么一步步按語句來讀的,所以從這FOR下邊的這花括號反復(fù)計算,當(dāng)條件不滿足了,才直接就跳過這括號//If(UpperMove>LowerMoveandUpperMove>0)//假如算得的變量UpperMove大于LowerMove,而且UpperMove大于0.//{PlusDM=UpperMove;//變量PlusDM就等于變量UpperMove值。//}Elseif(LowerMove>UpperMoveandLowerMove>0)//并列語句,當(dāng)條件變成這樣的時候,變量LowerMove大于變量UpperMove值,而且LowerMove大于0.//{MinusDM=LowerMove;//變量MinusDM值等于變量LowerMove值。//}SumPlusDM=SumPlusDM+PlusDM;//累加起來的意思,從變量SumPlusDM等于0逐步加上計算所得的PlusDM值。//SumMinusDM=SumMinusDM+MinusDM;//同上解讀,這個是累加變量SumMinusDM總值。//SumTR=SumTR+TRValue[i];//同上,把真實波動值計算出來,累加到變量SumTR總值里。//}AvgPlusDM=SumPlusDM/DMI_N;//變量AvgPlusDM值等于變量SumPlusDM總值除以周期數(shù)14.//AvgMinusDM=SumMinusDM/DMI_N;//同上的解讀。//sVolty=SumTR/DMI_N;//同上解讀的。//}//循環(huán)到這只要還在0-13里的,就往回重新算一次,直到條件不滿足了,才開始讀下列語句。//Elseif(CurrentBar>DMI_N)//看著明白了吧,當(dāng)k線數(shù)位大于了周期數(shù)14.就是上邊循環(huán)跳出來了,開始執(zhí)行下列語句。//{PlusDM=0;//先等于0.你要問我那14根k線里循環(huán)計算得到的變量PlusDM值呢?我只能跟你說,那個值是針對前14根k線計算的,但是從第15根到開始一直到當(dāng)前跳動的K線,變量PlusDM都是從0新算起。//MinusDM=0;//同上解讀的。先等于0.//UpperMove=High-High[1];//變量UpperMove值等于當(dāng)前的最高價減去前一個的最高價。//LowerMove=Low[1]-Low;//變量LowerMove值等于前一個最低價減去當(dāng)前的最低價。//If(UpperMove>LowerMoveandUpperMove>0)//假如了UpperMove大于LowerMove,并且大于0的。//{PlusDM=UpperMove;//把變量UpperMove值賦值給變量PlusDM,變成一個新值了,這時不再等于0了。//}Elseif(LowerMove>UpperMoveandLowerMove>0)//假如LowerMove大于UpperMove,并且大于0的。//{MinusDM=LowerMove;//也是賦予變量MinusDM新的值,即等于變量LowerMove值。//}AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);//照公式直接解讀,變量AvgPlusDM[1]意思是前一個,對第15根k線來說,就是前14根k線算得的值。所以記住這[1]就是從當(dāng)前數(shù)位倒退一個數(shù)位的意思。//AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);//這個也直接照公式解讀。//sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);//同上的,直接照公式解讀。//}Else//其實這最后這個else就是上面CurrentBar不是大于或等于14時,那就是小于14了,執(zhí)行下列語句,變量都是返回?zé)o效值的。//{oDMIPlus=InvalidNumeric;//返回?zé)o效值。//oDMIMinus=InvalidNumeric;//返回?zé)o效值。//oDMI=InvalidNumeric;//返回?zé)o效值。//oADX=InvalidNumeric;//返回?zé)o效值。//oADXR=InvalidNumeric;//返回?zé)o效值。//oVolty=InvalidNumeric;//返回?zé)o效值。//}If(sVolty>0)//假如計算得的變量sVolty值大于0.//{oDMIPlus=100*AvgPlusDM/sVolty;//變量0DMIPlus=100*變量AvgPlusDM/變量sVolty。//oDMIMinus=100*AvgMinusDM/sVolty;//直接照公式解讀了。//}Else//這就是假如當(dāng)變量sVolty小于0時。//{oDMIPlus=0;//變量oDMIPlus=0.//oDMIMinus=0;//變量oDMIMinus=0.//}Divisor=oDMIPlus+oDMIMinus;//變量Divisor=變量oDMIPlus+變量oDMIMinus//if(Divisor>0)//假如算得的變量Divisor值大于0的。//{sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;//函數(shù)Abs()意思是返回參數(shù)的絕對值,通俗的說不管括號里計算得到的是大于還是小于0,它返回的都是正整數(shù)。所以照公式解讀,算出變量sDMI值了。//}else//假如算得的變量Divisor小于0的。//{sDMI=0;//變量sDMI等于0.//}cumm=Cum(sDMI);//函數(shù)Cum(),意思是求累計值,所以這個Cum(sDMI)就是計算從第一個k線以來sDMI值的累計值,把它賦值給變量cumm的。//If(CurrentBar>0)//假如k線數(shù)位大于0的,其實就是從第二根開始了。//{If(CurrentBar<=DMI_N)//這里再給個限定條件,k線數(shù)位小于或等于周期數(shù)14的。//{sADX=Cumm/CurrentBar;//變量sADX等于變量Cumm值除以k線數(shù)位值的。//oADXR=(sADX+sADX[CurrentBar-1])*0.5;//變量oADXR=(變量sADX+變量sADX[k線數(shù)位值-1])*固定系數(shù)0.5//}Else//這個就是假如CurrentBar大于14的。//{sADX=sADX[1]+SF*(sDMI-sADX[1]);//變量sADX又是一個新算法,直接照公式來解讀了。//oADXR=(sADX+sADX[DMI_M-1])*0.5;//同樣的,照公式算出新的oADXR值。//}}oVolty=sVolty;//變量oVolty=變量sVolty。//oDMI=sDMI;//變量oDMI=變量sDMI。//oADX=sADX;//變量oADX=變量sADX。//ADXValue=oADX;//變量ADXValue=變量oADX,其實這就是ADX均線了。//UpperMA=XAverage(High,AvgLen);//計算30根K線最高價的EMA。//LowerMA=XAverage(Low,AvgLen);//計算30根K線最低價的EMA。//ChanSpread=(UpperMA-LowerMA)/2;//通過EMA計算出通道寬度。//BuySetup=Close>UpperMAandADXValue>ADXValue[1];//當(dāng)ADX向上且當(dāng)前價大于30根K線最高價的EMA滿足買入準(zhǔn)備條件。//IF(BuySetup)//假如滿足買入條件了,執(zhí)行下列語句。//{BuyTarget=Close+ChanSpread;//滿足買入準(zhǔn)備條件時,用當(dāng)前k線價格計算出多頭觸發(fā)價,即為當(dāng)前價+通道值。//}MROBS=NthCon(BuySetup,1);//上次滿足買入準(zhǔn)備條件距離當(dāng)前k線的距離數(shù)目.//If(MROBS>EntryBar)//假如這個距離數(shù)目大于參數(shù)EntryBar初值2的。//{MROBS=0;//距離上次買入準(zhǔn)備條件超過參數(shù)ENTRYBAR的數(shù)目后,重置。//}//系統(tǒng)入場條件。//IF(MROBS[1]<>0andMarketPosition==0andCurrentBar>100)//滿足買入準(zhǔn)備條件后,在ENTRYBAR數(shù)目內(nèi),且大于等于買入多頭觸發(fā)價,多單入場。//{If(High>=BuyTarget[1]AndVol>0)//高價突破變量BuyTarget[1],而且成交量大于0的。//{Buy(0,max(Open,BuyTarget[1]));//取最大值開盤價買入1手。//}}//系統(tǒng)出場條件。//If(MarketPosition==1andBarsSinceEntry>0AndVol>0)//當(dāng)持有多單且當(dāng)前價格下破30根K線最高價的EMA,多單出場。//{If(Low<=UpperMA[1]-Minpoint)//低價小于或者等于UpperMA[1]-最小變動價Minpoint。//{Sell(0,min(Open,UpperMA[1]-minpoint));//取最小值賣出平倉。//}}End做空信號代碼ParamsNumericDMI_N(14);NumericDMI_M(30);NumericAvgLen(30);NumericEntryBar(2);VarsNumericSeriesoDMIPlus;NumericSeriesoDMIMinus;NumericSeriesoDMI;NumericSeriesoADX;NumericSeriesoADXR;NumericSeriesoVolty;NumericSeriessDMI;NumericSeriessADX;NumericSeriescumm;NumericSeriessVolty;NumericPlusDM;NumericMinusDM;NumericUpperMove;NumericLowerMove;NumericSumPlusDM(0);NumericSumMinusDM(0);NumericSumTR(0);NumericSeriesAvgPlusDM;NumericSeriesAvgMinusDM;NumericSF;NumericDivisor;Numerici;NumericSeriesTRValue;NumericSeriesUpperMA(0);NumericSeriesLowerMA(0);NumericSeriesADXValue(0);NumericSeriesChanSpread(0);BoolSellSetup(False);NumericSeriesSellTarget(0);NumericSeriesMROSS(0);NumericMinpoint;Begin//集合競價和小節(jié)休息過濾If(!CallAuctionFilter())Return;Minpoint=Minmove*PriceScale;//---DMI計算開始---//SF=1/DMI_N;TRValue=TrueRange;If(CurrentBar==DMI_N){Fori=0ToDMI_N-1{PlusDM=0;MinusDM=0;UpperMove=High[i]-High[i+1];LowerMove=Low[i+1]-Low[i];If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}SumPlusDM=SumPlusDM+PlusDM;SumMinusDM=SumMinusDM+MinusDM;SumTR=SumTR+TRValue[i];}AvgPlusDM=SumPlusDM/DMI_N;AvgMinusDM=SumMinusDM/DMI_N;sVolty=SumTR/DMI_N;}Elseif(CurrentBar>DMI_N){PlusDM=0;MinusDM=0;UpperMove=High-High[1];LowerMove=Low[1]-Low;If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);}Else{oDMIPlus=InvalidNumeric;oDMIMinus=InvalidNumeric;oDMI=InvalidNumeric;oADX=InvalidNumeric;oADXR=InvalidNumeric;oVolty=InvalidNumeric;}If(sVolty>0){oDMIPlus=100*AvgPlusDM/sVolty;oDMIMinus=100*AvgMinusDM/sVolty;}Else{oDMIPlus=0;oDMIMinus=0;}Divisor=oDMIPlus+oDMIMinus;if(Divisor>0){sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;}else{sDMI=0;}cumm=Cum(sDMI);If(CurrentBar>0){If(CurrentBar<=DMI_N){sADX=Cumm/CurrentBar;oADXR=(sADX+sADX[CurrentBar-1])*0.5;}Else{sADX=sADX[1]+SF*(sDMI-sADX[1]);oADXR=(sADX+sADX[DMI_M-1])*0.5;}}oVolty=sVolty;oDMI=sDMI;oADX=sADX;//PlotNumeric("oADX",oADX);//---DMI計算結(jié)束---//ADXValue=oADX;UpperMA=XAverage(High,AvgLen);LowerMA=XAverage(Low,AvgLen);ChanSpread=(UpperMA-LowerMA)/2;SellSetup=Close<LowerMAandADXValue>ADXValue[1];//當(dāng)ADX向上且當(dāng)前價下于30根K線最低價的EMA滿足賣出準(zhǔn)備條件。//If(SellSetup){SellTarget=Close-ChanSpread;//滿足賣出準(zhǔn)備條件時,用前bar價格計算出空頭觸發(fā)價。//}MROSS=NthCon(SellSetup,1);//上次滿足賣出準(zhǔn)備條件距離當(dāng)前BAR的數(shù)目//If(MROSS>EntryBar){MROSS=0;//距離上次賣出準(zhǔn)備條件超過ENTRYBAR的數(shù)目后,重置//}//系統(tǒng)入場規(guī)則//If(MROSS[1]<>0andMarketPosition==0andCurrentBar>100)//滿足賣出準(zhǔn)備條件后ENTRYBAR數(shù)目內(nèi),且小于等于空頭觸發(fā)價,空單入場//{If(Low<=SellTarget[1]AndVol>0){Sellshort(0,Min(Open,SellTarget[1]));}}//系統(tǒng)出場規(guī)則//If(MarketPosition==-1andBarsSinceEntry>0AndVol>0)//當(dāng)持有空單且當(dāng)前價格上破30根K線最低價的EMA,多單出場//{If(High>=LowerMA[1]+minpoint){BuyToCover(0,max(Open,LowerMA[1]+minpoint));}}End做空信號代碼解釋Params//定義數(shù)值型參數(shù)DMI_N并初始化為14NumericDMI_N(14);//定義數(shù)值型參數(shù)DMI_M并初始化為30NumericDMI_M(30);//定義數(shù)值型參數(shù)AvgLen并初始化為30NumericAvgLen(30);//定義數(shù)值型參數(shù)EntryBar并初始化為2NumericEntryBar(2);Vars//聲明數(shù)值序列變量oDMIPlusNumericSeriesoDMIPlus;//聲明數(shù)值序列變量oDMIMinusNumericSeriesoDMIMinus;//聲明數(shù)值序列變量oDMINumericSeriesoDMI;//聲明數(shù)值序列變量oADXNumericSeriesoADX;//聲明數(shù)值序列變量oADXRNumericSeriesoADXR;//聲明數(shù)值序列變量oVoltyNumericSeriesoVolty;//聲明數(shù)值序列變量sDMINumericSeriessDMI;//聲明數(shù)值序列變量sADXNumericSeriessADX;//聲明數(shù)值序列變量cummNumericSeriescumm;//聲明數(shù)值序列變量sVoltyNumericSeriessVolty;//聲明數(shù)值變量PlusDMNumericPlusDM;//聲明數(shù)值變量MinusDMNumericMinusDM;//聲明數(shù)值變量UpperMoveNumericUpperMove;//聲明數(shù)值變量LowerMoveNumericLowerMove;//聲明數(shù)值變量SumPlusDM并初始化為0NumericSumPlusDM(0);//聲明數(shù)值變量SumMinusDM并初始化為0NumericSumMinusDM(0);//聲明數(shù)值變量SumTR并初始化為0NumericSumTR(0);//聲明數(shù)值序列變量AvgPlusDMNumericSeriesAvgPlusDM;//聲明數(shù)值序列變量AvgMinusDMNumericSeriesAvgMinusDM;//聲明數(shù)值變量SFNumericSF;//聲明數(shù)值變量DivisorNumericDivisor;//聲明數(shù)值變量iNumerici;//聲明數(shù)值序列變量TRValueNumericSeriesTRValue;//聲明數(shù)值序列變量UpperMA并初始化為0NumericSeriesUpperMA(0);//聲明數(shù)值序列變量LowerMA并初始化為0NumericSeriesLowerMA(0);//聲明數(shù)值序列變量ADXValue并初始化為0NumericSeriesADXValue(0);//聲明數(shù)值序列變量ChanSpread并初始化為0NumericSeriesChanSpread(0);//聲明布爾型變量SellSetup并初始化為FalseBoolSellSetup(False);//聲明數(shù)值序列變量SellTarget并初始化為0NumericSeriesSellTarget(0);//聲明數(shù)值序列變量MROSS并初始化為0NumericSeriesMROSS(0);//聲明數(shù)值變量MinpointNumericMinpoint;Begin//集合競價和小節(jié)休息過濾If(!CallAuctionFilter())Return;//計算最小變動價位Minpoint=Minmove*PriceScale;//---DMI計算開始---////計算系數(shù)SFSF=1/DMI_N;//計算真實波動范圍值并賦值給TRValueTRValue=TrueRange;//如果當(dāng)前bar數(shù)等于DMI_NIf(CurrentBar==DMI_N){//循環(huán)計算相關(guān)變量Fori=0ToDMI_N-1{//初始化PlusDM和MinusDM為0PlusDM=0;MinusDM=0;//計算UpperMove和LowerMoveUpperMove=High[i]-High[i+1];LowerMove=Low[i+1]-Low[i];//根據(jù)條件賦值PlusDM和MinusDMIf(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}//累加相關(guān)變量SumPlusDM=SumPlusDM+PlusDM;SumMinusDM=SumMinusDM+MinusDM;SumTR=SumTR+TRValue[i];}//計算平均值A(chǔ)vgPlusDM=SumPlusDM/DMI_N;AvgMinusDM=SumMinusDM/DMI_N;sVolty=SumTR/DMI_N;}//如果當(dāng)前bar數(shù)大于DMI_NElseif(CurrentBar>DMI_N){//初始化PlusDM和MinusDM為0PlusDM=0;MinusDM=0;//計算UpperMove和LowerMoveUpperMove=High-High[1];LowerMove=Low[1]-Low;//根據(jù)條件賦值PlusDM和MinusDMIf(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}//計算相關(guān)變量AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);}//否則(當(dāng)前bar數(shù)小于DMI_N)Else{//賦值為無效數(shù)值oDMIPlus=InvalidNumeric;oDMIMinus=InvalidNumeric;oDMI=InvalidNumeric;oADX=InvalidNumeric;oADXR=InvalidNumeric;oVolty=InvalidNumeric;}//根據(jù)sVolty的值計算oDMIPlus和oDMIMinusIf(sVolty>0){oDMIPlus=100*AvgPlusDM/sVolty;oDMIMinus=100*AvgMinusDM/sVolty;}Else{oDMIPlus=0;oDMIMinus=0;}//計算DivisorDivisor=oDMIPlus+oDMIMinus;//根據(jù)Divisor的值計算sDMIif(Divisor>0){sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;}else{sDMI=0;}//計算累計值cumm=Cum(sDMI);//根據(jù)當(dāng)前bar數(shù)計算sADX和oADXRIf(CurrentBar>0){If(CurrentBar<=DMI_N){sADX=Cumm/CurrentBar;oADXR=(sADX+sADX[CurrentBar-1])*0.5;}Else{sADX=sADX[1]+SF*(sDMI-sADX[1]);oADXR=(sADX+sADX[DMI_M-1])*0.5;}}//賦值相關(guān)變量oVolty=sVolty;oDMI=sDMI;oADX=sADX;//---DMI計算結(jié)束---////計算相關(guān)指標(biāo)ADXValue=oADX;UpperMA=XAverage(High,AvgLen);LowerMA=XAverage(Low,AvgLen);ChanSpread=(UpperMA-LowerMA)/2;//設(shè)置賣出準(zhǔn)備條件SellSetup=Close<LowerMAandADXValue>ADXValue[1];//如果滿足賣出準(zhǔn)備條件,計算空頭觸發(fā)價If(SellSetup){SellTarget=Close-ChanSpread;}//計算上次滿足賣出準(zhǔn)備條件距離當(dāng)前bar的數(shù)目MROSS=NthCon(SellSetup,1);//如果距離超過EntryBar,重置If(MROSS>EntryBar){MROSS=0;}//系統(tǒng)入場規(guī)則If(MROSS[1]<>0andMarketPosition==0andCurrentBar>100){If(Low<=SellTarget[1]AndVol>0){Sellshort(0,Min(Open,SellTarget[1]));}}//系統(tǒng)出場規(guī)則If(MarketPosition==-1andBarsSinceEntry>0AndVol>0){If(High>=LowerMA[1]+minpoint){BuyToCover(0,max(Open,LowerMA[1]+minpoint));}}End不行,還得加買賣規(guī)則:兩條移動均價,ADX值大于25的,兩均線交叉的買入;ADX大于25,兩均線交叉賣出。加上后的信號代碼如下:ParamsNumericDMI_N(14);NumericDMI_M(30);NumericAvgLen(30);NumericFastLength(5);NumericSlowLength(20);NumericTrailingStart1(50);//跟蹤止盈啟動設(shè)置1//NumericTrailingStart2(80);//跟蹤止盈啟動設(shè)置2//NumericTrailingStop1(30);//跟蹤止盈設(shè)置1//NumericTrailingStop2(20);//跟蹤止盈設(shè)置2//NumericStopLossSet(30);//固定止損30個點(diǎn)//VarsNumericSeriesoDMIPlus;NumericSeriesoDMIMinus;NumericSeriesoDMI;NumericSeriesoADX;NumericSeriesoADXR;NumericSeriesoVolty;NumericSeriessDMI;NumericSeriessADX;NumericSeriescumm;NumericSeriessVolty;NumericPlusDM;NumericMinusDM;NumericUpperMove;NumericLowerMove;NumericSumPlusDM(0);NumericSumMinusDM(0);NumericSumTR(0);NumericSeriesAvgPlusDM;NumericSeriesAvgMinusDM;NumericSF;NumericDivisor;Numerici;NumericSeriesTRValue;NumericMinpoint;NumericSeriesAvgValue1;NumericSeriesAvgValue2;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;NumericMyEntryPrice;Numericmyprice;Numericmyexitprice;BeginAvgValue1=AverageFC(Close,FastLength);AvgValue2=AverageFC(Close,SlowLength);PlotNumeric("MA1",AvgValue1);PlotNumeric("MA2",AvgValue2);If(!CallAuctionFilter())Return;Minpoint=Minmove*PriceScale;//---DMI計算開始---//SF=1/DMI_N;TRValue=TrueRange;If(CurrentBar==DMI_N){Fori=0ToDMI_N-1{PlusDM=0;MinusDM=0;UpperMove=High[i]-High[i+1];LowerMove=Low[i+1]-Low[i];If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}SumPlusDM=SumPlusDM+PlusDM;SumMinusDM=SumMinusDM+MinusDM;SumTR=SumTR+TRValue[i];}AvgPlusDM=SumPlusDM/DMI_N;AvgMinusDM=SumMinusDM/DMI_N;sVolty=SumTR/DMI_N;}Elseif(CurrentBar>DMI_N){PlusDM=0;MinusDM=0;UpperMove=High-High[1];LowerMove=Low[1]-Low;If(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);}Else{oDMIPlus=InvalidNumeric;oDMIMinus=InvalidNumeric;oDMI=InvalidNumeric;oADX=InvalidNumeric;oADXR=InvalidNumeric;oVolty=InvalidNumeric;}If(sVolty>0){oDMIPlus=100*AvgPlusDM/sVolty;oDMIMinus=100*AvgMinusDM/sVolty;}Else{oDMIPlus=0;oDMIMinus=0;}Divisor=oDMIPlus+oDMIMinus;if(Divisor>0){sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;}else{sDMI=0;}cumm=Cum(sDMI);If(CurrentBar>0){If(CurrentBar<=DMI_N){sADX=Cumm/Curren
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國螺旋藻行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025天津市建筑安全員知識題庫
- 2025-2030年中國航空客運(yùn)行業(yè)市場發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025-2030年中國電解錳廢渣處理行業(yè)競爭狀況及發(fā)展趨勢分析報告
- 長江大學(xué)《設(shè)計軟件基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國石油大學(xué)(華東)《強(qiáng)化學(xué)習(xí)(雙語)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安體育學(xué)院《食品分析技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西衛(wèi)生職業(yè)技術(shù)學(xué)院《食品研究開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 幼兒園 中班心理健康《我會傾訴》
- GB/T 6553-2024嚴(yán)酷環(huán)境條件下使用的電氣絕緣材料評定耐電痕化和蝕損的試驗方法
- 中職旅游專業(yè)《中國旅游地理》說課稿
- 微積分試卷及規(guī)范標(biāo)準(zhǔn)答案6套
- 【鄉(xiāng)村振興背景下農(nóng)村基層治理問題探究開題報告(含提綱)3000字】
- 藥物警戒管理體系記錄與數(shù)據(jù)管理規(guī)程
- 2024-2029年擴(kuò)展塢行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃投資研究報告
- SH/T 3003-2024 石油化工合理利用能源設(shè)計導(dǎo)則(正式版)
- 中國人民大學(xué)613衛(wèi)生統(tǒng)計歷年真題12-16
- 人事聘用合同范本標(biāo)準(zhǔn)版
- 新疆地方教材可愛的中國第二單元教學(xué)設(shè)計
評論
0/150
提交評論