期貨軟件TB系統(tǒng)源代碼解讀系列10-WR

威廉指標(biāo)-WR,也是業(yè)內(nèi)大名鼎鼎的一個(gè)輔助性指標(biāo)糟红,還是先說(shuō)明艾帐,這個(gè)指標(biāo)我也不熟悉,你們也許該鄙視我了盆偿,不熟悉還寫什么的柒爸。我只能說(shuō)的是,我解讀的是代碼事扭,不是解讀指標(biāo)捎稚,百度里關(guān)于各指標(biāo),已經(jīng)都有明確的描述了句旱。解讀代碼的本意呢阳藻,是因?yàn)槲乙郧按蛩阕龀绦蚧臅r(shí)候,一直想找相關(guān)的解讀而沒(méi)有找到谈撒,編碼大神又覺(jué)得這些沒(méi)什么好寫的腥泥,那時(shí)我就苦惱著從頭一點(diǎn)點(diǎn)的啃c++語(yǔ)言,所以在這里也只是解讀一下啃匿,告訴大家怎么看一個(gè)代碼蛔外。當(dāng)然,聰明的朋友溯乒,看了這些夹厌,要能寫出自己的交易程序那就牛逼了。

好了裆悄,廢話也不說(shuō)了矛纹,直接說(shuō)代碼吧,威廉指標(biāo)TB系統(tǒng)里給它寫了三個(gè)函數(shù)光稼,如下或南。

第一個(gè)求最高函數(shù)Highest孩等,代碼如下:

Params

NumericSeries Price(0);//聲明序列參數(shù)Price,賦值0.//

Numeric Length(5); //聲明參數(shù)Length采够,賦值5肄方。//

Vars

Numeric HighestValue;//聲明變量HighestValue.//

Numeric i;//聲明變量 i。//

Begin

HighestValue = Price;//變量HighestValue的值等于價(jià)格蹬癌。//

for i=1 to Length - 1//循環(huán)語(yǔ)句权她,變量i的值從1循環(huán)到參數(shù)Length-1,循環(huán)執(zhí)行花括號(hào)里的語(yǔ)句程序逝薪。//

? ? {

If(Price[i] > HighestValue)//假如Price[ i ]大于變量HighestValue隅要,其實(shí)這當(dāng)前價(jià)格是一個(gè)中間值,作用是為了求前1翼闽,2拾徙,3,4數(shù)位的價(jià)格哪個(gè)最大感局。//

HighestValue = Price[i];//可以看到尼啡,假如Price[1]的值大于當(dāng)前價(jià),那么就把Price[1]的值賦予給HighestValue询微,再把Price[1]跟Price[2]對(duì)比崖瞭,循環(huán)到Price[4]為止。//

}

Return HighestValue;//根據(jù)對(duì)比的這5根k線的價(jià)格撑毛,把最大值返回給主函數(shù)书聚。//

End

第二個(gè)求最低函數(shù)Lowest,代碼如下:(這個(gè)解讀意思同上藻雌,就是把對(duì)比5根k線的最低價(jià))

Params

NumericSeries Price(0);

Numeric Length(5);

Vars

Numeric LowestValue;

Numeric i;

Begin

LowestValue = Price;

for i=1 to Length - 1

? ? {

If(Price[i] < LowestValue)

LowestValue = Price[i];

}

Return LowestValue;

End

第三個(gè)就是求威廉指標(biāo)函數(shù)PercentR雌续,算法很簡(jiǎn)單,就是N日內(nèi)最高價(jià)與當(dāng)日收盤價(jià)的差胯杭,除以N日內(nèi)最高價(jià)與最低價(jià)的差驯杜,結(jié)果放大100倍。代碼如下:

Params

Numeric Length(10);//聲明參數(shù)Length做个,賦值為10.記住了鸽心,這個(gè)初值10是可以變的。//

Vars

Numeric HH;//聲明變量名為HH居暖。//

Numeric Divisor;//聲明變量名為Divisor顽频。//

Numeric PRValue;//聲明變量名為PRValue。//

Begin

HH = Highest(High, Length);//變量HH值等于太闺,調(diào)用函數(shù)Highest糯景,求出10周期內(nèi)的最高價(jià)。//

Divisor = HH - Lowest(Low, Length);//變量Divisor值等于,10周期內(nèi)的最高價(jià)減去最低價(jià)莺奸。//

If (Divisor <> 0 )//假如變量Divisor不等于0.//

PRValue = 100 - ( ( HH - Close ) / Divisor ) * 100;//看著都明白丑孩,直白翻譯了,變量PRValue值 = 100? - ((10周期內(nèi)最高價(jià)-當(dāng)前收盤價(jià))/變量Divisor值)* 100//

else//假如變量Divisor等于0.//

PRValue = Divisor;//變量PRValue等于0了//

Return PRValue;//把變量PRValue的值返回給主函數(shù)灭贷,其實(shí)所謂主函數(shù)就是編寫的代碼里直接調(diào)用出來(lái)。//

End

TB系統(tǒng)里真正顯示在k線圖里的威廉函數(shù)代碼很簡(jiǎn)潔的略贮,如下:

Params

Numeric Length(5);//聲明參數(shù)Length甚疟,賦值5.//

Numeric OverSold(20) ;//聲明參數(shù)OverSold,賦值20.//

Numeric OverBought(80) ;聲明參數(shù)OverBought逃延,賦值80.//

Vars

Numeric WRValue;//聲明變量WRValue览妖。//

Begin

WRValue = PercentR(Length);//變量WRValue值,其實(shí)就是把參數(shù)5帶回函數(shù)PercentR里重新求一遍揽祥,再把得到的值返回來(lái)給WRValue讽膏。//

PlotNumeric("WR",WRValue);//畫線WR,替代WRValue拄丰。//

PlotNumeric("超買",OverBought);//畫線超買府树,就是初值80.//

PlotNumeric("超賣",OverSold);//畫線超賣,就是初值20.//

End

這代碼看明白了料按,怎么求值威廉指標(biāo)也清楚了奄侠,我們可以做個(gè)程序化交易代碼出來(lái)。買賣規(guī)則很簡(jiǎn)單载矿,也就是個(gè)跟RSI指標(biāo)共振罷了垄潮。即同步穿過(guò)50中間值,買入闷盔;同步跌破50中間值弯洗,賣出。固定止損30逢勾,止盈分50牡整,與80兩級(jí)。代碼及測(cè)試結(jié)果如下:

Params

Numeric Length1(10);

Numeric Length(14) ;

Numeric TrailingStart1(50); // 跟蹤止盈啟動(dòng)設(shè)置1//

Numeric TrailingStart2(80); // 跟蹤止盈啟動(dòng)設(shè)置2//

Numeric TrailingStop1(30); // 跟蹤止盈設(shè)置1//

Numeric TrailingStop2(20); // 跟蹤止盈設(shè)置2//

Numeric StopLossSet(30); //固定止損30個(gè)點(diǎn)//

Vars

Numeric HH;

Numeric Divisor;

NumericSeries PRValue;

NumericSeries NetChgAvg( 0 );

NumericSeries TotChgAvg( 0 );

Numeric SF( 0 );

Numeric Change( 0 );

Numeric ChgRatio( 0 ) ;

NumericSeries RSIValue;

NumericSeries HighestAfterEntry;

NumericSeries LowestAfterEntry;

Numeric MinPoint;

Numeric MyEntryPrice;

Numeric myprice;

Numeric myexitprice;

Begin

//計(jì)算WR指標(biāo)//

HH = Highest(High, Length1);

Divisor = HH - Lowest(Low, Length1);

If (Divisor <> 0 )

PRValue = 100 - ( ( HH - Close ) / Divisor ) * 100;

else

PRValue = Divisor;

//計(jì)算RSI指標(biāo)//

If(CurrentBar <= Length - 1)

{

NetChgAvg = ( Close - Close[Length] ) / Length ;

TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;

}Else

{

SF = 1/Length;

Change = Close - Close[1] ;

NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;

TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;

}

If( TotChgAvg <> 0 )

{

ChgRatio = NetChgAvg / TotChgAvg;

}else

{

ChgRatio = 0 ;

}

RSIValue = 50 * ( ChgRatio + 1 );

If(!CallAuctionFilter()) Return;// 集合競(jìng)價(jià)和小節(jié)休息過(guò)濾

If(MarketPosition <>1 && PRValue[1] >= 50 And RSIValue[1] >= 50)

{

Buy(1,Open);

}

If(MarketPosition <>-1 && PRValue[1] <= 50 And RSIValue[1] <= 50)

{

SellShort(1,Open);

}

If(BarsSinceentry == 0)

{

HighestAfterEntry = Close;

LowestAfterEntry = Close;

If(MarketPosition <> 0)

{

HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 開倉(cāng)的Bar敏沉,將開倉(cāng)價(jià)和當(dāng)時(shí)的收盤價(jià)的較大值保留到HighestAfterEntry//

LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 開倉(cāng)的Bar果正,將開倉(cāng)價(jià)和當(dāng)時(shí)的收盤價(jià)的較小值保留到LowestAfterEntry//

}

}else

{

HighestAfterEntry = Max(HighestAfterEntry,High); // 記錄下當(dāng)前Bar的最高點(diǎn),用于下一個(gè)Bar的跟蹤止損判斷//

LowestAfterEntry = Min(LowestAfterEntry,Low); // 記錄下當(dāng)前Bar的最低點(diǎn)盟迟,用于下一個(gè)Bar的跟蹤止損判斷//

}

Commentary("HighestAfterEntry="+Text(HighestAfterEntry));

Commentary("LowestAfterEntry="+Text(LowestAfterEntry));

Commentary("MyEntryPrice="+Text(MyEntryPrice));

MinPoint = MinMove*PriceScale;

MyEntryPrice = AvgEntryPrice;

If(MarketPosition==1) // 有多倉(cāng)的情況//

{

If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) // 第二級(jí)跟蹤止損的條件表達(dá)式//

{

If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)

{

MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;

Sell(0,MyExitPrice);

}

}else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一級(jí)跟蹤止損的條件表達(dá)式//

{

If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)

{

MyExitPrice =? HighestAfterEntry[1] - TrailingStop1*MinPoint ;

Sell(0,MyExitPrice);

}

}else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在這里寫上初始的止損處理//

{

MyExitPrice =? MyEntryPrice - StopLossSet*MinPoint;

Sell(0,MyExitPrice);

}

}else if(MarketPosition==-1) // 有空倉(cāng)的情況//

{

If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) // 第二級(jí)跟蹤止損的條件表達(dá)式//

{

If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)

{

MyExitPrice =? LowestAfterEntry[1] + TrailingStop2*MinPoint;

BuyToCover(0,MyExitPrice);

}

}else if(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一級(jí)跟蹤止損的條件表達(dá)式//

{

If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)

{

MyExitPrice =? LowestAfterEntry[1] + TrailingStop1*MinPoint;

BuyToCover(0,MyExitPrice);

}

}else If(High >= MyEntryPrice + StopLossSet*MinPoint)//可以在這里寫上初始的止損處理//

{

MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;

BuyToCover(0,MyExitPrice);

}

}

End

看著結(jié)果還不錯(cuò)吧秋泳,但是它的交易頻率太高了點(diǎn),我也不知道具體實(shí)盤結(jié)果如何攒菠,這個(gè)程序化也是今天寫這篇文章迫皱,順帶就寫出來(lái),測(cè)試一下而已,有興趣的朋友可以自己觀察實(shí)盤看看的卓起。對(duì)了和敬,這個(gè)威廉除了可以跟RSI指標(biāo)一起用以外,還可以跟別的戏阅,比如移動(dòng)均線啊昼弟,或者布林帶啊等等。也是把代碼復(fù)制進(jìn)去奕筐,修改一下買賣的指令就可以了舱痘,結(jié)果如何,大家有興趣的可以試試的离赫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芭逝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子渊胸,更是在濱河造成了極大的恐慌旬盯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翎猛,死亡現(xiàn)場(chǎng)離奇詭異胖翰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)办成,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門泡态,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人迂卢,你說(shuō)我怎么就攤上這事某弦。” “怎么了而克?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵靶壮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我员萍,道長(zhǎng)腾降,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任碎绎,我火速辦了婚禮螃壤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筋帖。我一直安慰自己奸晴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布日麸。 她就那樣靜靜地躺著寄啼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墩划,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天涕刚,我揣著相機(jī)與錄音,去河邊找鬼乙帮。 笑死杜漠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚣旱。 我是一名探鬼主播碑幅,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼塞绿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恤批,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤异吻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后喜庞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诀浪,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年延都,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雷猪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晰房,死狀恐怖求摇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殊者,我是刑警寧澤与境,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站猖吴,受9級(jí)特大地震影響摔刁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜海蔽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一共屈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧党窜,春花似錦拗引、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春怔软,著一層夾襖步出監(jiān)牢的瞬間垦细,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工挡逼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留括改,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓家坎,卻偏偏與公主長(zhǎng)得像嘱能,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虱疏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容