TS交易之王MACD指標(biāo)模型實(shí)例
作者:開拓者 TB 來源:cxh99.com 發(fā)布時(shí)間:2012年10月12日
|
- 咨詢內(nèi)容: 教程共分四大部分。
第一部第一章:指標(biāo)寫作
Know How EasyLanguage PowerEditor
簡(jiǎn)介
OmegaResearch 交易之王 系列產(chǎn)品是交易者公認(rèn)最好用的交易工具整合環(huán)境。你不只可以拿它來看盤,使用它內(nèi)建的諸多技術(shù)指針協(xié)助分析交易,你也可以自行開發(fā)屬意的指標(biāo),只要你想的到的。最重要的你可以用它來開發(fā)交易系統(tǒng)協(xié)助你進(jìn)入機(jī)械化交易的世界。把交易構(gòu)想付之實(shí)現(xiàn)并量化,你可以給自己交易最重要的東西──信心!
這個(gè)開發(fā)并實(shí)現(xiàn)交易夢(mèng)想的核心就存在它內(nèi)含的EasyLanguage PowerEditor當(dāng)中。它不是一般點(diǎn)選內(nèi)建指針,再加一些邏輯運(yùn)算選項(xiàng)的陽春交易系統(tǒng)設(shè)計(jì)平臺(tái)。它是透過一個(gè)類似Pascal語法的所謂EasyLanguage來書寫你的程序代碼,然后透過內(nèi)部的編譯器產(chǎn)生執(zhí)行效率高的機(jī)碼(這就是讓它屹立不搖的賣點(diǎn))。甚至連它的競(jìng)爭(zhēng)者如Equis 的 MetaStock 等多年來也只能不敢吭聲的當(dāng)老二。
雖然它名為「容易語言」,可是對(duì)許多沒有程序語言經(jīng)驗(yàn)的人來說它還真是宛如火星語一般的叫人直呼「不容易」。特別對(duì)我們這些非英語系的地區(qū)又多一曾障礙可稱為最高級(jí)的「真不容易」。你的英語能力我沒辦法幫你改善的,至于EasyLanguage我可以助你一臂之力!不過你的計(jì)算機(jī)概念我也無能為力,基本上你還是要靠你自修加強(qiáng),如果還是拿過去的理由讓自己逃避,那省點(diǎn)事就干脆不要交易了吧!因?yàn)槟惴艞壍氖且粭l通往成功交易的不二法門,那就「學(xué)海無涯、回頭是岸」吧。
以下所附的幾則程序代碼是未來全文所拿來探討的樣本,你可以節(jié)錄列以便對(duì)照文章內(nèi)的解說達(dá)事半功倍之效。對(duì)了、這些程序你都可以在你的PowerEditor找到,因?yàn)檫@些都是TS2000i所內(nèi)建的。
MACD指標(biāo):
{*******************************************************************
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函數(shù)之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函數(shù)之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多頭交易訊號(hào)
{*******************************************************************
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空頭交易訊號(hào)
{*******************************************************************
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;
待續(xù)
第一章:指標(biāo)寫作
現(xiàn)在開始我會(huì)逐行解說每一行程序代碼的意義。我不想用一般手冊(cè)的說明方法,因?yàn)槟菢幼幼屛矣X得沒有效率;它讓你懂一些方法,卻也讓你合上書后忘的一乾二凈。我讓你在實(shí)做中學(xué)習(xí),馬上披掛上陣!有成就感你就不容易忘。然后我會(huì)舉一反三拿一些實(shí)例加強(qiáng)你的觀念進(jìn)入深植,想忘都不可能!至于手冊(cè)、我希望你不要丟掉它,放在身邊你會(huì)常常用它的;愛因斯坦說:不要去背找得到的數(shù)據(jù)來增加大腦的負(fù)擔(dān)。相信我!我這二十多年涉獵許多計(jì)算機(jī)語言,沒有手冊(cè)我一行碼都掰不出來的。讓我們系上安全帶,飛上天HI一下!
MACD指標(biāo):
Indicator?什么是Indicator?它就是指標(biāo)、技術(shù)指標(biāo)。不過在TS2000i它更泛指「可以顯示在圖型工作區(qū)的指針」,也就是說它不只是包含計(jì)算指標(biāo)部份,更包括了顯示部份(畫圖PLOT)。以下就是一個(gè)完整的MACD指針程序,使用EasyLanguage語法完成的。
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
這一段我們稱為『備注』、『批注』(Remark)。在PowerEditor中它會(huì)顯示為綠色,因?yàn)樗粫?huì)被理會(huì)或被編譯,但它方便我們閱讀,知道自己在這段程序企圖得到或想表現(xiàn)些什么。
批注被包圍在大括符里頭{}。只要你把一段文字用大括符包圍起來,就是告訴PowerEditor不要去執(zhí)行這段東西,就算它里面是計(jì)算式也不必去鳥它。因?yàn)樗菍懡o我這有血有肉的人看的,不是給你這大腦裝滿海沙的家伙看的。
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Inputs : 『外來參數(shù)輸入』。
文法 Inputs 加冒號(hào)『:』之后輸入外來參數(shù)『FastMA』后加括符內(nèi)填初設(shè)值『(12)』。如果有一個(gè)以上的參數(shù)需要被代入,參數(shù)間用逗點(diǎn)隔開『,』。最后結(jié)束時(shí)以分號(hào)終止『;』。
Inputs的部份是代表這些數(shù)據(jù)未來在我們使用該指標(biāo)時(shí)是可以被更改的。如本例可以看到12,26,9就是一般MACD的慣用參數(shù)。特別說明的是當(dāng)我們?cè)谠O(shè)定參數(shù)名稱(FastMA)時(shí)雖然沒人管你要命什么名稱,但設(shè)定一些可讀性高的名稱對(duì)你未來使用會(huì)是一件好事的。FastMA一條快速的移動(dòng)平均線比用abc來的叫人會(huì)意些吧?
初值一般也引用常用數(shù)據(jù)來代入,如此在使用上你也會(huì)方便自己許多。為什么我們要設(shè)外來參數(shù)呢?因?yàn)樗奖隳阍谑褂脮r(shí)迅速的更改配合當(dāng)時(shí)需要。也許你有天想看看以6,13,5計(jì)算的MACD會(huì)長(zhǎng)得如何?那好你直接在圖形頁改參數(shù)便可。如果你不用Inputs、那抱歉你只有再進(jìn)入PowerEditor改新參數(shù),然后重新編譯一次才可以使用,當(dāng)然你要是每到陰天閑的發(fā)慌我不阻止你如此干,至少你孩子會(huì)對(duì)我感激涕零。
Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot1 呼叫Plot1函式(函式未來會(huì)提,現(xiàn)在你就當(dāng)自己是皇上吆喝各司其職的小太監(jiān)上場(chǎng)。有侍衣、侍食、侍寢、、之類的他們有自己的專屬工作,只待你一聲令下,只是你要叫對(duì)人)。函式后面緊跟括符『()』,同樣以分號(hào)結(jié)束敘述。括符內(nèi)加入函式本身需要的參數(shù)或變量。加什么呢?這時(shí)手冊(cè)就派上用場(chǎng)了!每一個(gè)函式要加的參數(shù)是不一定的,所以手冊(cè)會(huì)幫你找到。你也可以利用在線手冊(cè),點(diǎn)選右上像一本書的圖示或是選單的Tools>EasyLanguage Dictionary。
文法Plot1(代入要顯示的數(shù)據(jù),”顯示的文字字符串”);同樣的各參數(shù)間以逗點(diǎn)相隔,以分號(hào)結(jié)束。這里有一個(gè)不同;字符串輸入必須包含在“”之間。它藉以區(qū)隔特別是數(shù)字以文字不被處理而直接表現(xiàn)。比如說”3-2”會(huì)表現(xiàn)3-2而不是變成1。
Plot1它有許多兄弟姊姊,排行由1到4。為什么呢?因?yàn)門S200i設(shè)計(jì)成每個(gè)指針的顯示個(gè)數(shù)最大為4,無法顯示更多。對(duì)了這四條線的當(dāng)然包括你喜歡加在如RSI的超買或超賣的水平線,珍惜物資喔。
來源:http://bbs.moneyeast.com/viewthr ... 0&highlight=DMA
- TB技術(shù)人員: 改寫MACD指標(biāo):
{*******************************************************************
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』進(jìn)行,記住!所有新寫或改寫的程序都必須按一下F3讓PowerEditor幫你檢視并編譯才可以使用。當(dāng)回應(yīng)你Excellent!你就可拍拍手鼓鼓掌,因?yàn)樗灹送ㄐ凶C給你。快去TS2000i打開一張圖然后按F7看看Indicator有沒有你的大作出現(xiàn)?找到My_MACD點(diǎn)選有沒有熱淚盈眶呀?
不過打擊接踵來到。你的柱狀圖為啥跟MACD一樣是條線呢?嗯、再回到我們的PowerEditor點(diǎn)選File>Properties在Indicator Properties – My_MACD 窗口下選Chart Style > Plots > MADiff > Type > Histogram。記得改完按確定后還是要按F3再編譯一次。自己可以嘗試看看如何把零軸改成點(diǎn)狀的線段表示。
待續(xù)
接下來、我們?cè)倥e一個(gè)例子寫另一個(gè)通用指標(biāo)Stochastic,就是我們慣稱的KD指標(biāo)。我們?cè)O(shè)定通用天數(shù)為9天,我們知道必須要運(yùn)算RSV(不成熟隨機(jī)值)、與得到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");
以上程序代碼大致應(yīng)該沒問題,不需再逐行解說了。所以我挑重點(diǎn)說明。這里出現(xiàn)一個(gè)新東西,我們第一個(gè)接觸的『判別式』;IF(邏輯判斷)THEN(執(zhí)行)。我們把這個(gè)運(yùn)算譯成白話就是:如果(IF)今天下雨?(事實(shí)判斷)那么(THEN)我們出門就要打傘(行動(dòng))。寫成程序?yàn)椋?br />
IF 今天下雨? THEN 我們出門就要打傘;
在『今天下雨?』這個(gè)條件判別將產(chǎn)生『真TRUE』或『偽FALSE』的結(jié)果,如果結(jié)果為真(TRUE),我們則執(zhí)行隨后要求的動(dòng)作,如偽(FALSE)隨后動(dòng)作將不會(huì)被執(zhí)行。再看以下例子:
My_Count = 12;
IF My_Count > 10 THEN My_Count = My_Count + 10; (TRUE>執(zhí)行)
IF My_Count < 10 THEN My_Count = My_Count / 100; (FALSE>不被執(zhí)行)
再插個(gè)花談?wù)凟asyLanguage『操作數(shù)』!在四則運(yùn)算沒有什么問題,順序也依習(xí)慣做先乘除后加減。在『條件式』寫法中可用邏輯操作數(shù)連接幾個(gè)條件判斷;如AND、OR等。特別的是大于或等于寫成>=,不可以寫=>。
拉回來再談下去。如果THEN之后我們要執(zhí)行的不只是擔(dān)一步驟,那要如何解決?難道我們要一條一個(gè)IF~THEN的寫下去?當(dāng)然不必如此!我們用一個(gè)方式來告訴它執(zhí)行某范圍的動(dòng)作,我們用BEGIN跟END來界定多個(gè)動(dòng)作。
IF 今天下雨? THEN BEGIN
我們出門就要打傘;
出門前提醒家人外出也要帶傘;
檢查家里的窗戶關(guān)了沒;
END;
上面的條件判斷后將執(zhí)行三個(gè)動(dòng)作。當(dāng)然你還可以在IF-THEN中再加入另一個(gè)IF-THEN,形成所謂的『巢狀判別式』,往后碰到例子再加強(qiáng)說明吧。除上面談的IF-THEN之外我們又看到幾個(gè)常用函式,介紹一下用法!
CurrentBar是一個(gè)常常會(huì)呼叫的函式,不過它不必引入?yún)?shù),它回傳的是一個(gè)數(shù)字,這數(shù)字跟你計(jì)算指針的起始有效日數(shù)有關(guān)。在此例中、我們?cè)跀?shù)據(jù)開始的第9天后才能開始計(jì)算出KD的值,所以CurrentBar回傳為1時(shí)就是第9天。所以我們?cè)诘冢固熘箝_始計(jì)算KD(CurrentBar > 1),如此你就不會(huì)在第9天之前看到亂七八糟的指針數(shù)據(jù)了。
Highest(比較數(shù)據(jù), 范圍天數(shù))。這個(gè)函式很容易了解因?yàn)樗肏igh+Est。這里的High不是指我們說的當(dāng)日最高,而是一堆數(shù)據(jù)里的最高值將被發(fā)現(xiàn)出來。所以我們?nèi)绻斎際ighest(Close, 9);將會(huì)尋找出過去9天中最高的收盤價(jià)。而相對(duì)的Lowest()便是找出輸入范圍的最低值。
最后一個(gè)是sK與sK[1]、sD與sD[1]。其中的不同點(diǎn)在于后面加了一個(gè)中括符。在EasyLanguage中,我們用中括符[X]來表示取前X天的數(shù)據(jù)或數(shù)據(jù)。所以當(dāng)我們運(yùn)算%K的時(shí)候需要昨天的%K數(shù)據(jù),所以我們代入sK[1]就是得到1天前的%K數(shù)據(jù)。同理sD[1]也是這個(gè)意思。這個(gè)符號(hào)使用范圍很廣,幾乎所有的變量都可以使用如此的表示。如Close[10]表10天前的收盤價(jià)、High[6]表6天前的當(dāng)日最高值。好啰這段程序到現(xiàn)在應(yīng)該沒有感覺陌生的語法了吧?老寫原來已經(jīng)有的指標(biāo)是否有點(diǎn)少些新鮮感?我們?cè)诶^續(xù)推進(jìn)前最后再舉一個(gè)例子;它是在寰宇財(cái)金[45]-『最新技術(shù)分析指標(biāo)』中的【隨機(jī)RSI擺蕩指標(biāo)--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客服: 免費(fèi)TS指標(biāo)下載(轉(zhuǎn)載)
來源 http://bbs.moneyeast.com/viewthr ... 4&highlight=DMA
- 網(wǎng)友回復(fù): 收藏!
- 網(wǎng)友回復(fù):