TS交易之王MACD指標模型實例
作者:開拓者 TB 來源:cxh99.com 發布時間:2012年10月12日
|
- 咨詢內容: 教程共分四大部分。
第一部第一章:指標寫作
Know How EasyLanguage PowerEditor
簡介
OmegaResearch 交易之王 系列產品是交易者公認最好用的交易工具整合環境。你不只可以拿它來看盤,使用它內建的諸多技術指針協助分析交易,你也可以自行開發屬意的指標,只要你想的到的。最重要的你可以用它來開發交易系統協助你進入機械化交易的世界。把交易構想付之實現并量化,你可以給自己交易最重要的東西──信心!
這個開發并實現交易夢想的核心就存在它內含的EasyLanguage PowerEditor當中。它不是一般點選內建指針,再加一些邏輯運算選項的陽春交易系統設計平臺。它是透過一個類似Pascal語法的所謂EasyLanguage來書寫你的程序代碼,然后透過內部的編譯器產生執行效率高的機碼(這就是讓它屹立不搖的賣點)。甚至連它的競爭者如Equis 的 MetaStock 等多年來也只能不敢吭聲的當老二。
雖然它名為「容易語言」,可是對許多沒有程序語言經驗的人來說它還真是宛如火星語一般的叫人直呼「不容易」。特別對我們這些非英語系的地區又多一曾障礙可稱為最高級的「真不容易」。你的英語能力我沒辦法幫你改善的,至于EasyLanguage我可以助你一臂之力!不過你的計算機概念我也無能為力,基本上你還是要靠你自修加強,如果還是拿過去的理由讓自己逃避,那省點事就干脆不要交易了吧!因為你放棄的是一條通往成功交易的不二法門,那就「學海無涯、回頭是岸」吧。
以下所附的幾則程序代碼是未來全文所拿來探討的樣本,你可以節錄列以便對照文章內的解說達事半功倍之效。對了、這些程序你都可以在你的PowerEditor找到,因為這些都是TS2000i所內建的。
MACD指標:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot2(XAverage(MACD(Close, FastMA, SlowMA), MacdMA), "MACDAvg");
Plot3(Plot1 - Plot2, "MADiff");
{Alert Criteria}
If Plot3 Crosses Over 0 Then
Alert("MACD has generated a bullish alert")
Else
If Plot3 crosses under 0 Then
Alert("MACD has generated a bearish alert");
{MACD Expert Commentary}
#BeginCmtry
Commentary(ExpertMACD(Plot1));
#End;
MACD函數之1:
{*******************************************************************
Description: Moving Average Convergence Divergence
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), FastMA(NumericSimple), SlowMA(NumericSimple);
MACD = XAverage(Price, FastMA) - XAverage(Price, SlowMA);
MACD函數之2
{*******************************************************************
Description: Exponential Average
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), Length(NumericSimple);
Variables: Factor(0);
If Length + 1 <> 0 Then Begin
If CurrentBar <= 1 Then Begin
Factor = 2 / (Length + 1);
XAverage = Price;
End
Else
XAverage = Factor * Price + (1 - Factor) * XAverage[1];
End;
MACD多頭交易訊號
{*******************************************************************
Description : MACD Long Entry
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMovAvg(12), SlowMovAvg(26), MACDMovAvg(9);
Variables: XMACD(0);
If CurrentBar > 2 AND MACD(Close, FastMovAvg, SlowMovAvg) Crosses Above XAverage(MACD(Close, FastMovAvg, SlowMovAvg), MACDMovAvg)[1] Then
Buy ("MACD") This Bar on Close;
MACD空頭交易訊號
{*******************************************************************
Description : MACD Short Entry
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMovAvg(12), SlowMovAvg(26), MACDMovAvg(9);
If CurrentBar > 2 AND MACD(Close, FastMovAvg, SlowMovAvg) Crosses Below XAverage(MACD(Close, FastMovAvg, SlowMovAvg), MACDMovAvg)[1] Then
Sell ("MACD") This Bar on Close;
待續
第一章:指標寫作
現在開始我會逐行解說每一行程序代碼的意義。我不想用一般手冊的說明方法,因為那樣子讓我覺得沒有效率;它讓你懂一些方法,卻也讓你合上書后忘的一乾二凈。我讓你在實做中學習,馬上披掛上陣!有成就感你就不容易忘。然后我會舉一反三拿一些實例加強你的觀念進入深植,想忘都不可能!至于手冊、我希望你不要丟掉它,放在身邊你會常常用它的;愛因斯坦說:不要去背找得到的數據來增加大腦的負擔。相信我!我這二十多年涉獵許多計算機語言,沒有手冊我一行碼都掰不出來的。讓我們系上安全帶,飛上天HI一下!
MACD指標:
Indicator?什么是Indicator?它就是指標、技術指標。不過在TS2000i它更泛指「可以顯示在圖型工作區的指針」,也就是說它不只是包含計算指標部份,更包括了顯示部份(畫圖PLOT)。以下就是一個完整的MACD指針程序,使用EasyLanguage語法完成的。
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
這一段我們稱為『備注』、『批注』(Remark)。在PowerEditor中它會顯示為綠色,因為它不會被理會或被編譯,但它方便我們閱讀,知道自己在這段程序企圖得到或想表現些什么。
批注被包圍在大括符里頭{}。只要你把一段文字用大括符包圍起來,就是告訴PowerEditor不要去執行這段東西,就算它里面是計算式也不必去鳥它。因為它是寫給我這有血有肉的人看的,不是給你這大腦裝滿海沙的家伙看的。
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Inputs : 『外來參數輸入』。
文法 Inputs 加冒號『:』之后輸入外來參數『FastMA』后加括符內填初設值『(12)』。如果有一個以上的參數需要被代入,參數間用逗點隔開『,』。最后結束時以分號終止『;』。
Inputs的部份是代表這些數據未來在我們使用該指標時是可以被更改的。如本例可以看到12,26,9就是一般MACD的慣用參數。特別說明的是當我們在設定參數名稱(FastMA)時雖然沒人管你要命什么名稱,但設定一些可讀性高的名稱對你未來使用會是一件好事的。FastMA一條快速的移動平均線比用abc來的叫人會意些吧?
初值一般也引用常用數據來代入,如此在使用上你也會方便自己許多。為什么我們要設外來參數呢?因為它方便你在使用時迅速的更改配合當時需要。也許你有天想看看以6,13,5計算的MACD會長得如何?那好你直接在圖形頁改參數便可。如果你不用Inputs、那抱歉你只有再進入PowerEditor改新參數,然后重新編譯一次才可以使用,當然你要是每到陰天閑的發慌我不阻止你如此干,至少你孩子會對我感激涕零。
Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot1 呼叫Plot1函式(函式未來會提,現在你就當自己是皇上吆喝各司其職的小太監上場。有侍衣、侍食、侍寢、、之類的他們有自己的專屬工作,只待你一聲令下,只是你要叫對人)。函式后面緊跟括符『()』,同樣以分號結束敘述。括符內加入函式本身需要的參數或變量。加什么呢?這時手冊就派上用場了!每一個函式要加的參數是不一定的,所以手冊會幫你找到。你也可以利用在線手冊,點選右上像一本書的圖示或是選單的Tools>EasyLanguage Dictionary。
文法Plot1(代入要顯示的數據,”顯示的文字字符串”);同樣的各參數間以逗點相隔,以分號結束。這里有一個不同;字符串輸入必須包含在“”之間。它藉以區隔特別是數字以文字不被處理而直接表現。比如說”3-2”會表現3-2而不是變成1。
Plot1它有許多兄弟姊姊,排行由1到4。為什么呢?因為TS200i設計成每個指針的顯示個數最大為4,無法顯示更多。對了這四條線的當然包括你喜歡加在如RSI的超買或超賣的水平線,珍惜物資喔。
來源:http://bbs.moneyeast.com/viewthr ... 0&highlight=DMA
- TB技術人員: 改寫MACD指標:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Vars : Macd_Now(0),Macd_Xavg(0),Macd_Diff(0);
Macd_Now = MACD(Close, FastMA, SlowMA);
Macd_Xavg = XAverage(Macd_Now, MacdMA);
Macd_Diff = Macd_Now – Macd_Xavg;
Plot1(Macd_Now, "MACD");
Plot2(Macd_Xavg, "MACDAvg");
Plot3(Macd_Diff, "MADiff");
Plot4(0,”0”);
如何?是不是一樣的東西?我們甚至用了第四條線來畫零軸中線。最后你必須按『F3』進行,記住!所有新寫或改寫的程序都必須按一下F3讓PowerEditor幫你檢視并編譯才可以使用。當回應你Excellent!你就可拍拍手鼓鼓掌,因為它簽了通行證給你。快去TS2000i打開一張圖然后按F7看看Indicator有沒有你的大作出現?找到My_MACD點選有沒有熱淚盈眶呀?
不過打擊接踵來到。你的柱狀圖為啥跟MACD一樣是條線呢?嗯、再回到我們的PowerEditor點選File>Properties在Indicator Properties – My_MACD 窗口下選Chart Style > Plots > MADiff > Type > Histogram。記得改完按確定后還是要按F3再編譯一次。自己可以嘗試看看如何把零軸改成點狀的線段表示。
待續
接下來、我們再舉一個例子寫另一個通用指標Stochastic,就是我們慣稱的KD指標。我們設定通用天數為9天,我們知道必須要運算RSV(不成熟隨機值)、與得到9天范圍的最高與最低。完成程序如下
Inputs: Length(9), OverSold(20), OverBought(80);
Vars : RnHi(0),RnLo(0),RSV(0),sK(0),sD(0);
If CurrentBar > 1 then begin
RnHi = Highest(High, Length);
RnLo = Lowest(Low, Length);
RSV = (Close - RnLo) / (RnHi - RnLo) * 100;
sK = ((sK[1]/3) * 2) + (RSV / 3);
sD = ((sD[1]/3) * 2) + (sK / 3);
end;
Plot1(sK, "%K");
Plot2(sD, "%D");
Plot3(OverBought, "OverBought");
Plot4(OverSold, "OverSold");
以上程序代碼大致應該沒問題,不需再逐行解說了。所以我挑重點說明。這里出現一個新東西,我們第一個接觸的『判別式』;IF(邏輯判斷)THEN(執行)。我們把這個運算譯成白話就是:如果(IF)今天下雨?(事實判斷)那么(THEN)我們出門就要打傘(行動)。寫成程序為:
IF 今天下雨? THEN 我們出門就要打傘;
在『今天下雨?』這個條件判別將產生『真TRUE』或『偽FALSE』的結果,如果結果為真(TRUE),我們則執行隨后要求的動作,如偽(FALSE)隨后動作將不會被執行。再看以下例子:
My_Count = 12;
IF My_Count > 10 THEN My_Count = My_Count + 10; (TRUE>執行)
IF My_Count < 10 THEN My_Count = My_Count / 100; (FALSE>不被執行)
再插個花談談EasyLanguage『操作數』!在四則運算沒有什么問題,順序也依習慣做先乘除后加減。在『條件式』寫法中可用邏輯操作數連接幾個條件判斷;如AND、OR等。特別的是大于或等于寫成>=,不可以寫=>。
拉回來再談下去。如果THEN之后我們要執行的不只是擔一步驟,那要如何解決?難道我們要一條一個IF~THEN的寫下去?當然不必如此!我們用一個方式來告訴它執行某范圍的動作,我們用BEGIN跟END來界定多個動作。
IF 今天下雨? THEN BEGIN
我們出門就要打傘;
出門前提醒家人外出也要帶傘;
檢查家里的窗戶關了沒;
END;
上面的條件判斷后將執行三個動作。當然你還可以在IF-THEN中再加入另一個IF-THEN,形成所謂的『巢狀判別式』,往后碰到例子再加強說明吧。除上面談的IF-THEN之外我們又看到幾個常用函式,介紹一下用法!
CurrentBar是一個常常會呼叫的函式,不過它不必引入參數,它回傳的是一個數字,這數字跟你計算指針的起始有效日數有關。在此例中、我們在數據開始的第9天后才能開始計算出KD的值,所以CurrentBar回傳為1時就是第9天。所以我們在第9天之后開始計算KD(CurrentBar > 1),如此你就不會在第9天之前看到亂七八糟的指針數據了。
Highest(比較數據, 范圍天數)。這個函式很容易了解因為它用High+Est。這里的High不是指我們說的當日最高,而是一堆數據里的最高值將被發現出來。所以我們如果輸入Highest(Close, 9);將會尋找出過去9天中最高的收盤價。而相對的Lowest()便是找出輸入范圍的最低值。
最后一個是sK與sK[1]、sD與sD[1]。其中的不同點在于后面加了一個中括符。在EasyLanguage中,我們用中括符[X]來表示取前X天的數據或數據。所以當我們運算%K的時候需要昨天的%K數據,所以我們代入sK[1]就是得到1天前的%K數據。同理sD[1]也是這個意思。這個符號使用范圍很廣,幾乎所有的變量都可以使用如此的表示。如Close[10]表10天前的收盤價、High[6]表6天前的當日最高值。好啰這段程序到現在應該沒有感覺陌生的語法了吧?老寫原來已經有的指標是否有點少些新鮮感?我們在繼續推進前最后再舉一個例子;它是在寰宇財金[45]-『最新技術分析指標』中的【隨機RSI擺蕩指標--P133】。
Name : StochRSI
Inputs : Price(close), Length(9);
Vars : ToRSI(0), HiRSI(0), LoRSI(0);
ToRSI = RSI(Price, Length);
HiRSI = Highest(ToRSI, Length);
LoRSI = Lowest(ToRSI, Length);
Value1 = (ToRSI - LoRSI) / (HiRSI - LoRSI);
Value2 = .8;
Value3 = .2;
Plot1(value1, "StRSI");
Plot2(value2, "O.B");
Plot3(value3, "O.S");
來源http://bbs.moneyeast.com/viewthr ... 0&highlight=DMA
- TB客服: 免費TS指標下載(轉載)
來源 http://bbs.moneyeast.com/viewthr ... 4&highlight=DMA
- 網友回復: 收藏!
- 網友回復: