程式化交易策略開發語言:EasyLanguage
阿新 • • 發佈:2018-12-18
一、TradeStation開發環境:TDE
1.進入開發環境
2.字典
- 開啟字典
- 字典資訊:包含了所有的預留單詞和函式
3.輸出欄
- 輸出欄在驗證時會顯示語法錯誤
4.語法著色器
- 用於識別特定單詞分類,如預留單詞、函式、文字、和其他使用特定顏色設定的型別
5.預設屬性設定
- 用於設定已儲存或新建的策略顯示方式或元素計算的一般屬性
- 開啟方式:(“檔案”->“屬性”)或(“右鍵”->“屬性”)
二、EL語法
1.基本語法
1.單詞:一般分為5類
- 預留單詞(保留字):如Open、Close、Buy
- 函式:由單詞指定訪問EL研究儲存的公式(如:Average、RSI、Lowest)
- 使用者定義單詞:使用者在編寫過程中建立的單詞,可用於圖形命名、輸出、引數和變數名
- 非執行單詞:為了提高可讀性,在執行中會被跳過(如:of、the、at)
- 屬性詞:用於設定分析技術或策略的執行、計算規則(如:LegacyColorValue)
2.EL語法不區分大小寫,但使用者編寫程式時,區分大小寫的可讀性較好
3.語句及表示式
- 單詞是所有語言的基本組成部分
- 所有的EL語言工具和規則類似於英語口語的句式表達
- 數值表示式:指向或計算出數值(如:Volume*2)
- 邏輯表示式:比較兩個數值,得出真/假結論(如:Close = Open)
4.程式的運算順序
- EL編輯的程式在執行時,從第一行到最後一行
順序執行- 需要先執行的公式必須放在前面
5.程式從圖示的第一根K線計算到最後一根K線
- TS以K線為基本單位,以圖示上的Bars為分析基礎
- TS從上至下執行EL指令,從左至右逐個Bar處理,直到最大索引數(MaxBarBack)
- MaxBarBack為所有引用歷史資料的分析技術在計算之前需要設定的初始值,它限定最大的資料獲取量,即在初次計算時引用的最多歷史資料量
2.程式結構
- 語句必須包括4個部分:定義部、賦值部、控制部、執行部
- 程式4個部分的功能依次為:定義變數和引數->變數賦值->判斷執行指令的條件->符合條件就執行指令
定義部:
- 由計算機程式計算動態賦值,用“Var:”
定義- 引數由人工外部輸入,用“Input:”定義
- 陣列,用“Array:”定義
3.程式運算子
1.算數運算子
- + - * /
2.關係運算符
- 等於:“=”
- 不等於:“<>”
- < > <= >=
3.邏輯運算子
- and or
- 條件判斷同時使用時,必須加括號
4.賦值運算子
- =
5.標點符號與括號
- “;”:單個語句結束
- “,”:分隔專案
- “()”:設定初始值
- “ [ ] ”:用於指向K線歷史去資料,或替換圖形,或用於從陣列中提取資料
- “ “ ” ”:文字或標籤
- “:”:用於定義變數、引數
- “ { } ”:多行註釋,大括號中間的語句不執行
- “// ”:單行註釋
6.運算子的優先順序
- 括號 > 算術運算子 > 比較運算子、關係運算符 > 邏輯運算子 > 賦值運算子
4.資料資訊
- Open:K線開盤價
- Close:K線收盤價
- High:K線最高價
- Low:K線最低價
- Volume:K線交易量
- Ticks:成交件數
- Bids:委買量
- Asks:委賣量
- Date:K線的結束日期
- Time:K線的結束時間
以下在分鐘K線中使用
- OpenD:日開盤價
- CloseD:日收盤價
- HighD:日最高價
- LowD:日最低價
- VolumeDay:日交易量
三、EL的引數和變數
引數和變數是計算機程式計算時使用的一些數值。為了計算機執行時能夠計算和儲存這些資料,必須為其預留儲存空間。因此,必須對所有引數和變數進行定義並賦值。
1.引數
- 引數:在程式執行前由人工輸入的常數;
- 在開發交易策略和技術指標等計算機程式時,必須在程式開始部分對引數進行定義並賦值;
- 定義命令:"input:";
- 引數名稱可以用英文和中文,英文不區分大小寫;
- 引數後面緊跟小括號“()”,其中的資料為對引數設定基準值;
- 分號結束定義語句,標點必須都為英文字元;
- 引數名稱中間不能用空格中斷,但引數名稱之間可以加空格;
- 例:Input:PeriodSort(5),中期均線週期長度A(20),PeriodLong(60);
2.變數
- 變數:由計算機程式根據賦值公式計算動態更新;
- 定義命令包括:“Var、Vars、Variable、Variables”;
- 輸入變數的初始值:" () ";
- 例:Var:MaSort(0),中期均線A(0),MaLong(0);
- 變數型別:數值型(只接收數值結果值)、邏輯型(只接收邏輯判斷結果)、文字型(只接收字串);
- 三種變數的區分在於初始值,分別為(0)、(false)、("");
- 運算子前後的變數型別要一致。
3.內建變數
- 預先定義的可直接使用的變數;
- 數值型:var1~var99;
- 邏輯型:conditiond1~conditiond99。
4.數值的前值引用
- 以K線為基準,參考前值;
- [0]可省略,C與C[0]是相同值;
- 股票上升反轉(先前是跌落,現在開始上升):C>C[1] and C[1]<C[2];
- 股票跌落反轉(先前是上升,現在開始跌落):C<C[1] and C[1]>C[2];
- if C[1]<=MA5[1] and C>MA20 then buy(); 在前K線股票小與5日移動平均線,在當前K線股票大於5日平均移動值就買入;
- 在分鐘K線圖上使用日K線的開盤價、最高價等,如果要得到前日值,用"(1)"標示,"[1]"為前一根K線的。
四、EL的控制語句
1.if語句
- if語句必須和then一起使用;
- then後面不打分號,在執行語句結束後打分號;
- then後可跟一個組句:Begin End;
- 其他語句用法:(if then ~ else)(if then ~ else if then ~ else)。
2.for語句
- 用法:
For 迴圈變數初值 to 迴圈變數終值
Begin
End;
- 沒有break語句,若要中途退出迴圈,可通過給迴圈變數賦終值實現。
3. while語句
- 用法:
While 條件
Begin
End;
五、EL的函式
1.基本函式型別
- 簡單函式:只儲存當前值,但也可以引用歷史K線價格
例:計算10條K線的平均收盤價格並賦值給value1 value1=Average(Close,10);
- 系列函式:自動儲存自身先前的值並在每條K線上執行,會在計算中引用先前的函式值
例:將當前K線成交量新增到上一條K線的函式值,系列函式在每條K線上自動更新 VolTotal=VolTotal[1]+Volume;
- 多輸出函式:有些內建函式需要返回多個值,通過使用引數列表中的一個或多個輸出引數實現;內建多輸出函式對引數的命名通常以“o”開始,表明其是一個用於返回值的輸出引數。
2.數學函式和分析函式
- 數學函式:進行一般分析的函式;
- 分析函式:編輯程式時用於比較分析的函式;
- 保留字:在EL程式裡面具有特定功能的一些單詞。
3.下單指令
- 下單指令:EL的下單功能是通過下單保留字(Buy買入多單開倉、SellShort賣出空單開倉、Sell多單平倉、BuytoCover空單平倉)及其相關語句來實現的;
- Buy和SellShort作為新的開倉指令,但在開新倉之前將對其持有的相反倉位平倉,然後再開新倉;
用法:
- Buy [開倉名] [下單數量] [下單方法]
- SellShort [開倉名] [下單數量] [下單方法]
- Sell [開倉名] [from entry 開倉名] [數量 [Total]] [下單方法]
- BuytoCover [開倉名] [from entry 開倉名] [數量 [Total]] [下單方法]
- 交易名稱區分大小寫。