Google Analytics

顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2015年8月19日 星期三

C# SP Trader API 程式交易編程進階教程 (1)

C# SP Trader API 程式交易編程進階教程 (1)

以下課程暫定8月19日(周三)晚上11:00 - 12:00pm 網上教學

學習技巧 : 針對有編程基礎學員, 教授如何配合SP Trader API製作簡易即市自動交易程式 , 包括報價, 下單, 以及獲取成交資訊 , 包括PPT及源碼
                                   
範例 : (1)開市30分鐘突破恆指期貨買賣系統
                                   
費用 : 每位 HKD 400

費用需最遲於8月13日晚上9時或之前轉帳至HSBC A/C  491-203493-833 並電郵通知


2015年6月1日 星期一

答讀者有關SP API問題(1)

由於筆者近數月以及未來一段時間都忙於為某在線劵商舉辦一些在線講座, 自家的課程倒少了時間搞, 也積壓了一些查詢, 為此向引起不便的讀者表示歉意, 有關課程的安排請留意博客更新.

有位讀者查詢有關SP API報價更新時間問題.其實這個在相關文件已找到答案,在其定義的調用函數會返回一個包含更新時間的結構, 問題是這個時間直接印出來會是一個很大的數字,在SP API文件上亦沒清楚說明.其實該回傳數字是一個Unix Time (或叫Epoch Time, 直譯大紀元時間), 這個數字是以1970年1月1日為起點渡過了多少秒數.要轉成我們看慣的標準時間一點也不難,在網上也很易搜到相關可用的現成編碼.

有關SP API的更新頻率, 筆者之前也已測試過, 大約1秒3-5次,其實跟其DDE的更新頻率差不多, 是否需要用API方式拿價, 值得考慮.
http://tradealgo.blogspot.com/2014/02/sp-trader-metastock5.html

該讀者另一問題是想把相關的價位更新顯示到圖表上,基於C#的繪圖程式庫很多,如屬開源的比較多人用是一個叫ZedGraph 的組件,可到http://sourceforge.net/projects/zedgraph/下載. 可以設定股票圖樣式, 下載中附有簡單範例, 該可滿足到簡單的繪圖需求. 如果要複雜的, 那麼可能需要一些付費的繪圖程式庫.

由於筆者時間有限, 而且認為需求有限, 故不打算花精力整成課程.

不過筆者認為更佳的解決方法, 是把價位更新直接寫入現成的技術分析軟件, 像Metastock , Amibroker 或Multicharts等, 利用該等比較強大的圖表功能,會比自己"再發明車輪"來得實際 .

有興趣較深入了解的讀者可到 "如何開發從SP Trader 接入數據到 Metastock"(1)-(7) 了解.

2014年8月30日 星期六

C# SP Trader API 程式交易編程進階教程 (2)

C# SP Trader API 程式交易編程進階教程 (2)

以下課程暫定8月29日(周五)晚上11:00 - 12:00pm 網上教學

學習技巧 : 針對有編程基礎學員, 教授如何配合SP Trader API製作簡易即市自動交易程式 , 包括報價, 下單, 以及獲取成交資訊 , 包括PPT及源碼
                                 
範例 : (1)C# SP API 程式獲取不同期貨合約報價 ,並寫入檔案. 報價在Excel中展示 , 可即時下單, 並展示成交清單.
                                 
費用 : 每位 HKD 350

費用需最遲於8月22日晚上9時或之前轉帳至HSBC A/C  491-203493-833 並電郵通知


2014年4月16日 星期三

如何學習MT4程式交易(4)

init()完成設定後, 如何畫指標就靠 start()來完成.

在start 初段會見到一個Bars的"變數" , 但細心的讀者會發現這個"變數"並沒有設定過, 其實這個變數是由MT4自動設定的, 數值就是這個圖上的Bar數,

 if(Bars<=Tenkan || Bars<=Kijun || Bars<=Senkou) return(0);

如果Bar數少於這些參數值, 當然也就沒東西可畫了

int    counted_bars=IndicatorCounted();

這個差不多是固定的起手式, counted_bars 被賦予上次計算後指標值不變的Bar數 , 這減少需重新計算的數目

for(i=1;i<=Tenkan;i++)    Tenkan_Buffer[Bars-i]=0;

剛載入時, 初始短觀線的陣列的值. 注意最左方的index為Bars - 1

  i=Bars-Tenkan;

2014年3月20日 星期四

如何學習MT4程式交易(3)

就以內帶的Ichimoku指標為例. 這裡就抽重點略說一下

#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_color2 Blue

開頭這幾行就是設定一些指標特性, 像這個指標有7個小指標 , 故設定indicator_buffers為7. 第一個指標紅色 , 第二個藍色 ,..

extern int Tenkan=9;
extern int Kijun=26;
extern int Senkou=52;

設定輸入變數及預設值

double Tenkan_Buffer[];
double Kijun_Buffer[];
double SpanA_Buffer[];

2014年3月19日 星期三

如何學習MT4程式交易(2)

MT全名metatrader, 是一間MetaQuotes的俄羅斯公司的外匯交易及分析軟件, 在MT4版本後開始廣為全球証劵行使用, 也發展到外匯以外的數據輸入, 如貴金屬 , 指數及商品差價合約(CFD). 2010年推出MT5, 但由於未能向後兼容, 仍未有太多証劵行升級, 故在本地市場上仍見以MT4為主.

MT 跟Metastock 是亳無關係的, 不要混淆. MT 從一開始設計就沒打算接入任何第三方的即市數據, 所以你不會看到有像Metastock , Amibroker , Ninja等有數據plugin可以選擇.不過如果是歷史數據 , 那還是可以透過腳本讀入, 從而運用其他工具分析.

說到這裡就先總結一下 : 不要再問筆者可不可以用MT4炒期指, 原因你懂了吧.

MT4最好是用來學習外匯, 貴金屬和其他他們有提供的差價合約(CFD)產品交易, 主要是MT4已帶有頗長期間的歷史報價資料. 這些資料都是由一間英國經紀商Alpari提供的, 所以分析出來的結果未必百分百跟用自己經紀商報價的完全一樣, 特別是買賣差價的分別. 不過在高流通產品上應該差別不大. 筆者之前已示範過把其中的歷史數據匯出至Excel 回測, 如果不用匯出, 也可以用其自帶的回測工具去做, 熟識Metastock的讀者應不會太難掌握 .

這些工具像指標, EA, 腳本可以在導航(Navigator )視窗找到, 要觀看/編輯他們的內容, 可在其附帶的MetaEditor中完成. MetaEditor 功能不只是一個文書處理器, 還有編譯和除錯工具, 比Metastock的要強多, 比VBA的亦稍勝, 減少浪費在一些無聊錯誤的時間, 值得讚賞

MT4這些工具的編程語言叫MQL4 , 如果寫過一般編程語言像C#, VBA等的將發現MQL4很熟悉 , 因為它們的語法和結構都很近, 像變數定義, 矩陣, 回圈等的架構都一樣, MQL4 的檔案分幾類, 分別是mq4, ex4 及mqh . mq4 就是程序源文字檔, 即Source Code. ex4 是編譯後的二元檔, 供MT4執行, mqh 跟mq4很像, 它是把可以被其他程序使用的常用的函數/程序源碼放在一個集中的地方(Include),其他程序要使用時把它引入, 有點像Java的Import 指令.



2014年3月17日 星期一

如何學習MT4程式交易(1)

近日得悉新鴻基推廣他們的MT4 外匯交易平台, 特地瀏覽一下, 看後沒什麼驚喜, 或者可說有點失望. 老實說, 要玩MT的也不會等到現在. 某些證券商如海通早幾年前也推過MT4 , 不過只限於貴金屬. 而且只限於把MT4當成他們另一個有點現成指標和功能多點的交易介面, 今次新鴻基的介紹錄象中基本上也是這個方向, 也看不出他們對這個平台可以有什麼支援. 希望他們可以多放一點資訊(例如深入一點的功能介紹, 如DDE, proxy設定, 歷史數據中心,回測 , 程式資源等等), 起碼海通都放本使用手冊上去.

當然如果已熟習在網上找資料的也不用等他們吱牙膏(或許沒下次了~)的放資料上去. 而新鴻基始終沒有發展一套下單的api, 對有志自動交易的投資者始終美中不足. 其實單看各大劵商對sp api的支援也已了解他們對自動交易的態度. 現在多了MT4做他們的外匯,唯一好處是在一個比較普遍而功能較強的平台上可以直接以他們的數據看盤和分析, 然而他們又只是開通了外匯, 另外歷史數據應該不是他們自己的, 所以也就是用回測分析出來的結果不代表實際運行在他們報價上的結果.

有關錄象可看http://shkforex.com/demo_video/MT4_video_manual_ipad.mp4

其實MT4 在國外是盤"可觀的生意" , 皆因不少程序員/開發者都靠這些去賺點外快(在IB也有同樣的情況..) , 每年MT都有自動交易大賽, 大中華地區特別是香港感覺是欠缺這些用戶群組交流, 也許跟這裡程式交易未成熟有相當關係.

其實要學習MT4的工具和程式交易也不是很難, 特別是有其他類似軟件經驗(像Metastock , Amibroker 等)的該較易上手. 編程方面有點底的從指標編寫學起, 也不難上手. 其實MT4本身已包了不少像MA, RSI之類常用標準的腳本, 可以作為初階, 掌握一定功力後再去研習script和EA. 要編寫的sub也就只是init(), start()及deinit() 3個, 主要思路就是如何把指標值分配到不同的buffer然後顯示出來. 多觀摩應該也可以寫/改一點.


筆者近日不約而同收到關於想連接MT4到SP 的查詢,其實筆者有點奇怪,因為MT 跟SP 是交易不同的產品,一個是做外匯/差價合約 , 一個是做交易所期貨 ,連在一起有什麼意思呢?就等於看著外匯期貨的價格去炒外匯現貨, 那為什麼不直接用SP 價交易 SP , 或MT價交易MT ? Anyway, 如果真的是要這樣 , 技術上是可以做到 , 也可以有幾種方法 , 其中一種就是用筆者連接sp和metastock的方法, 只要MT4 的EA會在信號發生時產生alert, SP / 其他交易介面就可以透過偵測這個alert而下單. 有關詳細可參看筆者最近上載的youtube視頻






2014年2月28日 星期五

如何開發從SP Trader 接入數據到 Metastock(7)

最後最後, 測試一下從SP 交易終端直接拿DDE 與從SP API直接拿報價比較, 粗略發現報價頻率相約, 即1分鐘~150更新, 失真率小 , 經metaserver 出來的多出報價該為其以較高頻率監察報價源, 也說明metaserver該可勝任更高頻率的報價更新.





最後最後, 比較一下SP API寫入metastock data再同時分別被Amibroker 及 Metastock 讀取, 發現並無數據鎖上問題, 可以一份數據同時給多個分析程式應用, 亦可以接上筆者開發的 SP 下單機(簡單/進階版), 即使沒有劵商API的開放.


2014年2月25日 星期二

如何開發從SP Trader 接入數據到 Metastock(6)

關於數據接入, 近來寫到這裡也差不多. 實踐在於真正動手比較思考, 可惜是筆者接觸過的經驗上, 不少散戶由於技術和知識的局限, 不是容易做到, 故對於一些概念無法驗證, 也就只好道聽塗說.

最簡單的實時接入外面報價到Metastock的方式, 筆者還是推薦以Metaserver + DDE方式最為簡易, 又不失準確性和彈性. 一來不用依靠API ,技術門檻較低, 二來錄取出來的效果以及數據檢視, 均不遜色, 什至比API方式更新更多. 而同時又無閃圖的問題.

筆者就此錄製了Metaserver + DDE 接入 sp trader 及 mt4 的報價到metastock的影像, 就視頻所見, 由於使用metastock 本身的串流式更新, 而非透過外掛refresh, 圖表展示得更平順, 透過downloader 查看報價記錄, 再比較以SP API及metalib 記錄的數據, 會發現metaserver 送出報價的頻率什至比api的更頻密.


2014年2月21日 星期五

如何開發從SP Trader 接入數據到 Metastock(5)

在如何開發從SP Trader 接入數據到 Metastock(2)中, 提及Metastock 數據接入開發的難處及近似解決方案, 今天就示範一下其中一個較廉價的方案.

筆者透過SP API獲得實時報價並透過Metalib API建立及寫出Metastock 制式的日內tick報價, 筆者以bid-ask的中間價為報價寫入 , 並在metastock 開出圖表觀察 , 當然用家亦可以加上各項指標或買賣專家工具. 雖然metastock號稱能同時更新100張圖表, 不過要考慮到tick數據要求高的處理能力, 筆者建議不要同時開太多, 不然會有明顯閃圖, 更新延誤以至Metastock當掉的情況 , 當然也要審視硬件 ,是這樣就行了 ? 當然沒那麼簡單. 寫入的數據是不會實時更新到圖上, 故(理論)上要不斷的按'refresh data'才能看到圖表隨市況變化 , 透過腳本(script)或第三方工具(如筆者示範中的小工具) , 就可以接近實時看到變化. 


2014年2月18日 星期二

如何開發從SP Trader 接入數據到 Metastock(4)

俗語說得好, "Garbage in , Garbage out" , 要接入數據作交易用途, 當然要確定數據的完整及準確性. 成交數據傳過來是一個或數個打包了的Tick為單元, 再由交易終端整理至不同周期顯示出來. 一般大部分投資者的數據並非由交易所直接傳來, 而是經由經紀(Broker)轉送 . 不少人都分不清, 以為從經紀得來的Tick數據報價就是準確 , 千方百計想從中抓取, 到頭來只是浪費功夫~

要知期貨/股票交易是在交易所進行的, 最準確的交易資料一定是在交易所,如果你是要做高頻交易(HFT)或很精確的套利, 那你要專線直上交易所才行, 經由經紀轉發的已是給"處理過"的信號, 已有不同程度的失真和延誤. 

最常見的處理過就是丟失的的信號, 這可以由於經紀自己再打包分時而引致, 如果觀察周期長的, 那麼差異一般可以略去, 如果周期很短的(e.g ms), 那高低開收及成交量的分別就較明顯. 但這些問題其實對散戶影響不會很大, 因為大概不會有散戶要在1秒內作幾千宗不同的交易吧. 所以筆者一向都對追求完美數據的行為不是很認同. 

筆者就以SP 報價作一示範 , 透過API抓取幾個不同外期的數據作比較分析, 可看出裡面都有沙石. 相關過程可見以下視頻


2014年2月15日 星期六

如何開發從SP Trader 接入數據到 Metastock(3)

筆者月底將舉行一場Excel VBA 程式交易編程進階課 , 是關於即市四度空間(market profile)及xo圖表, 其實這個班筆者也教了很多次, 筆者也嘗試不定期改變增減一下內容, 增加新鮮感. 比如考慮加入盤後數據畫圖, 記錄定格瞬間形態及回放 , 又或即市控制中樞辦認及TPO計算, 即市形態分辨等等, 有些比較簡單的可能加進同一班, 涉及另一範圍或更高技巧的可能另開新課程 , 有興趣的讀者可以留意.

辦這些課程的難處主要在學員程度的參差與期望, VBA 是比較易上手的編程語言, 也有不少add-in 或開源元件擴展功能, 然而要達到像商業級分析軟件的彈性和功能是不大可能, 畢竟人家是大制作, 另外一些比較強大的功能(像多線程處理)需要另外一些語言工具(如c# , Shell Script), 又或可能需付款的SDK , 這就比較難處理 , 也可能努力準備一輪功夫卻無人問津的情況 , 在這個難易及市場反應之間不易拿得準. 

2014年2月8日 星期六

如何開發從SP Trader 接入數據到 Metastock(2)

這些不同開發者提供的SDK , 很可惜, 嚴格來說也不是實時接入 , 一般理解的實時接入 , 是透過串流方式把數據異步輸入, 並觸發圖表更新(如有) . 那麼資料及圖表的更新就接近同步. 著名供應商ESignal 就是其中表表者. Metastock 的實時串流接入 , 先透過廠商自己的winros 程式把報價打入Metastock Data Server , File Server 記錄報價再觸發圖表更新新增部份. 然而, 這些串流接入的介面技術細節 , 就是在官方的SDK也沒有披露 , 因此幾乎沒見到有其他串流寫入的SDK出現, 所以像ESignal 那種真正串流輸入的實時方式在第三方特別是開源的SDK實在不多見(筆者到目前為止還沒發現). 這些SDK所提供的工具只是把數據實時寫入檔案, 因此如果你的數據源是準確的, 你所得到的數據是實時準確的, 然而你需要自行重載圖表才能看到更新的部份, Metastock 是不會因數據檔更新而自動實時更新圖表的.

2014年2月7日 星期五

如何開發從SP Trader 接入數據到 Metastock(1)

新的一年先祝大家股運亨通, 筆者前段期間開點小差, 積壓了一些有關課程及編程方面的查詢 , 其中有相當部分關於透過SP Trader拿價接入Metastock的. 筆者這段期間也對Metastock 的數據接入方法作進資料搜集及研究綜合, 在此回應一下.

其實整個流程原理一點也不複雜 , 從SP Trader API 獲得報價後寫進Metastock日內報價的格式, 再觸發圖表更新. 難就難在一些技術介面的接合以及十分少公開可查的官方文件技術說明及開發工具 , 特別是串流式接入的部分, 基本上連官方SDK文件都沒有看到有篇幅提及開發細節. 也因此有相當一部分的這些第三方數據接入工具並非真的完美的實時接入 , 特別是觸發圖表更新的部分. 

2013年9月6日 星期五

SP Trader API (6)

掌握C#/C++ SP Trader API 的效率, 配合Excel VBA的靈活 , 加上一款合意的分析/繪圖軟體(e.g Metastock , MT4, Amibroker ,TS ...) , 對一個散戶來說已可照顧到不少程式交易的細節實現 , 而又不會浪費之前開發的努力/重用之前開發的思路.

透過SP Trader API(或其他交易商API), 可以更有效率的獲取報價, 成交資訊 , 以及在市場下單, 主要由於C#/C++/Java 強大的多線程功能及執行速度 ,同時自己組合要用到的部份可以省卻直接打開SP Trader 工作的負荷 , 在電腦資源運用得更省. 

這比使用SP DDE接去Excel 有優勢. 首先API的速度較快和損耗比較小, 這對需要比較高頻和精確交易的投資者尤其有用, 另一方面SP DDE的使用, 正如之前文章所說, 比較有限制, 特別在下單及獲得成交資訊方面, 技術說明亦不是很充足.

而把SP API接去Excel 又比單以一般程式語言開發SP API的交易程式開發更容易 , 更省時. 試想想要參考SP 提供的範本改成一個XO圖雙頂雙底或突破交易程式, 需要多花多少時間人力? 單是加入股票圖以及增益分析 , Web Query 等, 在Excel 只需數個步驟便可以有個可用的初型, 要把同樣的東西實現在純C#/C++/VB/Java 上要花的功夫何止數倍. 而且要加減或修改交易思路亦花功夫. 下圖是筆者曾在Excel實現過的交易介面 ,讀者可衡量如轉用C#/ Java等來實現的功夫. 這過在SP API 面世前的Excel 交易程式, 只需透過局部改變就可以接上C# SP API介面, 這比重新開發更化算, 也達到重用的效果.