我們利用每一個開頭來回顧一下前一篇的重點與提出本篇的重點,其實不想說理論性的事,但這確是必要的,為了要完整掌握開發程式的方法,我們必須說明一些偏理論性的事項。
所以再一次,Multicharts程式最重要的觀念,每根K棒結束都執行程式一次(或是每tick一次)。這是專為交易而設計的系統,所有功能的開發皆以K棒為出發點,因此我們要養成習慣,以K棒來思考。我們最自然想得到的資料應該就是,K棒之間有何不同,那就必須比對不同K棒,所以就要取得當根K棒之前的K棒資料。這裡又是Multicharts的重點了,但這個重點有點複雜我們要分段說明。
首先要知道Multicharts中的資料可以是,K棒的價格、成交量與時間,還有我們自己定義的變數,我們先全部統稱為變數,變數會以K棒為單位,每根K棒都紀錄一次所有變數的值,這樣我們就能取出任何一個變數在任何一根K棒上的值,那程式中就是,以中括號[n]來取前第n根K的變數值,如當根K棒的開高收低分別是open、high、low、close,那前一根開與前二根收就是open[1]、close[2];想看當根K高是否高過前根K,那就是if (high > high[1]) then “do something”;;判斷當根K低是否低於前跟K,即為if (low < low[1]) then “do something”;。
現在就來動手寫寫看,運用這幾個重點,我們要寫一個指標,用來指出連續過高或連續破低的K棒,那就先以寫程式的步驟來規劃。
- 寫一個指標分別指出連續四根K過高或連續四根K破低;
- 判斷連續四根K過高那就是當根K高大於前一根K高,且前一根K高大於前二根K高,及前二根K高大於前三根K高,成立時在當跟K高點上五點畫一個黃點;同理當出現連續四根K棒破低我們畫一個藍點,請大家自己試試寫出連續四根K棒破低的條件;
- 檢查連續四根K棒過高條件,條件成立畫出黃點;檢查連續四根K棒破低條件,條件成立畫出藍點;
- 實作小程序:
- 檢查連續四根K棒過高:
- if (High > High[1]) and (High[1] > High[2]) and (High[2] > High[3]) then…
- 檢查連續四根K棒破低:
- if (Low < Low[1]) and (Low[1] < Low[2]) and (Low[2] < Low[3]) then…
- 畫出高點黃點:
- plot1(High + 5, “High”, yellow);
- 畫出低點藍點:
- plot2(Low – 5, “Low”, blue);
- 檢查連續四根K棒過高:
- 結合並完成:
if (High > High[1]) and (High[1] > High[2]) and (High[2] > High[3])
then plot1(High + 5, “High”, yellow);
if (Low < Low[1]) and (Low[1] < Low[2]) and (Low[2] < Low[3])
then plot2(Low – 5, “Low”, blue);
此指標就是我們利用K棒與前幾根K棒的價格比對後,所標示出連續過高破低的K棒,但須自己改變指標型態由線轉成點,這樣才能顯示如圖中的黃藍點。
但K棒中能記錄的不只是價格,我們再多寫一個指標,這次我們用自己定義的變數來做比較,那就來寫一個大家最常用的均線,我們要在均線上著色,將上漲與下跌分別畫上不同的顏色,按慣例由寫程式的步驟開始。
- 要寫出一個指標用來畫出均線並上色;
- 畫出一條均線,上漲時畫成黃色,下跌時畫成藍色;
- 設定變數記錄均線值與顏色、使用均線函數取得均線值、判斷均線漲時設定黃色,跌時設定藍色,持平設定灰色、畫出均線;
- 實作小程序:
- 設定變數:
- var:
var0(0),
color(lightgray);
- var:
- 使用均線函數取得均線值:
- var0 = AverageFC(Price, Length);
- 判斷均線漲跌設定顏色:
- if var0 > var0[1] then color = yellow)
else if var0 < var0[1] then color = blue)
else color = lightgray;)
- if var0 > var0[1] then color = yellow)
- 畫出均線:
- Plot1(var0, “Avg”, color);
- 設定變數:
- 結合並完成:
Input:
Price(Close),
Length(13);
var:
var0(0),
color(lightgray);
var0 = AverageFC(Price, Length);
if var0 > var0[1] then color = yellow
else if var0 < var0[1] then color = blue
else color = lightgray;
Plot1(var0, “Avg”, color);
此指標讓我們更容易看出均線的上揚與下探,但程式中還是有我們所尚未解釋到的,不過請大家先不要在意,因為這會在之後補上,現在我們還是專注在用步驟與重點,來練習設計與實作程式。
此次我們寫了兩個指標程式,希望不會讓大家有太大的負擔,在本篇結束前讓我們回顧至目前為止的重點。
每根K棒結束都執行程式一次;
以K棒來思考;
每根K棒都紀錄一次所有變數的值;
以中括號[n]來取前第n根K的變數值。
M大真是太感謝你了。
非常詳細的教學,容小弟膜拜一下……….
C大別客氣呀.. ^^
mewmi大大︰感恩啊,認真上了三堂課例題也都做了,獲益良多,已經開始期待第四堂課鐘響呢!
建議M大,就每次課程內容再加個習題,下一堂公布解答範例,可以讓大家知道是不是真的懂了。
附帶一提,最後一個例題,當轉折時(由漲->跌 或跌->漲)第一段均線顏色無法立即更換,可有解?
總之,謝謝您的熱心教導!
哈.. 習題.. 我想會來看的自是有心人.. 何須我多此一舉..
若你這麼想要.. 那就給你一個……….
請寫出回測績效呈45度角上升永不回落的策略..
這就是你的習題啦XD
顏色.. 有假的解你要嗎? 你可以仔細觀察想想為何會如此..
這個若以後有機會在來說..
提示就是.. 不是只有資料能向前取.. 畫圖也能往左右畫.. 試試吧!
Mewmi 大提到:
“”提示就是.. 不是只有資料能向前取.. 畫圖也能往左右畫.. 試試吧!””
想了很久,這樣應該可以解決了
plot1[1](var0[1],”Avg”,color);
plot1(var0,”Avg”,color);
謝謝提示!
yes,that’s it!