開拓者兩個(gè)波峰和波谷的程序源碼 [開拓者 TB]
- 咨詢內(nèi)容: 我編了一段求前兩個(gè)波峰和波谷的程序(可在交易指令下測(cè)試),
但效果還不滿意,希望能得到高手的改進(jìn),謝謝!- Params
- Numeric MyMinLength(5);
- // GV10 最近波峰與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV11 最近波峰的值
- // GV12 最近波谷與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV13 最近波谷的值
- // GV14 前一個(gè)波峰與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV15 前一個(gè)波峰的值
- // GV16 前一個(gè)波谷與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV17 前一個(gè)波谷的值
- Vars
- Numeric MyLength;
- Numeric MyHighBar;
- Numeric MyHigh;
- Numeric MyLow;
- Numeric MyLowBar;
- Begin
- If (BarStatus==0)
- { SetGlobalVar(10,0); SetGlobalVar(11,High); //最近波峰Bar,High
- SetGlobalVar(12,0); SetGlobalVar(13,Low); //最近波谷Bar,Low
- SetGlobalVar(14,0); SetGlobalVar(15,High);
- SetGlobalVar(16,0); SetGlobalVar(17,Low);
- }
- MyLength = GetGlobalVar(12)+1;//取上一波谷到當(dāng)前Bar的個(gè)數(shù)
- MyLength = IIF(MyLength<=MyMinLength,MyMinLength+1,MyLength);//至少保持最小的波峰距離為5個(gè)Bar
- MyHighBar = HighestBar(High,MyLength);
- MyHigh = Highest(High,MyLength);
- If (GetGlobalVar(10)+1-MyHighBar>=MyMinLength or MyHigh>GetGlobalVar(11))
- { If (GetGlobalVar(10)+1-MyHighBar>=MyMinLength)
- { SetGlobalVar(14,GetGlobalVar(10)); //保留前一個(gè)波峰
- SetGlobalVar(15,GetGlobalVar(11));
- }
- SetGlobalVar(10,MyHighBar);//從上個(gè)低谷開始的最高價(jià)所在的Bar序數(shù)
- SetGlobalVar(11,MyHigh); //從上個(gè)低谷開始的最高價(jià)
- } Else SetGlobalVar(10,GetGlobalVar(10)+1);
- MyLength = GetGlobalVar(10)+1;//取上一波峰到當(dāng)前Bar的個(gè)數(shù)
- MyLength = IIF(MyLength<MyMinLength,MyMinLength+1,MyLength);
- MyLowBar = LowestBar(Low,MyLength);
- MyLow = Lowest(Low,MyLength);
- If (GetGlobalVar(12)+1-MyLowBar>=MyMinLength or MyLow<GetGlobalVar(13))
- { If (GetGlobalVar(12)+1-MyLowBar>=MyMinLength)
- { SetGlobalVar(16,GetGlobalVar(12)); //保留前一個(gè)波谷
- SetGlobalVar(17,GetGlobalVar(13));
- }
- SetGlobalVar(12,MyLowBar);//從上個(gè)波峰開始的最低價(jià)所在的Bar序數(shù)
- SetGlobalVar(13,MyLow);//從上個(gè)波峰開始的最低價(jià)
- } Else SetGlobalVar(12,GetGlobalVar(12)+1);
- //驗(yàn)證顯示
- Commentary("CurrBar "+Text(CurrentBar));
- Commentary("HighestNear "+Text(GetGlobalVar(11))+" Bar "+Text(GetGlobalVar(10)));
- Commentary("LowestNear "+Text(GetGlobalVar(13))+" Bar "+Text(GetGlobalVar(12)));
- Commentary("HighestFar "+Text(GetGlobalVar(15))+" Bar "+Text(GetGlobalVar(14)));
- Commentary("LowestFar "+Text(GetGlobalVar(17))+" Bar "+Text(GetGlobalVar(16)));
- End
- TB技術(shù)人員: 請(qǐng)教為什么在實(shí)時(shí)(BarStatus==2)時(shí),最后一個(gè)Bar的計(jì)算值的不對(duì)的,請(qǐng)高手幫助。謝謝!
- TB客服: 最后一個(gè)bar的high和low不斷在變化,所以有可能不對(duì)的
- 網(wǎng)友回復(fù): 本帖最后由 efrog 于 2010-9-8 20:45 編輯
謝謝,問(wèn)題就出在這里。增加了BarStatus==1的限制,讓最后一個(gè)Bar不參與計(jì)算,問(wèn)題就解決了。
實(shí)際上最后Bar的High與Low要參與波峰、波谷的比較,在比較之前還不能直接修正目前的波峰、波谷。
修正的程序如下:- Params
- Numeric MyMinLength(5);
- // GV10 最近波峰與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV11 最近波峰的值
- // GV12 最近波谷與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV13 最近波谷的值
- // GV14 前一個(gè)波峰與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV15 前一個(gè)波峰的值
- // GV16 前一個(gè)波谷與當(dāng)前Bar的Bar計(jì)數(shù)
- // GV17 前一個(gè)波谷的值
- Vars
- Numeric MyLength;
- Numeric MyHighBar;
- Numeric MyHigh;
- Numeric MyLow;
- Numeric MyLowBar;
- Begin
- If (BarStatus==0)
- { SetGlobalVar(10,0); SetGlobalVar(11,High); //最近波峰Bar,High
- SetGlobalVar(12,0); SetGlobalVar(13,Low); //最近波谷Bar,Low
- SetGlobalVar(14,0); SetGlobalVar(15,High);
- SetGlobalVar(16,0); SetGlobalVar(17,Low);
- }
- If (BarStatus==1)
- { MyLength = GetGlobalVar(12)+1;//取上一波谷到當(dāng)前Bar的個(gè)數(shù)
- MyLength = IIF(MyLength<=MyMinLength,MyMinLength+1,MyLength);//至少保持最小的波峰距離為5個(gè)Bar
- MyHighBar = HighestBar(High,MyLength);
- MyHigh = Highest(High,MyLength);
- If (GetGlobalVar(10)+1-MyHighBar>=MyMinLength or MyHigh>GetGlobalVar(11))
- { If (GetGlobalVar(10)+1-MyHighBar>=MyMinLength)
- { SetGlobalVar(14,GetGlobalVar(10)); //保留前一個(gè)波峰
- SetGlobalVar(15,GetGlobalVar(11));
- }
- SetGlobalVar(10,MyHighBar+1);//從上個(gè)低谷開始的最高價(jià)所在的Bar序數(shù)
- SetGlobalVar(11,MyHigh); //從上個(gè)低谷開始的最高價(jià)
- } Else SetGlobalVar(10,GetGlobalVar(10)+1);
- MyLength = GetGlobalVar(10)+1;//取上一波峰到當(dāng)前Bar的個(gè)數(shù)
- MyLength = IIF(MyLength<MyMinLength,MyMinLength+1,MyLength);
- MyLowBar = LowestBar(Low,MyLength);
- MyLow = Lowest(Low,MyLength);
- If (GetGlobalVar(12)+1-MyLowBar>=MyMinLength or MyLow<GetGlobalVar(13))
- { If (GetGlobalVar(12)+1-MyLowBar>=MyMinLength)
- { SetGlobalVar(16,GetGlobalVar(12)); //保留前一個(gè)波谷
- SetGlobalVar(17,GetGlobalVar(13));
- }
- SetGlobalVar(12,MyLowBar+1);//從上個(gè)波峰開始的最低價(jià)所在的Bar序數(shù)
- SetGlobalVar(13,MyLow);//從上個(gè)波峰開始的最低價(jià)
- } Else SetGlobalVar(12,GetGlobalVar(12)+1);
- }
- //驗(yàn)證顯示
- Commentary("CurrBar "+Text(CurrentBar));
- Commentary("HighestNear "+Text(GetGlobalVar(11))+" Bar "+Text(GetGlobalVar(10)));
- Commentary("LowestNear "+Text(GetGlobalVar(13))+" Bar "+Text(GetGlobalVar(12)));
- Commentary("HighestFar "+Text(GetGlobalVar(15))+" Bar "+Text(GetGlobalVar(14)));
- Commentary("LowestFar "+Text(GetGlobalVar(17))+" Bar "+Text(GetGlobalVar(16)));
- End
- 網(wǎng)友回復(fù):目前還有二個(gè)問(wèn)題:
(1)HighestFar、LowestFar的Bar計(jì)算有問(wèn)題 - (2)由于使用了Highest和Lowest用戶函數(shù),當(dāng)最遠(yuǎn)的Bar前有更高或更低值時(shí),這兩個(gè)函數(shù)找到的并不是波峰和波谷。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 262069696 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)