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 比較好。
最後的成果就會像這樣啦:
感謝D.K.大的說明,再問一下,所以上面的DK和DK-Day是指不同的Chart symbol嗎?(我的意思是把value1從名為DK的Chart傳到DK-Day的Chart)
回覆刪除我有成功將一個變數從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,再幫我解惑一下,非常感謝。
你是用 MC ? 版本是什麼呢?
刪除看了ADE Word說明檔,使用ADE傳變數前,我是不是要產生一個文字檔(檔名是程式碼所宣告的Class name),存放在C:\ADE\Classes?
回覆刪除應該不需要才對…
刪除D.K.大你好,想再請教ADE問題:
回覆刪除我是用Multicharts 7.4版,如果我開的是秒線,那ADE.GetBarInfo(Class, "DK-Day", 0, ADE.BarID, InfoMap);
這裡的0要改成?
難道說不能用秒線>__<...
好問題…
刪除在寫入的時候程式碼
Value1 = ADE.PutBarInfo(Class, "DK-Day", ADE.BarInterval, ADE.BarID, InfoMap);
把 ADE.BarInterval 直接改掉試試…
Value1 = ADE.PutBarInfo(Class, "DK-Day", 0, ADE.BarID, InfoMap);
這樣…然後讀的時候這欄也用 0 代入就好…也許這樣可以~你可以試試看
我把Put和Get都設成0...不行...>__<
回覆刪除那還是改回來… BarInterval
刪除然後看你要幾秒 k 就在讀取的那邊把 0 改成你設的 幾秒 試試囉…
你可以在秒K圖那邊把 BarInterval 這個數值 print 出來看看~
請問卷商版 可以用ade嗎
回覆刪除不行,因為券商版的把 DLL 的功能拿掉了…
刪除DK大您好
回覆刪除想請問一下如果是用share bar 或是Renko這種K線可以用ADE嗎?