[TS懶人包] [保險服務]

2012年4月1日 星期日

ADE - All Data Everywhere for TradeStation 8 and Multicharts

剛好有人問到了二個 Chart 之間怎麼傳遞參數的問題…所以,就順便來寫寫關於 ADE 的教學吧。不過 TS 2000i 是不能用的…所以快升級吧…

ADE 是一個 TS 論壇上的高手開發出來的…能用到的功能實在太多…這邊就算單的講一下二個 Charts 間傳參數的方式~整個流程有點複雜,算是很進階的一課了,真的有需要的人再來玩會比較好。

首先,需要先下載兩個壓縮檔: ADE 和 ELCollection





下載完後,先解壓縮吧!



接下來的安裝步驟:

1. 將 ELCollections 資料夾內的 ELCollections.dll 放到 MC 的安裝資料夾內… (ex: C:\Program Files\TS Support\MultiCharts)

2. 打開 PowerLanguage 並把 ELCollections.ELD 匯入 (會匯入很多 Functions)

3. 在 C:\ 底下建立一個資料夾…該資料夾名稱為 ADE
C:\ADE

4. 在 C:\ADE 底下建立 Data 和 Classes 和 Code 三個資料夾
C:\ADE\Data
C:\ADE\Classes
C:\ADE\Code

5. 把剛剛從 ADE.rar 解壓縮出來的檔案放到 C:\ADE 資料夾內

6. 把 C:\ADE 資料夾內的 OHLCV.txt 檔案移到 C:\ADE\Classes 資料夾內

7. 打開 PowerLanguage 並匯入 AllDataEverywhere.ELD (一樣會匯入很多 Functions)

安裝流程就到這裡完畢了…如果你還想繼續走下去的話~那看來很有決心想要用一下 ADE…

再來就是程式碼了…首先,用到 ADE 主要是要在兩個 Charts 間傳遞參數…那簡單的說…就是 A, B 兩個 Charts 要傳參數,如果是 A 要傳給 B 的話,那就是要在 A 程式碼內把值「寫入」,然後在 B 程式碼內把值「讀出」。

先來看看「寫入」的程式碼:

Vars: Class("DK"), InfoMap(MapSN.New);

vars: var5( 0 ), var6( 0 ), var7( 0 ), var8( 0 ) ;

Value2 = Stochastic( High, Low, Close, StochLength, SmoothingLength1, SmoothingLength2, 1, var5, var6, var7, var8 ) ;

Value1 = MapSN.Put(InfoMap, "KDR", var7);
Value1 = MapSN.Put(InfoMap, "KDB", var8);

Value1 = ADE.PutBarInfo(Class, "DK-Day", ADE.BarInterval, ADE.BarID, InfoMap);


首先,第一行的 Vars 是變數宣告,這裡面宣告了 Class("DK") 和 InfoMap(MapSN.New)

InfoMap 的部份就照著用吧,而 Class 內的名稱則可以自己修改,你可以把這個名稱當成一個容器。

接下來兩行是計算 Stochastic Slow 用的,也就是慢速 KD 值。

再來的兩行 Value1 開頭的程式碼是把要的值丟進容器裡… MapSN.Put <-- 看到 Put 應該可以理解…就是把資料放進去的意思… 而後面帶的參數第一個就照著用…

第二個參數(比如說上面的 "KDR") 你可以看成在大容器內的小箱子…,而第三個參數就是要丟進去的值。

最後一行則是把 BarInfo 也放進去…這樣在拿資料的時候才不會拿錯…當然…第二個參數的 "DK-Day" 也可以自行修改名稱 寫入的部份大概就這樣了…應該是已經可以滿足大部份的使用需求。


接下來看一下拿資料的程式碼:
Vars: Class("DK"), InfoMap(MapSN.New);
Vars: DayKDR(0), DayKDB(0);

Value1 = ADE.GetBarInfo(Class, "DK-Day", 0, ADE.BarID, InfoMap);

DayKDR = MapSN.Get(InfoMap, "KDR");
DayKDB = MapSN.Get(InfoMap, "KDB");


首先,第一行的宣告是跟寫入時用的一樣的…要注意的是,Class 大容器的名稱需要和寫入那邊宣告的一樣。

第二行的宣告我是拿來記錄數值用的…

接下來的 Value1 是拿取資料用的程式碼…在寫入時我們最後寫入了 BarInfo, 而這邊就是先判斷一下 BarInfo ,再把相對應的資料拿出來

所以第三行程式碼這邊的第二個參數,就是要和上面寫入 BarInfo 的第二個參數一樣囉…比較要注意的是第三個參數…這個參數我們在寫入時用的是 ADE.BarInterval

如果你寫入時是開 5 分 K…那這邊讀取時的第三個參數就是 5,如果是 30 分K,那就是 30,因為我寫入時是用日線資料…所以這邊代入的參數就放上了 0。

最後兩行的 MapSN.Get (Get…很明顯的就是拿了…) 代進的參數就是小箱子的名子囉…

這樣就把參數從一個 Charts 傳到另一個 Charts 囉!很簡單吧~~~~(其實難的要死…)


想要做 Pair Trade、想要跑多週期、想要在程式內參考一些其它的市場資料的…都建議來用 ADE 比較好。

最後的成果就會像這樣啦:


12 則留言:

  1. 感謝D.K.大的說明,再問一下,所以上面的DK和DK-Day是指不同的Chart symbol嗎?(我的意思是把value1從名為DK的Chart傳到DK-Day的Chart)

    回覆刪除
  2. 我有成功將一個變數從Chart1傳到Chart2了,但有時Compile後右下會出現一個打叉的紅色方塊,訊號就從Chart2消失了(明明就沒有變動任何程式碼),紅色方塊文字如下:
    message: Error in study "訊號名稱"
    Company: "Bamboo"
    Error location: "ADE"
    Error category: "ADE Error"
    Short string: "ADE Error"
    Source string:
    "No data available for Class 'Chart1 symbol',Chart2 symbol,1min"

    (我是用D.K.大之前po的Pair trade程式架構,加進ADE這些傳變數的程式碼)
    如果D.K.大之前有看過這樣的Error,再幫我解惑一下,非常感謝。

    回覆刪除
  3. 看了ADE Word說明檔,使用ADE傳變數前,我是不是要產生一個文字檔(檔名是程式碼所宣告的Class name),存放在C:\ADE\Classes?

    回覆刪除
  4. D.K.大你好,想再請教ADE問題:

    我是用Multicharts 7.4版,如果我開的是秒線,那ADE.GetBarInfo(Class, "DK-Day", 0, ADE.BarID, InfoMap);
    這裡的0要改成?

    難道說不能用秒線>__<...

    回覆刪除
    回覆
    1. 好問題…

      在寫入的時候程式碼

      Value1 = ADE.PutBarInfo(Class, "DK-Day", ADE.BarInterval, ADE.BarID, InfoMap);

      把 ADE.BarInterval 直接改掉試試…

      Value1 = ADE.PutBarInfo(Class, "DK-Day", 0, ADE.BarID, InfoMap);

      這樣…然後讀的時候這欄也用 0 代入就好…也許這樣可以~你可以試試看

      刪除
  5. 我把Put和Get都設成0...不行...>__<

    回覆刪除
    回覆
    1. 那還是改回來… BarInterval
      然後看你要幾秒 k 就在讀取的那邊把 0 改成你設的 幾秒 試試囉…

      你可以在秒K圖那邊把 BarInterval 這個數值 print 出來看看~

      刪除
  6. 請問卷商版 可以用ade嗎

    回覆刪除
    回覆
    1. 不行,因為券商版的把 DLL 的功能拿掉了…

      刪除
  7. DK大您好
    想請問一下如果是用share bar 或是Renko這種K線可以用ADE嗎?

    回覆刪除

請留下您的大名…匿名者恕不回應…

Related Posts Plugin for WordPress, Blogger...