You are on page 1of 10

EasyLanguage 重要功能、指令及語法解析

‰ EasyLanguage 語法介紹
EasyLanguage PowerEditor 可提供程式編輯、顏色管理、語法檢查、線上輔助、程式檢察與線
上偵錯等多功能的整合式程式開發環境;而 StrategyBuilder 用以結合多操作信號,形成完整交易策
略;透過 EasyLanguage 程式「在 TradeStation 線圖中掃描資料」,即可完成回測。
交易信號的基本語法由許多「If (條件判斷式) Then (交易行動)」規則所組成,使用「If-Then」
的邏輯判斷式處理交易線圖上的回測,「條件判斷式」可由算術、比較或邏輯運算式組成,而「交易
行動」用以作建立部位,最簡單的交易行動如 Buy/Sell。例如, 「If Close > High[1] Then Buy Next Bar
at Market;」(或簡寫為「If C > H[1] Then Buy」可形成「若(If)今日收盤(C)大於(>)昨日最高價(H[1]),
則(Then)買(Buy)在當日收盤」。
本單元將詳細介紹 EasyLanguage 的語法,包括以下主題:運算子(算術、邏輯)與複合運算式、
數值變數與自定變數宣告、動態參數輸入、內建函數、區塊指令、買賣命令種類、多資料策略、客製
函數、環境條件與觸發條件之運用、相關輔助系統的使用等。

‰關於變數(不先講不知道,除非預設變數…)
常用變數包括邏輯值(True/False)與數值(Numeric)變數。
邏輯值變數可用 ConditionN (N=1..99)儲存;數值變數可用 ValueN (N=1..99,預設值為 0))儲存。
數值變數的使用,如:
Value1 = (High[1] – Low[1])/2;
Close > High[1] – Value1;
邏輯值變數的使用,如:
Condition1 = Close > High[1] + (High[1] – Low[1]) / 2;
Condition2 = Volume > Volume[1] * 1.5;
If Condition1 And Condition2 Then Buy Next Bar at Market;
Value1 = (High[1] – Low [1]) / 2;
Variables 則可以同時儲存邏輯值與數值,需做變數宣告同時可做起始值設定,如:
Variables: PreBarRange (0);
PreBarRange = High[1] – Low[1]
If Close > High[1] + PreBarRange/2 Then Buy Next Bar at Market;

‰算術、比較與邏輯運算子與複合運算式
1. 同時使用算術與比較運算子。
If Close > High[1] + (High[1] – Low[1])/2 Then Buy Next Bar at Market;
2. 使用複合運算式
Condition1 = Close > High[1] + High[1] – Low[1])/2;
If Condition1 Then Buy Next Bar at Market;
其中,Condition 變數可由 Condition1~Condistion99,預設值為 False。
3. 使用邏輯運算子(AND, OR)
Condition1 = Close > High[1] + High[1] – Low[1])/2;
Condition2 = Volumn > Volumn[1] * 1.5;
If Condition1 AND Condition2 Then Buy Next Bar at Market;

‰內建函數使用(在哪裡找?程式碼是什麼?)
EasyLanguage 中包含大量內建函數用於建立技術分析指標,例如:
「Value1 = Highest(Close, 5);」
可取得最近 5 天收盤最高。又如:
If Average(Close, 9) Crosses Over Average(Close, 18) Then Buy Next Bar at Market;
函數亦可於執行時才取得參數輸入(動態輸入),例如:
Inputs: FastLen(9), SlowLen(18);
If Average(Close, FastLen) Crosses Over Average(Close, SlowLen) Then Buy Next Bar at
Market;
使用 Input 指令可以藉由介面改變參數,並做參數最佳化。

‰多前提條件(Conditions)與多執行行動(Actions)的處理(也可藉由多 Signal 組合)


當買賣條件與其指令眾多時,可使用區塊指令(Begin…End),如:
Variable: CountTheBuy (0);
Condition1 = Close > High[1] + Range[1];
If Condition1 Then Begin
Buy Next Bar at Market;
CountTheBuys = CountTheBuys +1;
End;
又如:
Variable: BarCount (0);
If MarketPosition <> 0 Then Begin
BarCounter = BarCounter + 1;
If Close < Close[1] Then Begin
ExitLong Next Bar at Market;
ExitShort Next Bar at Market;
End;
End;

‰下單(Orders)種類(何時、何價、何量)
Buy 建立長部位;Sell 建立短部位;ExitLong 結清長部位;ExitShort 結清短部位。
買賣可在當日收盤或隔日開盤,分別如:
If Condition1 Then Buy; 與 If Condition1 Then Buy This Bar on Close;
相同,均為當日。
If Condition1 Then Sell at Market;
則以隔日開盤價交易。
此外,Or Higher,用於 Buy-Stop 與 Sell-Limit,例:
If Condition1 Then Buy at 45 or Higher;
表「>=45」則 Buy Stop。
If Condition1 Then Sell at 68 or Higher;
表「>=68」則 Sell Limit。
Or Lower,用於 Buy-Limit 與 Sell-Stop,例:
If Condition1 Then Buy at 33 or Lower;
表「>=33」則 Buy Limit。
If Condition1 Then Sell at 42 or Lower;
表「>=42」則 Sell Stop。
買進賣出可指定點數,分為 Point(為最小增減量,Minimum movement,在 EasyLanguage 中股
票以 0.001 之便量為 point)與 Big Points(期貨選擇權使用之,在在 EasyLanguage 中最小跳動單位對
應的價值衡量),如:
If Condition1 Then Buy Next Bar at High + 1 point or Higher;
If Condition1 Then Buy Next Bar at High + 1 Stop; (不寫預設為 Big Point)
也可指定量(Quantity),如:
If Condition1 Then Sell 100 Shares at 66 or Higher;
If Condition1 Then Buy 12 Contracts Next Bar at Market;
MarketPosition 用以確認市場部位狀況,1,-1,0 分別表示買進、賣出或無部位。可藉由繼續加碼
或連續減碼(pyramiding),分批進出,做資金管理。

‰前提(Setup)條件與進場(Entry)條件
交易條件之執行可分為環境設定(Set-up)與觸發(Entry),Set-up 用以確認觸發的前提條件,但並
不實際觸發行動;可以 Setup 條件評估市況,再由 Entry 實際下單。通常會以一個 Set-up「AND」
連結多個以「OR」連結的 Entry 訊號,如:
If FastAvg Crosses Above SlowAvg AND Close > Open Then Buy Next Bar at Market;
前面為 Setup 條件,後者為 Entry 條件。

‰進場信號(Entry Signal)與離場信號(Exit Signal)


最基本的交易策略應該包含進場策略以及停利加上停損的策略;部位結清條件可能為:「出場條
件滿足」、「停利」、「停損」或「市場過度震盪」。
建立部位方式可藉由 Buy 與 Sell。Buy 與 Sell 分別建立多頭與空頭策略,無論如何均會建立部位,
而非只是平倉而已,因此不能在同一個 Bar 中又 Sell 又 Buy。
在 Buy 與 Sell 動作被驅動時,可以在圖形上加上文字標籤,欲在圖上標註(Buy/Sell)買賣之理由,
例如:
If Close > High[1] Then Buy(“Higher Close”) at Market;
If Volumn > Volumn[1] Then Buy(“Volimn up”) 100 shares at Market;
If Close < Open Then Sell(“Down Bar”) at 48 or Lower;
藉此,也可指定要平倉的是對應什麼進場條件,當同時存在多組操作信號時,就不會全部平倉。
如:「If Close > High[1] Then Buy(“CloseUp”) Next Bar at Open;」與以下賣出訊號對應:
If Close < Low[1] Then ExitLong From Entry (“CloseUp”) Next Bar at Market;
藉此,可讓多組買賣訊號同時存在。
至於部位結清部位,可使用 ExitLong 與 ExitShort 分別結清長部位與短部位。出場訊號範例如
下:
If Condition1 Then ExitLong This Bar on Close;
If Condition1 Then ExitShort Next Bar at Market;
以上作法將結清所有多頭或空頭部位,但由於在交易過程可能陸續建立多次買進部位(Open
Order),而每次買進部位又交易多個單位(Contracts 或 Shares),例如 3 次交易,每次各建立 5 個
Contracts,則可用「If Condition1 Then ExitLong 2 Constracts;」語法,將會讓 3 次交易各剩下 3(5-2)
個 Contracts;而「If Condition1 Then ExitLong 2 Constracts Total;」語法,將只會結清第一次交易
的 2 個 Contracts;亦即,第一次交易剩下 3 個 Contracts,而其他兩次交易剩下 5 個 Contracts。

‰自訂函數(Custom Function)
EasyLanguage 中包含大量內建函數,使用者也可自訂函數。當使用者希望撰寫一個判斷是否連
續 3 天上漲的程式,可以寫成:
Variable : CloseUp(False);
CloseUp = Close > Open;
If CloseUp[1] AND CloseUp[2] AND CloseUp[3] Then Buy Next Bar at Market;
但如果要彈性的設定天數,可以寫自建函數,程序為以功能表「File¾New」在圖 1 視窗中選擇
「General」分頁夾,選擇「Function」,按「Ok」鍵,即可帶出圖 2 視窗,給予自建函數一個名稱
,按「Ok」鍵,即可進入自建程式
Name(如,_CloseUps),並設定函數輸出資料型態為「TrueFalse」
編輯視窗。Y=f(x)
在程式編輯視窗中輸入以下程式碼:
Input: Length(Numeric);
If CountIf (Close>Open, Length) = Length Then
_CloseUps = True
Else
_CloseUps = False;
圖1

圖2
「Verify」(F3 按鍵)無誤後,即可使用。例如,寫一個 Signal 程式如下(命名為「_CloseOpen」):
If _CloseUps(3) Then Buy Next Bar at Market;
「Verify」(F3 按鍵)無誤後,進入 StrategyBuilder 建立一名為_UpTrend 的操作策略,此策略以
「_CloseOpen」信號作為多頭部位進場條件,再選擇「Fixed Bar Exit」為多頭部位出場條件。
最後,進入 TradeStation 中,選取分析線圖後,引用此策略進行分析,即可完成,如圖 3 所示。

圖3
‰引用多資料(Multi-data)來源的交易策略(在哪裡設定資料序號)
交易的執行可能參考一個以上的資料來源,例如某股票(Data1)買賣依據指數(Data2)相對決定,
語法如下:
Condition1 = Close of Data1 > Close[1] of Data1;
Condition2 = Low of Data2 < Low[1] of Data2 AND Close of Data2 > Close[1] of Data2;
If Condition1 AND Condition2 Then Buy Next Bar at Market;
又如,透過以下語法取得特定資料來源的資料,
Value1 = Average(Close, 10) of Data2;
主要 Data Stream 為 Data1,Data2~Data50 作為輔助 Data Stream。

‰進階語法與資料型態
1. 文字資料(Text Values)
Variables: MyString1(“”), MyString2(“”);
MyString1 = “A series of charters”;
MyString2 = “Kuas”;
MyString3 = MyString1 + MyString2;
又如,
MyText = “Stock Name:”
Print(MyText, GetSymbolName);
將可在 MessageLog 出現「Stock Name:TTXN」。
2. 「If…Then…Else」進階程式結構
例:
If Close > Close[1] Then
Buy 20 Shares at Market;
Else
Sell 10 Shares at Market;
End;
例:
If Close > High[1] Then Begin
Value1 = 10;
Condition1 = True;
End
Else Begin
Value1 = 20;
Condition1 = False;
End;

3. 進階 Loops 結構
For Value1 = 0 To 5 Begin
Actions;
End;
Variable: MyValue(0);
For MyValue = 5 DownTo 1 Begin
Actions;
End;
以下為「Average」Function:
{*******************************************************************
Description: Simple Moving Average
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), Length(NumericSimple);
Variables: Sum(0), Counter(0);
Sum = 0;
For counter = 0 To Length - 1 Begin
Sum = Sum + Price[counter];
End;
If Length > 0 Then
Average = Sum / Length
Else
Average = 0;
4. 「While…Begin」指令
寫一名為「_VolumeWeek」的 Indicator:
Variable: DaysAgo(0), TotalVolume(0);
TotalVolume = Volume;
DaysAgo = 1;
While DayOfWeek(Date) > DayOfWeek(Date[DaysAgo]) Begin
TotalVolume = TotalVolume + Volume[DaysAgo];
DaysAgo = DaysAgo + 1;
End;
Plot1(TotalVolume);
Date 保留字用以傳回目前的 Bar 的日期,例如 1999/01/07,則傳回 990107(若在 2000 年後,例
如 2001/3/4,傳回 1010304)。
5. 陣列(Arrays)變數
例如:
Array: Prices[3](0);
宣告名為 Prices 的陣列變數,包含 3 個 Element,初值均為 0。值的設定如下:
Prices[1] = 100;
Prices[2] = 200;
Prices[3] = 300;
Array 常用以儲存不同 Bars 的值,Close、Volume 等亦為 Array。

‰策略解析舉例(還可再找「RSI Oscillator」、「TrendLines Automatic」)


藉由 EasyLanguage 語言可以設計交易信號,組合交易信號則形成交易策略,以下以「Mov Avg
Crossover」策略為例,解析策略的組成。此策略以「黃金交叉建立多頭部位,以 3 日(預設值,可更
改亦可最佳化)追蹤停損結清多頭部位」,其為系統內建的策略,透過現成策略的解析,可以學習
EazyLanguage 的語法。欲打開交易策略,可透過功能表「Go ¾TradeStation StrategyBuilder」的操
作(即進入 TradeStation 的 StrategyBuilder),打開如圖 1 的視窗。

圖1
在圖 1 中選取名為「Mov Avg Crossover」的策略,按下「Edit」按鍵,可打開「Strategy Properties」
(即策略屬性)的視窗,可在不同分頁夾中作相關設定。

圖2
圖 2「General」分頁夾可以設定,策略名稱(Name)、策略註解(Notes)、策略分析最大前置資料
需求筆數(Maximum number of bars study will)。
圖3
圖 3「General」分頁夾可以觀察策略係由哪些交易信號組成,不同信號提供的交易行動(Long
Entry、Long Exit、Short Entry、Short Exit 等四種)設定,在此透過「Add」按鍵,亦可繼續增減策
略的信號組成,使用「Remove」按鍵,可移除既有的操作信號。

圖4
圖 4「General」分頁夾可以觀察組合策略的交易信號包含哪些輸入(Input)參數,並可做更動。

圖5
圖 5「General」分頁夾可以設定是否可以允許在現有部位繼續加碼(預設為不可),若設定為可繼
續加碼(選取圖 5 的檢核框),則可繼續設定是否允許在同一交易信號啟動的部位上加碼,或只允許在
不同交易信號啟動的部位上加碼。

`
圖6
圖 6「General」分頁夾可以設定最多未結清部位數以及每一部位最大合約數。
由圖 3 可知,此交易策略係由「MA Bullish Crossover」與「Trailing Stop LX」兩交易信號(Signal)
組成,欲了解這兩個信號的 EasyLanguage 原始碼,可回到 EasyLanguage PowerBuilder 中,使用功
能表「File¾Open」操作打開圖 7 的視窗,下拉選取「Signal」類別。分別找到此兩 Signal 檔案,以
「Open」按鍵打開,即可看到原始檔案。

圖7
「MA Bullish Crossover」交易信號的程式碼如下:
{*******************************************************************
Description : Moving Average Crossover (2 Line) Long Entry
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(Close), FastLen(9), SlowLen(18);
If CurrentBar > 1 AND AverageFC(Price, FastLen) Crosses Above AverageFC(Price, SlowLen) Then
Buy ("MAC") This Bar on Close;
「Trailing Stop LX」交易信號的程式碼如下:
{*******************************************************************
Description : Trailing Stop Long Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Length(3), ShowText(False);
Variables: OrderPrice(0), StopText(0);
OrderPrice = LowestFC(Low, Length);
ExitLong ("Trl") Next Bar at OrderPrice Stop;
If ShowText AND LastBarOnChart Then
StopText = ShowLongStop(OrderPrice);

You might also like