[TS懶人包] [保險服務]

2008年9月4日 星期四

在分線內顯示日線 MA

寫程式交易這麼久的時間…其實我很少用到 MA…更正確來說…我很少用到技術指標…不過最近開始寫波段程式,MA還是得拿出來用用才行…不過呢,我又想讓程式在分線裡面跑…這時候就出了點問題了…MA會因為今天的價格一直在變動啊…這可不是我想要的…所以,就寫出了這個比較簡易的方法。

話先說在前頭…其實這個方法和暴力法去抓每日的收盤價計算來比較的話…會有一點點差距,如下圖…紅線是用暴力法算出來的 10ma,而黃線則是偷雞法...


為什麼暴力法不好呢…暴力法的程式碼如下:

vars:maa(0);
maa = (closed(1)+closed(2)+closed(3)+closed(4)+closed(5)+closed(6)+closed(7)+closed(8)+closed(9)+closed(10))/10;
plot2(maa, "10ma", red, red, 2);

這是在 TS 裡面的寫法…其實還滿簡單的…不過呢,在 HTS 可就不一樣了…每一個 closed 都得先弄個 array 出來,在用 array 去抓值來計算… 10ma 就得弄出 10 個 array…要是你要算個 60ma...那建 array 就不知道要建到什麼時候了。

就算是在 TS 裡面有提供 closed 這個方便的函式…要 key 60 次也真夠煩人的吧…所以下面就是偷雞法啦…


input:length(600);
vars:count(1);

if date[1] <> date[0] then
count = 1;
if time[1] <> time[0] then
count = count + 1;

plot1(average(close[count],length), "ma", yellow, yellow, 1);

這個方法要怎麼用呢…首先…如果你是用 5 分 k 的話…那一天有 60 根 k 線…十天就有 600 根了…開頭的 input:length(600) 就是這個意思…以後只要改這個地方就可以輕鬆算出 ma 啦…管你是要 60 還是 120…改個數字就行了…

如果是 30 分 k,那一天有 10 根 k 線…要算 10ma 就改成 100 吧…這個算法會稍微有差距…不過其實差距不太大的…好好利用吧。

天象寫了個新的算法了…結果會和暴力法一樣喔…有興趣的到他那邊看看吧…
在分線內顯示日線 MA

9 則留言:

  1. 這招聰明哦~
    你的blog還真是內容豐富XD
    剛剛爬文...有一篇說你有個朋友玩選
    擇權、權証全押...是X龍嗎 呵呵 我笑了

    投資新手,還要跟你多多討教了~~

    普爾凱弟

    回覆刪除
  2. 是啊…就是說他…他最近改玩權証了..也是賭很大..聽說曾經用一萬賺到四十萬過…結果心太大了…想賺到一百萬…最後什麼都沒有了…加油啊

    回覆刪除
  3. 哈哈...好像在說我耶!!
    今年初也是10萬跳入權証,結果不到一個月喔,10萬變30萬,本來想30萬衝進去50萬閃人. 哈哈...結果如DK大說的太貪心;光溜溜出來!!

    回覆刪除
  4. DK大 以你寫交易程式的經驗中,在你看來會不不有程式寫的不好而影響執行速度呢? 我沒寫過程式,若算有也只是以前唸書時短暫接觸過,但我知道大型的程式若寫的不好,可能相當耗硬體資源.
    不知在交易程式中,是不是也有這方面的問題呢?

    回覆刪除
  5. 我想交易程式應該比較不會有這樣的問題產生才對...除非你用到非常多的技術指標…這樣也許會讓速度慢一些…畢竟技術指標的運算本就就比較複雜…如果又用到數個技術指標…那可能電腦就要好一點才行了…

    回覆刪除
  6. DK大 了解...
    當沖程式,我都是自己寫的,目前我沒有使用任何技術指標; 哈哈...我只是怕我程式沒寫好,會導致盤中出狀況而已.

    回覆刪除
  7. 那就得盤中測試囉…寫好的程式最好觀察一陣子再實單下去跑…

    回覆刪除
  8. 我發現HTS在分線中引用日線資料只要使用下列方式
    就可避免錯誤,且可用於任何週期上.
    IF DATE>DATE[1] THEN
    ...
    ...
    END IF

    Parameter: ND(5)
    Variables:
    Array: OoD[84](-1), HoD[84](-1), LoD[84](-1), CoD[84](-1)

    //Value2 = HighOfD ( 1, HoD)
    //Value3 = LowOfD ( 1, LoD)
    Value4 = CloseOfD( 1, CoD)


    IF DATE>DATE[1] THEN

    Value5 = MA(Value4,ND)
    Value10 = MA(Value4,ND*2)
    Value20 = MA(Value4,ND*4)

    END IF

    DRAW5(Value5,"MA5",red)
    DRAW10(Value10,"MA10",yellow)
    DRAW20(Value20,"MA20",blue)

    回覆刪除

請留下您的大名…匿名者恕不回應…

Related Posts Plugin for WordPress, Blogger...