Extremes 解讀求極值函數(shù),測試能否玩TB [開拓者 TB]
- 咨詢內(nèi)容:
有朋友問如何學(xué)好TB?我說要讀懂公式指南,然后靠聯(lián)機(jī)幫助,然后看編程能力和邏輯思維的天賦,然后...
我給個系統(tǒng)函數(shù),讓她讀,懂了,再問說不出所以然來。
后來我一一作了注釋,總算讀懂了,呵呵
試試看,如果能完全讀懂,就可以學(xué)TB了。
讀懂的,請回復(fù)...- //------------------------------------------------------------------------
- // 簡稱: Extremes
- // 名稱: 求極值
- // 類別: 用戶函數(shù)
- // 類型: 內(nèi)建函數(shù)
- // 輸出: 數(shù)值型 (返回極值和引用型極值位置)
- //------------------------------------------------------------------------
- Params
- NumericSeries Price(1); //序列傳遞參數(shù),如Close;如果不指定參數(shù),那Price的初始值均為1(實在沒有意義)
- Numeric Length(10); //指定搜索的范圍(即搜索多少個Bar,缺省10個)
- Bool bMax(True); //指定搜索極大值(缺省True)或極小值(False)
- NumericRef ExtremeBar; //數(shù)值型引用變量,用于返回搜索范圍內(nèi)的極值Bar位置;而極值以函數(shù)返回(見Return MyVal;)
- Vars
- NumericSeries MyVal; //保存極值的序列
- NumericSeries MyBar; //保存極值所在Bar的序列
- Numeric i; //搜索變量
- Begin
- MyVal = Price; //每個新Bar的價格均要賦值給極值序列,但在計算后該值將被更新為新的極值
- MyBar = 0; //假定新Bar是極值,但在計算后該值將被更新為新的極值Bar
-
- // 在頭(Length-1)Bar內(nèi)要全部搜索一邊;或者極值在搜索邊界上(==Length-1),下一個Bar后極值被擠出搜索范圍,這時要重新搜索出新的極值;
- If ( CurrentBar <= Length - 1 || MyBar[1] == Length - 1)
- {
- for i = 1 to Length - 1 //搜索一邊指定范圍,如10,則要向后搜Bar1到Bar9;i=1是因為Bar0(myVal)沒有必要與自己比較
- {
- If (bMax ) //找新的最大值
- {
- If ( Price[i] > MyVal) //找到比當(dāng)前最大值更大的價格
- {
- MyVal = Price[i]; //更新最大值
- MyBar = i; //同時更新最大值的位置
- }
- }Else //找最小值的情況類似
- {
- If ( Price[i] < MyVal)
- {
- MyVal = Price[i];
- MyBar = i;
- }
- }
- }
- }
- Else // 當(dāng)前Bar頭(Length-1)之后,并且極值在搜索邊界內(nèi)(< Length-1),則僅進(jìn)行當(dāng)前價與極值進(jìn)行比較
- {
- If ( bMax ) //搜索最大值
- {
- If ( Price >= MyVal[1]) //當(dāng)前價不小于原最大價,找到新的最大價;注意用了>=而不是==
- {
- MyVal = Price; //當(dāng)前價是新的最大值
- MyBar = 0; //CurrentBar為0
- }Else
- {
- MyVal = MyVal[1]; //最新價小于原最大值,因此保持原最大值
- MyBar = MyBar[1] + 1; //最大值的位置遠(yuǎn)離了1位
- }
- }Else //最小值情況類似
- {
- If ( Price <= MyVal[1])
- {
- MyVal = Price;
- MyBar = 0;
- }Else
- {
- MyVal = MyVal[1];
- MyBar = MyBar[1] + 1;
- }
- }
- }
- ExtremeBar = MyBar; //將極值傳遞給數(shù)值型引用變量,用于返回極值的位置
- Return MyVal; //函數(shù)返回要求搜索的極值
- End
- //------------------------------------------------------------------------
- // 編譯版本 GS2010.12.08
- // 用戶版本 2012/05/11 21:47
- // 版權(quán)所有 guqf
- // 更改聲明 TradeBlazer Software保留對TradeBlazer平臺
- // 每一版本的TrabeBlazer公式修改和重寫的權(quán)利
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
- TB技術(shù)人員:
求注解函數(shù)NthCon,謝謝!
- TB客服:
同求注解函數(shù)NthCon,謝謝!
- 網(wǎng)友回復(fù):
老革命遇到新問題
MaxValDn= Extremes(Close,nLength,true, MaxBarDn); Commentary("MaxBarDn "+Text(MaxBarDn));
MinValDn= Extremes(Close,MaxBarDn,False,MinBarDn); Commentary("MinBarDn "+Text(MinBarDn));
nLength是30,第一句是求30個Bar內(nèi)的最高價和對應(yīng)的位置MaxBarDn,顯示結(jié)果是14,檢查K線圖形正確。
但問題出現(xiàn)在第二句,原意是求出現(xiàn)最高價位之內(nèi)的最低價位置,結(jié)果MinBarDn超出了14,不可思議!
但是將第二句改成:MinValDn= Extremes(Close,14,False,MinBarDn); Commentary("MinBarDn "+Text(MinBarDn));
計算出的MinBarDn為0,正確!是在最低位。
為什么用MaxBarDn作為檢索變量就會出錯,請管理員幫助檢查原因,謝謝!
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 進(jìn)行 有償 編寫!(不貴!點擊查看價格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容