Professional Documents
Culture Documents
簡介
OmegaResearch TradeStation 系列產品是交易者公認最好用的交易工具整合環境。你不只可以拿它來看盤,
使用它內建的諸多技術指標協助分析交易,你也可以自行開發屬意的指標,只要你想的到的。最重要的你可以
用它來開發交易系統協助你進入機械化交易的世界。把交易構想付之實現並量化,你可以給自己交易最重要的
東西──信心!
這個開發並實現交易夢想的核心就存在它內含的 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 指標:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
這一段我們稱為『備註』、
『註解』(Remark)。在 PowerEditor 中它會顯示為綠色,因為它不會被理會或被
編譯,但它方便我們閱讀,知道自己在這段程式企圖得到或想表現些什麼。
Inputs : 『外來參數輸入』。
文法 Inputs 加冒號『:』之後輸入外來參數『FastMA』後加括符內填初設值『(12)』。如果有一個以上的
參數需要被代入,參數間用逗點隔開『,』。最後結束時以分號終止『;』。
初值一般也引用常用數據來代入,如此在使用上你也會方便自己許多。為什麼我們要設外來參數呢?因為
它方便你在使用時迅速的更改配合當時需要。也許你有天想看看以 6,13,5 計算的 MACD 會長得如何?那好你直
接在圖形頁改參數便可。如果你不用 Inputs、那抱歉你只有再進入 PowerEditor 改新參數,然後重新編譯一次才
可以使用,當然你要是每到陰天閒的發慌我不阻止你如此幹,至少你孩子會對我感激涕零。
文法 Plot1(代入要顯示的數據,”顯示的文字字串”);同樣的各參數間以逗點相隔,以分號結束。這
裡有一個不同;字串輸入必須包含在“”之間。它藉以區隔特別是數字以文字不被處理而直接表現。比如說”3-
2”會表現 3-2 而不是變成1。
MACD()這個函式需要輸入三個參數。後兩個是我們提過的外部輸入的天數參數,就是算 12 天平滑平均減 26
天平滑平均。那用什麼來算呢?『收盤價』不是嗎?所以第一個參數我們置入 Close。在 EasyLanguage 中
Open、High、Low、Close、IF、THEN 等被稱為保留字(Reserved Word),也就是說這些字被定義為具專門用途的用
語,其意義被永久固定無法更改或被指定他用。不要懷疑這裡的他就是指你!所以在此這個 Close 就是代表收盤
價,無論你在任一程序中發現它都是那個意思。
待續
好!討論到此這個指標的核心已經結束。其他的程式碼是指標附加功能,我也會解釋。只是到此你應該有利
用現成函式自己寫個指標亮相的能力了。所以我想在此先談一些運用變化,讓你舉一反三增加幾個甲子的功力。
讓我們來嘗試用不同的方式改寫這個指標。行動前我再解釋一個重要的部份,就是除外部參數外我們還必
須瞭解及學會運用內部參數或變數的運用。內部參數文法如同 Inputs,只不過它不用 Inputs 是用 Vars。例
Vars : Macd_Now(0),Macd_Xavg(0),Macd_Diff(0);
是不是差不多?我們一般會給變數初值為零,算是一個重置(ReSet)的動作。當然你如有特殊需要是可以
直接代入需要的數據不一定設為零。上點BCC電腦基本概念;Vars 就是我們向電腦要求分配一個記憶區供我
們置放一些運算結果。就像我們跟電腦要一張椅子,我拿椅子當比方就是它是張單人椅,請不要嘗試跟你的阿
那答想親蜜的擠一張椅子。所以啦、椅子永遠是要到的那一張,坐的人可以是任何一個人。以下例子說明內部變
數使用文法。
Vars : Macd_Now(0);
Macd_Now = 3.14 < 正確的代入,椅子正被 3.14 所坐。
3.14 = Macd_Now < 錯誤!3.14 正被椅子坐?
Macd_Now = Macd_Now + 2000 < 正確!Macd_Now 增肥 2000 公斤後變了另一個傢伙,雖然他媽媽都認不
出他了,他還是有資格坐在椅子上。
改寫 MACD 指標:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Plot1(Macd_Now, "MACD");
Plot2(Macd_Xavg, "MACDAvg");
Plot3(Macd_Diff, "MADiff");
Plot4(0,”0”);
如何?是不是一樣的東西?我們甚至用了第四條線來畫零軸中線。最後你必須按『F3』進行,記住!所有
新寫或改寫的程式都必須按一下 F3 讓 PowerEditor 幫你檢視並編譯才可以使用。當回應你 Excellent!你就可
拍拍手鼓鼓掌,因為它簽了通行證給你。快去 TS2000i 打開一張圖然後按 F7 看看 Indicator 有沒有你的大作出現?
找到 My_MACD 點選有沒有熱淚盈眶呀?
接下來、我們再舉一個例子寫另一個通用指標 Stochastic,就是我們慣稱的KD指標。我們設定通用天數為9
天,我們知道必須要運算RSV(不成熟隨機值)、與得到9天範圍的最高與最低。完成程式如下
Plot1(sK, "%K");
Plot2(sD, "%D");
Plot3(OverBought, "OverBought");
Plot4(OverSold, "OverSold");
以上程式碼大致應該沒問題,不需再逐行解說了。所以我挑重點說明。這裡出現一個新東西,我們第一個接
觸的『判別式』;IF(邏輯判斷)THEN(執行)。我們把這個運算譯成白話就是:如果(IF)今天下雨?(事實
判斷)那麼(THEN)我們出門就要打傘(行動)。寫成程式為:
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 等。特別的是大於或等於寫成>=,不可以寫=
>。
CurrentBar 是一個常常會呼叫的函式,不過它不必引入參數,它回傳的是一個數字,這數字跟你計算指標
的起始有效日數有關。在此例中、我們在資料開始的第9天後才能開始計算出 KD 的值,所以 CurrentBar 回傳為
1時就是第9天。所以我們在第9天之後開始計算 KD(CurrentBar > 1),如此你就不會在第9天之前看到亂七
八糟的指標數據了。
Name : StochRSI
Plot1(value1, "StRSI");
Plot2(value2, "O.B");
Plot3(value3, "O.S");
依慣例介紹個新朋友。
『Value1』是 EasyLanguage 裡一個貼心的變數設定。還記得我們要使用變數前都必須
在 Vars : 後先『宣告變數使用』的動作。不然編譯器在你按 F3 時會給你錯誤訊息,非法使用變數一類的。不過
這個 Value1 不必經過這道手續,它是例外的;EasyLanguage 留下 Value1~Value999 給你「濫用」。為什麼說濫
用呢?就是它雖然使用方便,但會養成你寫程式的壞習慣,降低你的程式可讀性。像這幾行完成的程式當然無
妨,如果你未來寫個老太婆的纏腳布那麼長的程式,而你不停的、快樂的用上 ValueX;嘿嘿!你在寫完的半年
後想修改個內容你就會吃盡苦頭了,因為你的作品像極了結繩記事,那個長的像肉包子大的結到底是記錄發生
的那條大事?它會讓你悔不當初。
{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");
現在透過 ELSE 的語法,我們便可以結合上面兩行變成一個完整的敘述,如指標內的寫法。
最後一段敘述是在指標中加入一些指標功能解說。它可以方便新手或對你獨創指標不甚瞭解的使用者得到
一些使用資訊。#BeginComtry ~ #End; 是說明檔專屬的寫法,所有的說明敘述被包括在這個範圍裡。而
Commentary() 函式是輸入說明文字檔的地方,不要忘了文字字串要加“”。在此範例,當中輸入的是另一個函
式 ExpertMACD(Plot1),它是一個互動的說明文件,可以告訴你點選的 MACD 代表什麼意義或如何運用。當然
我們可以如此簡單的去寫說明功能:
#BeginCmtry
Commentary(“MACD 零軸以上為多頭,以下為空頭”);
#End;
對了,有一個事情你應該知道!TS2000i 無法處理雙字元的文字;也就是說它看不懂中文,所以我們無法
在程式中輸入中文字串,它將會以亂碼呈現。當然這包括了我們所談過的註解或以上的說明運用。
待續