




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ADX均線策略(TB版)策略概述該策略基于ADX(平均方向性移動(dòng)指數(shù))和EMA(指數(shù)移動(dòng)平均線)構(gòu)建交易系統(tǒng),旨在捕捉市場趨勢變化,實(shí)現(xiàn)買入和賣出操作。參數(shù)設(shè)置DMI_N:14計(jì)算DMI指標(biāo)的周期數(shù)。DMI_M:30,用于平滑ADX指標(biāo)的周期數(shù)。AvgLen:30,用于計(jì)算EMA的周期數(shù)。EntryBar:2,入場確認(rèn)后的等待周期數(shù)。FastLength:5,快速移動(dòng)平均線周期數(shù)(擴(kuò)展部分)。SlowLength:20,慢速移動(dòng)平均線周期數(shù)(擴(kuò)展部分)。TrailingStart1、TrailingStart2、TrailingStop1、TrailingStop2:跟蹤止盈的啟動(dòng)和設(shè)置參數(shù)(擴(kuò)展部分)。StopLossSet:30,固定止損點(diǎn)數(shù)(擴(kuò)展部分)。入場條件做多條件:上根K線的收盤價(jià)高于30根K線最高價(jià)的EMA。ADX指標(biāo)向上(即當(dāng)前ADX值大于前一根K線的ADX值)。當(dāng)前價(jià)格大于等于多頭觸發(fā)價(jià)(BuyTarget),多頭觸發(fā)價(jià)=收盤價(jià)+(30根K線最高價(jià)的EMA-30根K線最低價(jià)的EMA)/2。滿足上述條件后的EntryBar周期內(nèi)入場。做空條件:上根K線的收盤價(jià)低于30根K線最低價(jià)的EMA。ADX指標(biāo)向上。當(dāng)前價(jià)格小于等于空頭觸發(fā)價(jià)(SellTarget),空頭觸發(fā)價(jià)=收盤價(jià)-(30根K線最高價(jià)的EMA-30根K線最低價(jià)的EMA)/2。滿足上述條件后的EntryBar周期內(nèi)入場。出場條件多單出場:當(dāng)前價(jià)格下破30根K線最高價(jià)的EMA??蛇x跟蹤止盈或固定止損出場??諉纬鰣觯寒?dāng)前價(jià)格上破30根K線最低價(jià)的EMA。可選跟蹤止盈或固定止損出場。擴(kuò)展交易規(guī)則兩均線交叉買入:當(dāng)快速移動(dòng)平均線(FastLength周期)上穿慢速移動(dòng)平均線(SlowLength周期),且ADX值大于25時(shí),執(zhí)行買入操作。兩均線交叉賣出:當(dāng)快速移動(dòng)平均線下穿慢速移動(dòng)平均線,且ADX值大于25時(shí),執(zhí)行賣出操作。跟蹤止盈:根據(jù)最高價(jià)(多單)或最低價(jià)(空單)與入場價(jià)的差距,動(dòng)態(tài)調(diào)整止損點(diǎn),以實(shí)現(xiàn)跟蹤止盈。代碼邏輯策略代碼中包含了DMI指標(biāo)的計(jì)算過程、EMA的計(jì)算、入場條件的判斷、出場條件的判斷以及擴(kuò)展交易規(guī)則的實(shí)現(xiàn)。實(shí)現(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過程計(jì)算中需要的變量名。//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。////計(jì)算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à)和小節(jié)休息過濾。//Minpoint=Minmove*PriceScale;//這兩句一般固定的直接調(diào)用就行,一個(gè)過濾,一個(gè)計(jì)算最小變動(dòng)價(jià)位。////DMI指標(biāo)計(jì)算,最終將輸出ADX指標(biāo)SF=1/DMI_N;//變量SF是一個(gè)隨周期而變化的系數(shù),根據(jù)上面的賦值,可以直接得出SF=1/14。//TRValue=TrueRange;//變量TRValue值,直接調(diào)用以前我們解讀過的求真實(shí)波動(dòng)函數(shù)TrueRange的值。//If(CurrentBar==DMI_N)//假如當(dāng)前k線數(shù)位等于14,按照下列語句來計(jì)算。//{Fori=0ToDMI_N-1//循環(huán)語句,就是下列計(jì)算方程i值從0-13給它計(jì)算一遍。//{PlusDM=0;//先直接等于0了//MinusDM=0;//先等于0//UpperMove=High[i]-High[i+1];//開始從UpperMove=最高價(jià)High[0]-最高價(jià)High[1],一直計(jì)算到High[13]-High[14],相當(dāng)于反復(fù)算了14次//LowerMove=Low[i+1]-Low[i];//同上的,算這變量LowerMove,也來14次,但記住了,循環(huán)計(jì)算也是按照順序邏輯來的,就像我們小學(xué)記的九九乘法表那樣,先把1乘以到9,再2乘以到9,程序也是這么一步步按語句來讀的,所以從這FOR下邊的這花括號反復(fù)計(jì)算,當(dāng)條件不滿足了,才直接就跳過這括號//If(UpperMove>LowerMoveandUpperMove>0)//假如算得的變量UpperMove大于LowerMove,而且UpperMove大于0.//{PlusDM=UpperMove;//變量PlusDM就等于變量UpperMove值。//}Elseif(LowerMove>UpperMoveandLowerMove>0)//并列語句,當(dāng)條件變成這樣的時(shí)候,變量LowerMove大于變量UpperMove值,而且LowerMove大于0.//{MinusDM=LowerMove;//變量MinusDM值等于變量LowerMove值。//}SumPlusDM=SumPlusDM+PlusDM;//累加起來的意思,從變量SumPlusDM等于0逐步加上計(jì)算所得的PlusDM值。//SumMinusDM=SumMinusDM+MinusDM;//同上解讀,這個(gè)是累加變量SumMinusDM總值。//SumTR=SumTR+TRValue[i];//同上,把真實(shí)波動(dòng)值計(jì)算出來,累加到變量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)計(jì)算得到的變量PlusDM值呢?我只能跟你說,那個(gè)值是針對前14根k線計(jì)算的,但是從第15根到開始一直到當(dāng)前跳動(dòng)的K線,變量PlusDM都是從0新算起。//MinusDM=0;//同上解讀的。先等于0.//UpperMove=High-High[1];//變量UpperMove值等于當(dāng)前的最高價(jià)減去前一個(gè)的最高價(jià)。//LowerMove=Low[1]-Low;//變量LowerMove值等于前一個(gè)最低價(jià)減去當(dāng)前的最低價(jià)。//If(UpperMove>LowerMoveandUpperMove>0)//假如了UpperMove大于LowerMove,并且大于0的。//{PlusDM=UpperMove;//把變量UpperMove值賦值給變量PlusDM,變成一個(gè)新值了,這時(shí)不再等于0了。//}Elseif(LowerMove>UpperMoveandLowerMove>0)//假如LowerMove大于UpperMove,并且大于0的。//{MinusDM=LowerMove;//也是賦予變量MinusDM新的值,即等于變量LowerMove值。//}AvgPlusDM=AvgPlusDM[1]+SF*(PlusDM-AvgPlusDM[1]);//照公式直接解讀,變量AvgPlusDM[1]意思是前一個(gè),對第15根k線來說,就是前14根k線算得的值。所以記住這[1]就是從當(dāng)前數(shù)位倒退一個(gè)數(shù)位的意思。//AvgMinusDM=AvgMinusDM[1]+SF*(MinusDM-AvgMinusDM[1]);//這個(gè)也直接照公式解讀。//sVolty=sVolty[1]+SF*(TRValue-sVolty[1]);//同上的,直接照公式解讀。//}Else//其實(shí)這最后這個(gè)else就是上面CurrentBar不是大于或等于14時(shí),那就是小于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)//假如計(jì)算得的變量sVolty值大于0.//{oDMIPlus=100*AvgPlusDM/sVolty;//變量0DMIPlus=100*變量AvgPlusDM/變量sVolty。//oDMIMinus=100*AvgMinusDM/sVolty;//直接照公式解讀了。//}Else//這就是假如當(dāng)變量sVolty小于0時(shí)。//{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ù)的絕對值,通俗的說不管括號里計(jì)算得到的是大于還是小于0,它返回的都是正整數(shù)。所以照公式解讀,算出變量sDMI值了。//}else//假如算得的變量Divisor小于0的。//{sDMI=0;//變量sDMI等于0.//}cumm=Cum(sDMI);//函數(shù)Cum(),意思是求累計(jì)值,所以這個(gè)Cum(sDMI)就是計(jì)算從第一個(gè)k線以來sDMI值的累計(jì)值,把它賦值給變量cumm的。//If(CurrentBar>0)//假如k線數(shù)位大于0的,其實(shí)就是從第二根開始了。//{If(CurrentBar<=DMI_N)//這里再給個(gè)限定條件,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//這個(gè)就是假如CurrentBar大于14的。//{sADX=sADX[1]+SF*(sDMI-sADX[1]);//變量sADX又是一個(gè)新算法,直接照公式來解讀了。//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,其實(shí)這就是ADX均線了。//UpperMA=XAverage(High,AvgLen);//計(jì)算30根K線最高價(jià)的EMA。//LowerMA=XAverage(Low,AvgLen);//計(jì)算30根K線最低價(jià)的EMA。//ChanSpread=(UpperMA-LowerMA)/2;//通過EMA計(jì)算出通道寬度。//BuySetup=Close>UpperMAandADXValue>ADXValue[1];//當(dāng)ADX向上且當(dāng)前價(jià)大于30根K線最高價(jià)的EMA滿足買入準(zhǔn)備條件。//IF(BuySetup)//假如滿足買入條件了,執(zhí)行下列語句。//{BuyTarget=Close+ChanSpread;//滿足買入準(zhǔn)備條件時(shí),用當(dāng)前k線價(jià)格計(jì)算出多頭觸發(fā)價(jià),即為當(dāng)前價(jià)+通道值。//}MROBS=NthCon(BuySetup,1);//上次滿足買入準(zhǔn)備條件距離當(dāng)前k線的距離數(shù)目.//If(MROBS>EntryBar)//假如這個(gè)距離數(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ā)價(jià),多單入場。//{If(High>=BuyTarget[1]AndVol>0)//高價(jià)突破變量BuyTarget[1],而且成交量大于0的。//{Buy(0,max(Open,BuyTarget[1]));//取最大值開盤價(jià)買入1手。//}}//系統(tǒng)出場條件。//If(MarketPosition==1andBarsSinceEntry>0AndVol>0)//當(dāng)持有多單且當(dāng)前價(jià)格下破30根K線最高價(jià)的EMA,多單出場。//{If(Low<=UpperMA[1]-Minpoint)//低價(jià)小于或者等于UpperMA[1]-最小變動(dòng)價(jià)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à)和小節(jié)休息過濾If(!CallAuctionFilter())Return;Minpoint=Minmove*PriceScale;//---DMI計(jì)算開始---//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計(jì)算結(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)前價(jià)下于30根K線最低價(jià)的EMA滿足賣出準(zhǔn)備條件。//If(SellSetup){SellTarget=Close-ChanSpread;//滿足賣出準(zhǔn)備條件時(shí),用前bar價(jià)格計(jì)算出空頭觸發(fā)價(jià)。//}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ā)價(jià),空單入場//{If(Low<=SellTarget[1]AndVol>0){Sellshort(0,Min(Open,SellTarget[1]));}}//系統(tǒng)出場規(guī)則//If(MarketPosition==-1andBarsSinceEntry>0AndVol>0)//當(dāng)持有空單且當(dāng)前價(jià)格上破30根K線最低價(jià)的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à)和小節(jié)休息過濾If(!CallAuctionFilter())Return;//計(jì)算最小變動(dòng)價(jià)位Minpoint=Minmove*PriceScale;//---DMI計(jì)算開始---////計(jì)算系數(shù)SFSF=1/DMI_N;//計(jì)算真實(shí)波動(dòng)范圍值并賦值給TRValueTRValue=TrueRange;//如果當(dāng)前bar數(shù)等于DMI_NIf(CurrentBar==DMI_N){//循環(huán)計(jì)算相關(guān)變量Fori=0ToDMI_N-1{//初始化PlusDM和MinusDM為0PlusDM=0;MinusDM=0;//計(jì)算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];}//計(jì)算平均值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;//計(jì)算UpperMove和LowerMoveUpperMove=High-High[1];LowerMove=Low[1]-Low;//根據(jù)條件賦值PlusDM和MinusDMIf(UpperMove>LowerMoveandUpperMove>0){PlusDM=UpperMove;}Elseif(LowerMove>UpperMoveandLowerMove>0){MinusDM=LowerMove;}//計(jì)算相關(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的值計(jì)算oDMIPlus和oDMIMinusIf(sVolty>0){oDMIPlus=100*AvgPlusDM/sVolty;oDMIMinus=100*AvgMinusDM/sVolty;}Else{oDMIPlus=0;oDMIMinus=0;}//計(jì)算DivisorDivisor=oDMIPlus+oDMIMinus;//根據(jù)Divisor的值計(jì)算sDMIif(Divisor>0){sDMI=100*Abs(oDMIPlus-oDMIMinus)/Divisor;}else{sDMI=0;}//計(jì)算累計(jì)值cumm=Cum(sDMI);//根據(jù)當(dāng)前bar數(shù)計(jì)算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計(jì)算結(jié)束---////計(jì)算相關(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)備條件,計(jì)算空頭觸發(fā)價(jià)If(SellSetup){SellTarget=Close-ChanSpread;}//計(jì)算上次滿足賣出準(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ī)則:兩條移動(dòng)均價(jià),ADX值大于25的,兩均線交叉的買入;ADX大于25,兩均線交叉賣出。加上后的信號代碼如下:ParamsNumericDMI_N(14);NumericDMI_M(30);NumericAvgLen(30);NumericFastLength(5);NumericSlowLength(20);NumericTrailingStart1(50);//跟蹤止盈啟動(dòng)設(shè)置1//NumericTrailingStart2(80);//跟蹤止盈啟動(dòng)設(shè)置2//NumericTrailingStop1(30);//跟蹤止盈設(shè)置1//NumericTrailingStop2(20);//跟蹤止盈設(shè)置2//NumericStopLossSet(30);//固定止損30個(gè)點(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計(jì)算開始---//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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同轉(zhuǎn)讓簡單版的協(xié)議書范本3篇
- 共同生活協(xié)議書范本3篇
- 大學(xué)生畢業(yè)就業(yè)協(xié)議書模板3篇
- 合作經(jīng)營茶葉店合同協(xié)議書3篇
- 廠房買賣合同法律效力3篇
- 北京離婚協(xié)議書簽署注意事項(xiàng)3篇
- 牛的飼養(yǎng)疫病監(jiān)測技術(shù)發(fā)展考核試卷
- 網(wǎng)絡(luò)犯罪防范考核試卷
- 電機(jī)在放射性檢測設(shè)備中的應(yīng)用考核試卷
- 種苗培育技術(shù)與實(shí)踐考核試卷
- 化工公司bluesign認(rèn)證資料準(zhǔn)備清單20201201
- 建設(shè)用地報(bào)批服務(wù)投標(biāo)方案(技術(shù)方案)
- 短引線保護(hù)引出線保護(hù)以及T區(qū)保護(hù)
- 完美公司瑪麗艷美的觀念
- 浙攝影版(2020)信息技術(shù)三年級上冊第一課認(rèn)識計(jì)算機(jī)(課件)
- 校園安全常識測試題卷
- 建筑用玻璃ccc標(biāo)準(zhǔn)
- 第一課中國人民站起來了
- 眼科門診病歷
- 彝文《指路經(jīng)》課件
- 《神經(jīng)系統(tǒng)的傳導(dǎo)通路》課件
評論
0/150
提交評論