策略抓到數據與在指標圖面上看到數據不同???
var0 = MACD( C, 9, 26 ); var1 = XAverage( var0, 9 ); var2 = var0 - var1;
if Date = 1130403 then print("Date:",Date," Time:",Time,var0," var1:",var1," var2:",var2 );
var1 前面數值就是 var0 = macd
我只想用個RSI MACD 做策略.. 先是MultiCharts與一般看盤軟體不同 就算了.
改看原本MultiCharts的做策略.
結果策略抓到又與圖表不同.........................
你說說看我該怎摸辦?
應該是你的參數打錯了
var0 = MACD( C, 9, 26 );
請改成
var0 = MACD( C, 12, 26 );
或是把指標的參數改成 9,26,9
我的參數就是要用 9 , 26 ,9 沒錯.
圖片證明給你看
比對我發文的Debug輸出 就是不一樣
請問有空幫我查看嗎?
我試跑的結果如下,看起來沒有問題呀
我有單獨世跑過是正常~
那麻煩請你跑這段,為何最後輸出會不一樣?
vars: buySTOP(0),sellSTOP(0); Array:Macds[14](0),MACDDiff[14](0); variables:HighK(0),LowK(0),Counter(0),KbarH(0),KbarL(0),BuyS(0),var0(0),var1(0),var2(0); if Date = 1130403 and Time = 900 then cleardebug(); if Time = 1345 then Value1= 1; if Date >= 1130101 and Time >= 903 and Time < 1300 and currentbar > 15 then begin //print("Date:",Date," Time:",Time); Value1= iff( D>D[1], 1, Value1+1); value61=0;value62=0;value63=0;value64=0; for value11 = 0 to 3 begin Macds[value11+1]=MACD( C[Value1 + value11 ], 9, 13 ); value12=XAverage( Macds[value11+1], 9 ); MACDDiff[value11+1]=MACD( C[Value1 + value11 ], 9, 13 ) - value12; if absvalue(Macds[value11+1]) > value61 then begin value61 = absvalue(Macds[value11+1]); value62 = Value1 + value11; end; if absvalue(MACDDiff[value11+1]) > value63 then begin value63 = absvalue(MACDDiff[value11+1]); value64 = Value1 + value11; end; end; HighK = maxlist(H[value62],H[value64]); LowK = maxlist(L[value62],L[value64]); condition1 = False;condition2 = False;condition3 = False;condition4 = False;condition5 = False; KbarH =0; KbarL =0; For Counter=Value1 DownTo 1 Begin if C[Counter] > HighK and absvalue(C[Counter] - O[Counter]) > 2 and KbarH <= 0 then begin KbarH = H[Counter]; KbarL = L[Counter]; condition1 = True; BuyS = 2; end else if C[Counter] < LowK and absvalue(C[Counter] - O[Counter]) > 2 and KbarH <= 0 then begin KbarH = H[Counter]; KbarL = L[Counter]; condition1 = True; BuyS = 1; End; if absvalue(C[Counter] - O[Counter]) >=5 or (H[Counter] - L[Counter]) >= 10 then condition2 = True; var0 = MACD( C[Counter], 9, 26 ); var1 = XAverage( var0, 9 ); var2 = var0 - var1; if condition2 and (crosses_above(var0,var2) or crosses_below(var0,var2)) then condition3 = True; End; var0 = MACD( C, 9, 26 ); var1 = XAverage( var0, 9 ); var2 = var0 - var1; if Date = 1130403 then print("Date:",Date," Time:",Time,var0," var1:",var1," var2:",var2 ); end;
是否PowerLanguage 於執行階段變數無法被正確重複取代使用?Pool Memory Leak問題?
注意看最後的這幾行 var0 ~ var2皆已被重新定義使用.
是否PowerLanguage 於執行階段變數無法被正確重複取代使用?
是你的使用有問題 var0 因為被重覆使用了
它的內容會變成不確定值
不同根K棒不一定是上面的值或下面的值,算出來當然會不正確
不同用途請宣告成不同的變數來使用,以免內容值打架
這在任何程式語言上都一樣的,不是 PL 的問題
關鍵點在同時間同跟k棒的數值 9:09 運算出來的 會前後不一? 還是你認為在9:09分的k棒會餵給 var0 不同的數據??? 程式碼並不是使用IOG模式所以不會在同跟K棒做運算. var0 重複使用上有何問問題我就不懂了 變數就是可變動值. PL也無提供unset 去釋放. 在單一執行中去變更變數值做暫存做各種運算不是各種語言常用手法???? var0被定義新值不就是該以新的值去運算?
因為你的 var0 的計算被 IF 包住
所以它有時會算新值,有時沒進 IF 會留舊值
所以它不是連續值,再上一個var0 又被另一個 if 包住,又有可能發生 改變或不改變的問題
不改變就會保留上一根K棒的值到次一根K棒去
你只要把最後一組的 var0 移到 if 的外面,應該就可以了
但對內部的 var0 而言是否正確,就要看你要的是什麼了
總之,PL語法有 "時序" 的概念,它有前後K棒的繼承關係
這一點搞清楚,應該就可以理解問題在那裡了
感謝回復!