1. 程式人生 > >程式化交易策略開發語言:EasyLanguage

程式化交易策略開發語言:EasyLanguage

一、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]]  [下單方法]
  • 交易名稱區分大小寫。