隨機(jī)指標(biāo)策略(TB版)_第1頁
隨機(jī)指標(biāo)策略(TB版)_第2頁
隨機(jī)指標(biāo)策略(TB版)_第3頁
隨機(jī)指標(biāo)策略(TB版)_第4頁
隨機(jī)指標(biāo)策略(TB版)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

隨機(jī)指標(biāo)策略(TB平臺(tái))該交易策略主要基于隨機(jī)指標(biāo)(StochasticOscillator)和簡單移動(dòng)平均線(SimpleMovingAverage,SMA)進(jìn)行交易決策。概述:1.隨機(jī)指標(biāo)(K值和D值):-使用最高價(jià)和最低價(jià)以及收盤價(jià)來計(jì)算隨機(jī)指標(biāo)的K值和D值。K值表示當(dāng)前周期的收盤價(jià)與過去N周期內(nèi)的最低價(jià)相比,相對(duì)于同期內(nèi)最高價(jià)與最低價(jià)的范圍所處的位置(以百分比表示)。-D值是K值的移動(dòng)平均值,用于平滑K值的波動(dòng)。2.簡單移動(dòng)平均線:-使用收盤價(jià)計(jì)算一個(gè)3周期的簡單移動(dòng)平均線,作為價(jià)格趨勢(shì)的參考。3.交易信號(hào):-買入信號(hào):當(dāng)市場(chǎng)沒有多頭倉位,且前一周期的K值大于前一周期的D值,并且前一周期的收盤價(jià)高于3周期簡單移動(dòng)平均線時(shí),執(zhí)行買入操作。-賣出信號(hào):當(dāng)市場(chǎng)持有多頭倉位,且前一周期的收盤價(jià)低于3周期簡單移動(dòng)平均線時(shí),執(zhí)行賣出操作。4.集合競(jìng)價(jià)階段處理:-在策略開始執(zhí)行交易邏輯之前,先檢查是否處于集合競(jìng)價(jià)階段。如果是集合競(jìng)價(jià)階段,則不執(zhí)行任何交易操作。原版代碼解釋:VarsNumericMinPoint;//聲明變量MinPoint,一個(gè)最小變動(dòng)單位,也就是一跳。NumericMyEntryPrice;//聲明變量MyEntryPrice,英文好的,看英文意思都知道的,開倉價(jià)格,本例是開倉均價(jià),也可根據(jù)需要設(shè)置為某次入場(chǎng)的價(jià)格。NumericTrailingStart1(50);//聲明變量TrailingStart1,初始值為50,這是止盈啟動(dòng)設(shè)置1。NumericTrailingStart2(80);//聲明變量TrailingStart2,初始值為80,這是止盈啟動(dòng)設(shè)置2。NumericTrailingStop1(30);//聲明變量TrailingStop1,初始值為30,這是真正跟蹤止盈設(shè)置1。NumericTrailingStop2(20);//聲明變量TrailingStop2,初始值為20,這是真正跟蹤止盈設(shè)置2。NumericStopLossSet(50);//聲明變量StopLossSet,初始值為50,這是止損設(shè)置。NumericMyExitPrice;//聲明變量MyExitPrice,平倉價(jià)格。NumericSeriesHighestAfterEntry;//聲明序列變量HighestAfterEntry,開倉后出現(xiàn)的最高價(jià)。NumericSeriesLowestAfterEntry;//聲明序列變量LowestAfterEntry,開倉后出現(xiàn)的最低價(jià)。Begin...If(BarsSinceentry==0)//獲得當(dāng)前持倉的第一個(gè)建倉位置到當(dāng)前位置的Bar計(jì)數(shù),這里就是開倉的那根k線。{HighestAfterEntry=Close;//開倉后的最高價(jià)為收盤價(jià)。LowestAfterEntry=Close;//開倉后的最低價(jià)為收盤價(jià)。If(MarketPosition<>0)//假如有持倉的情況下。{HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);//開倉的Bar(通常說的k線),將開倉價(jià)和當(dāng)時(shí)的收盤價(jià)的較大值保留到HighestAfterEntry。LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);//開倉的Bar,將開倉價(jià)和當(dāng)時(shí)的收盤價(jià)的較小值保留到LowestAfterEntry。}}else//這個(gè)對(duì)應(yīng)著不是開倉k線之后的情況。{HighestAfterEntry=Max(HighestAfterEntry,High);//這個(gè)是逐個(gè)判斷的,即開倉那條K線,跟下一根k線最高價(jià)對(duì)比,記錄當(dāng)前的最高點(diǎn);再接著繼續(xù)對(duì)比,直到符合止盈啟動(dòng)設(shè)置條件,這樣好用于下一個(gè)Bar的跟蹤止盈判斷。LowestAfterEntry=Min(LowestAfterEntry,Low);//簡略說就是,記錄下當(dāng)前k線的最低點(diǎn),用于下一個(gè)K線的跟蹤止盈判斷。}Commentary("HighestAfterEntry="+Text(HighestAfterEntry));//在超級(jí)圖表當(dāng)前Bar添加一行注釋信息,解讀意思就是在K線圖上顯示最高價(jià)HighestAfterEntry等于多少Commentary("LowestAfterEntry="+Text(LowestAfterEntry));//解讀同上,顯示最低價(jià)。MinPoint=MinMove*PriceScale;//固定的最小跳動(dòng)價(jià)公式。MyEntryPrice=AvgEntryPrice;//把開倉均價(jià)賦值給MyEntryPrice。If(MarketPosition==1)//有多倉的情況下{If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint)//假如最高價(jià)大于等于開倉均價(jià)加上固定的止盈啟動(dòng)設(shè)置2乘以最小跳動(dòng)價(jià){If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint)//再接著假如低價(jià)小于等于最高價(jià)減去真正止盈設(shè)置2系數(shù)乘以最小跳動(dòng)價(jià)。{MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;//平倉價(jià)呢等于最高價(jià)減去真正止盈設(shè)置2系數(shù)乘以最小跳動(dòng)價(jià)。If(Open<MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。Sell(0,MyExitPrice);//以上面計(jì)算得的平倉價(jià),平倉。}}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint)//第一級(jí)跟蹤止盈的條件表達(dá)式。解讀同上,這里把設(shè)置2變成設(shè)置1{If(Low<=HighestAfterEntry[1]-TrailingStop1*MinPoint)//解讀同上。{MyExitPrice=HighestAfterEntry[1]-TrailingStop1*MinPoint;//平倉價(jià),主要計(jì)算就是那個(gè)止盈系數(shù)設(shè)置1,解讀同上。If(Open<MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。Sell(0,MyExitPrice);//依據(jù)算得的平倉價(jià),平掉。}}elseif(Low<=MyEntryPrice-StopLossSet*MinPoint)//這里寫上初始的固定止損處理,即為低價(jià)小于等于開倉均價(jià)減去固定止損系數(shù)乘以最小跳動(dòng)價(jià)。{MyExitPrice=MyEntryPrice-StopLossSet*MinPoint;//平倉價(jià)就等于開倉價(jià)減去止損系數(shù)乘以一跳。If(Open<MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。Sell(0,MyExitPrice);//依據(jù)算得的平倉價(jià),全平。}}elseif(MarketPosition==-1)//有空倉的情況{If(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart2*MinPoint)//第二級(jí)跟蹤止盈的條件表達(dá)式,即最低價(jià)小于等于開倉價(jià)減去止盈啟動(dòng)設(shè)置2乘以最小跳動(dòng)價(jià)。{If(High>=LowestAfterEntry[1]+TrailingStop2*MinPoint)//假如高價(jià)大于等于最低價(jià)加上真正止盈設(shè)置2乘以最小跳動(dòng)價(jià)。{MyExitPrice=LowestAfterEntry[1]+TrailingStop2*MinPoint;//平倉價(jià)等于最低價(jià)加上真正止盈設(shè)置2乘以最小跳動(dòng)價(jià)。If(Open>MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。BuyToCover(0,MyExitPrice);//平倉。}}elseif(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart1*MinPoint)//第一級(jí)跟蹤止盈的條件表達(dá)式,基本就是把止盈設(shè)置2都改成設(shè)置,解讀同上。{If(High>=LowestAfterEntry[1]+TrailingStop1*MinPoint)//解讀同上。{MyExitPrice=LowestAfterEntry[1]+TrailingStop1*MinPoint;//計(jì)算平倉價(jià)。//If(Open>MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。BuyToCover(0,MyExitPrice);//平倉。}}elseIf(High>=MyEntryPrice+StopLossSet*MinPoint)//初始的止損處理,高價(jià)大于開倉均價(jià)加上固定止損系數(shù)乘以最小跳動(dòng)價(jià)。{MyExitPrice=MyEntryPrice+StopLossSet*MinPoint;//平倉價(jià)等于開倉均價(jià)加上止損系數(shù)乘以一跳。If(Open>MyExitPrice)MyExitPrice=Open;//如果該Bar開盤價(jià)有跳空觸發(fā),則用開盤價(jià)代替。BuyToCover(0,MyExitPrice);//平倉。}}...End策略代碼:(原版)VarsNumericMinPoint;NumericMyEntryPrice;NumericTrailingStart1(50);NumericTrailingStart2(80);NumericTrailingStop1(30);NumericTrailingStop2(20);NumericStopLossSet(50);NumericMyExitPrice;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;BeginIf(BarsSinceentry==0){HighestAfterEntry=Close;LowestAfterEntry=Close;If(MarketPosition<>0){HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);}}else{HighestAfterEntry=Max(HighestAfterEntry,High);LowestAfterEntry=Min(LowestAfterEntry,Low);}Commentary("HighestAfterEntry="+Text(HighestAfterEntry));Commentary("LowestAfterEntry="+Text(LowestAfterEntry));MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;If(MarketPosition==1){If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop1*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop1*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(Low<=MyEntryPrice-StopLossSet*MinPoint){MyExitPrice=MyEntryPrice-StopLossSet*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(MarketPosition==-1){If(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart2*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop2*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop2*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}elseif(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart1*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop1*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop1*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}elseIf(High>=MyEntryPrice+StopLossSet*MinPoint){MyExitPrice=MyEntryPrice+StopLossSet*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}End修改一下,加點(diǎn)條件的邏輯代碼:ParamsNumericLength(14);NumericSlowLength(3);NumericSmoothLength(3);NumericDslowLength(200);VarsNumericSeriesHighestValue;NumericSeriesLowestValue;NumericSeriesKValue;NumericSumHLValue;NumericSumCLValue;NumericSeriesDValue;NumericSeriesAvgValue3;NumericMinPoint;NumericMyEntryPrice;NumericTrailingStart1(50);NumericTrailingStart2(100);NumericTrailingStop1(30);NumericTrailingStop2(20);NumericStopLossSet(50);NumericMyExitPrice;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;BeginAvgValue3=AverageFC(Close,DslowLength);PlotNumeric("MA3",AvgValue3);HighestValue=HighestFC(High,Length);LowestValue=LowestFC(Low,Length);SumHLValue=SummationFC(HighestValue-LowestValue,SlowLength);SumCLValue=SummationFC(Close-LowestValue,SlowLength);If(SumHLValue<>0){KValue=SumCLValue/SumHLValue*100;}Else{KValue=0;}DValue=AverageFC(KValue,SmoothLength);If(!CallAuctionFilter())Return;If(MarketPosition<>1AndKValue[1]>DValue[1]AndClose[1]>AvgValue3){Buy(1,Open);}If(MarketPosition==1AndClose[1]<AvgValue3){Sell(1,Open);}If(MarketPosition<>-1AndKValue[1]<DValue[1]AndClose[1]<AvgValue3){SellShort(1,Open);}If(MarketPosition==-1AndClose[1]>AvgValue3){BuyToCover(1,Open);}If(BarsSinceentry==0){HighestAfterEntry=Close;LowestAfterEntry=Close;If(MarketPosition<>0){HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);}}else{HighestAfterEntry=Max(HighestAfterEntry,High);LowestAfterEntry=Min(LowestAfterEntry,Low);}Commentary("HighestAfterEntry="+Text(HighestAfterEntry));Commentary("LowestAfterEntry="+Text(LowestAfterEntry));MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;If(MarketPosition==1){If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint)}If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop1*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop1*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(Low<=MyEntryPrice-StopLossSet*MinPoint){MyExitPrice=MyEntryPrice-StopLossSet*MinPoint;If(Open<MyExitPrice)MyExitPrice=Open;Sell(0,MyExitPrice);}}elseif(MarketPosition==-1){If(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart2*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop2*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop2*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}elseif(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart1*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop1*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop1*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}elseIf(High>=MyEntryPrice+StopLossSet*MinPoint){MyExitPrice=MyEntryPrice+StopLossSet*MinPoint;If(Open>MyExitPrice)MyExitPrice=Open;BuyToCover(0,MyExitPrice);}}End修改后的代碼注解Params//參數(shù)定義NumericLength(14);//長度參數(shù)NumericSlowLength(3);//慢速長度參數(shù)NumericSmoothLength(3);//平滑長度參數(shù)NumericDslowLength(200);//慢速平均周期參數(shù)Vars//變量聲明NumericSeriesHighestValue;//最高值序列NumericSeriesLowestValue;//最低值序列NumericSeriesKValue;//K線值序列NumericSumHLValue;//最高值和最低值之差的累加NumericSumCLValue;//收盤價(jià)與最低值之差的累加NumericSeriesDValue;//D線值序列NumericSeriesAvgValue3;//3周期平均值序列NumericMinPoint;//最小變動(dòng)單位NumericMyEntryPrice;//我的開倉價(jià)格NumericTrailingStart1(50);//追蹤止損啟動(dòng)值1NumericTrailingStart2(100);//追蹤止損啟動(dòng)值2NumericTrailingStop1(30);//追蹤止損值1NumericTrailingStop2(20);//追蹤止損值2NumericStopLossSet(50);//止損設(shè)置NumericMyExitPrice;//我的平倉價(jià)格NumericSeriesHighestAfterEntry;//開倉后的最高價(jià)序列NumericSeriesLowestAfterEntry;//開倉后的最低價(jià)序列Begin//開始策略邏輯AvgValue3=AverageFC(Close,DslowLength);//計(jì)算3周期平均值PlotNumeric("MA3",AvgValue3);//繪制3周期平均值//計(jì)算最高值和最低值序列HighestValue=HighestFC(High,Length);LowestValue=LowestFC(Low,Length);//計(jì)算K線值和D線值SumHLValue=SummationFC(HighestValue-LowestValue,SlowLength);SumCLValue=SummationFC(Close-LowestValue,SlowLength);If(SumHLValue<>0){KValue=SumCLValue/SumHLValue*100;//計(jì)算K值}Else{KValue=0;//如果分母為0,則K值設(shè)為0}DValue=AverageFC(KValue,SmoothLength);//計(jì)算D值//檢查是否處于集合競(jìng)價(jià)階段,如果是則返回If(!CallAuctionFilter())Return;//交易邏輯If(MarketPosition<>1AndKValue[1]>DValue[1]AndClose[1]>AvgValue3){Buy(1,Open);//如果當(dāng)前無多倉,K值大于D值且收盤價(jià)高于3周期平均值,則買入}If(MarketPosition==1AndClose[1]<AvgValue3){Sell(1,Open);//如果當(dāng)前持有多倉,且收盤價(jià)低于3周期平均值,則賣出}If(MarketPosition<>-1AndKValue[1]<DValue[1]AndClose[1]<AvgValue3){SellShort(1,Open);//如果當(dāng)前無空倉,K值小于D值且收盤價(jià)低于3周期平均值,則賣出做空}If(MarketPosition==-1AndClose[1]>AvgValue3){BuyToCover(1,Open);//如果當(dāng)前持有空倉,且收盤價(jià)高于3周期平均值,則平空倉}//處理開倉后的邏輯If(BarsSinceentry==0){HighestAfterEntry=Close;//開倉后的最高價(jià)設(shè)為當(dāng)前收盤價(jià)LowestAfterEntry=Close;//開倉后的最低價(jià)設(shè)為當(dāng)前收盤價(jià)If(MarketPosition<>0){HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);//更新開倉后的最高價(jià)LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);//更新開倉后的最低價(jià)}}else{HighestAfterEntry=Max(HighestAfterEntry,High);//更新最高價(jià)序列LowestAfterEntry=Min(LowestAfterEntry,Low);//更新最低價(jià)序列}//在圖表上添加注釋Commentary("HighestAfterEntry="+Text(HighestAfterEntry));Commentary("LowestAfterEntry="+Text(LowestAfterEntry));//計(jì)算最小變動(dòng)單位和開倉價(jià)格MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;//多倉情況下的退出邏輯If(MarketPosition==1){If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;//計(jì)算平倉價(jià)格If(Open<MyExitPrice)MyExitPrice=Open;//如果有跳空,則使用開盤價(jià)Sell(0,MyExitPrice);//執(zhí)行賣出}}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop1*MinPoint){MyExitPrice=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論