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

2010年3月9日 星期二

K 線根數的記錄 (MACD 背離)

K 線根數在使用上我想有很多的方式,因為程式只知道對量化產生一個結果…在沒給程式一個很明確的定義情況下,程式是無法了解需要怎麼去運作的…(通常也沒辦法寫成程式)。舉個例子來說明…當你用眼睛看出一個 MACD 背離的情況下,因為你知道 MACD 背離的條件,所以很容易的就可以指出目前是 MACD 背離:



如上圖,我想應該是個很清楚的 MACD 背離條件,價格創新高但指標沒有跟著創新高。但是你很容易了解的東西,並不代表可以很容易的轉化為程式條件。

因為你不知道怎麼量化他。

所以這邊比較簡單的作法,就是利用 K 棒的根數來區隔二個高點,分別記錄下當時的價位和指標的位置。

以上面那個例子來說…也許你希望二個高點中間是隔著 20 根 K 棒,這個背離條件才算成立。所以就試著把這樣的背離條件寫出來吧:

array: highPoint[2](0), highMACD[2](0), highK[2](0);


Value1 = MACD(close, 12, 26);
Value2 = XAverage(MACD(close, 12, 26), 9);

if Value1 cross under Value2 then begin
highPoint[0] = highPoint[1];
highMACD[0] = highMACD[1];
highK[0] = highK[1];

for Value3 = 0 to 10 begin
if high[Value3] = highest(high, 10) then begin
highPoint[1] = high[Value3];
highMACD[1] = Value1[Value3];
highK[1] = barnumber[Value3];
end;
end;

if highPoint[1] > highPoint[0] and highMACD[1] < highMACD[0] and highK[1] > highK[0] + 20 then begin
sell next bar at market;
end;
end;

setexitonclose;


這個程式我想又比之前的東西難度更高了一點…

首先我用到了 Array 來宣告變數。在這邊我宣告了三個變數等著來儲存高點、MACD值、和當時的 K 棒。

接下來就是熟悉的 MACD 計算式。

再來的 if 這區塊可能稍微難一點…不過慢慢看應該還是懂我在寫什麼。首先是判斷 MACD 是否死亡交叉。

如果產生死亡交叉後,把 Array 的值給移動一下,因為 Array[1] 這個值我們要拿來儲存最新的值,所以把這個值丟到 Array[0] 裡面去。

在來是一個 For 迴圈,在這邊我假設產生的高點會出現在離交叉出現前的十根 K 線之內。所以我用了一個 For 來去抓出最高價( high[Value3] = highest(high, 10) ) ,當抓出最高價後,就把最高價的值丟進 highPoint[1] 裡面,順便把 MACD 的值和 K 線的值也分別丟進 array 內。

接下來就是比較目前的交叉前所產生的高點和前一個高點,是不是有背離的條件產生。有的話就是空單進場。



當然同樣的…這績效並不怎麼樣。


整個想法化為程式的過程就在上面了…接下來就是多思考、多練習吧。當你有一個想法想實際測試一下的時候…請注意是不是能夠量化。因為用講的總是很簡單…可惜電腦沒這麼聰明。

練習的話…就把多單完成吧。

8 則留言:

  1. 請教宣告array這行array: highPoint[2](0), highMACD[2](0), highK[2](0);

    意思是不是宣告二為陣列,從0開始? 謝謝~

    回覆刪除
  2. J.I. 這是一維陣列..起始值設為 0

    回覆刪除
  3. 我也不懂耶...
    那你那個[2]是什麼意思呢?

    回覆刪除
  4. 小峰to layx

    依我的看法[2]是指一維陣列共有兩格,每格的值為0,
    只是不知陣列的起始值是從0開始還是1?

    回覆刪除
  5. 請問格的意思試...

    你這樣講起來我感覺是2x1的矩陣

    回覆刪除
  6. 第三偏是哪偏阿= =a

    回覆刪除
  7. http://ssdkchang.blogspot.com/2010/02/blog-post.html

    回覆刪除

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

Related Posts Plugin for WordPress, Blogger...