分享如何寫自製C#下單程式?
本帖最後由 jerrywang168 於 13-3-18 14:23 編輯先感謝版上之前多位大大的分享
先廢話一些
之前本想用MC8+xDDE來下單
但是發現訊號源送到xDDE後再送到MC8還是慢一點點
(這一點點在快市時差很多點)
又想到之前用奇狐時請教過台灣代理商
他們說會有點慢是因為每個Tick系統都要從第一BAR從算一次
(MC有較好作法來自動判定是否需從第一BAR算
經過自己改其他大大的DDE程式後 決定自己來客製化
首先
修改M大釋出的xDDE+K大的nDDE Client程式
把其中的顯示目前TICK資訊的DATAGRID DISABLE(減少系統LOADING LAG)
再感謝D大的提醒
經過測試後發現可以完整接收EWINNER的即時DDE TICK資料
但是和期交所比較差很多(但是可以用了)
再來就是建立自己的K棒系統
因為是完全依自己需要打造
要求的是效能第一
所需要的指標 資訊源資料 也只接收所需的
因此在設計上就犧牲可攜性和擴充性(指對其他人使用時考量)
因為個人認為每當TICK進入系統就重算系統一次 太慢了
也是快市時的最大問題
反正我的策略也是以NEXT BAR OPEN來下單(停損停利除外)
那K棒的指標值就不用在當根K棒在跳動時一直重新計算
同時因為計算時所需的K棒數心理也有底 所以就建立了約1500數值的ARRAY來放K棒
(當然這是可改變的)
當K棒時間是新的分鐘時(以一分K為例)就計算前一K棒的指標值(只有此時計算一次)
再判定是否需要執行下單策略
jerrywang168 發表於 13-3-18 14:08 static/image/common/back.gif
再來就是建立自己的K棒系統
因為是完全依自己需要打造
要求的是效能第一
關於指標計算方式
採用類似MC 的POWERLANGUAGE 語言來開發
也就是自己的指標先從奇狐轉為MC的POWERLANGUAGE
這樣就有了比較自己開發程式指標計算值是否有誤的基準
為什麼不直接用奇狐呢 主要是因為奇狐內部有部份的函式
他只有使用方式 沒有細部實作可參考
但是MC的PL 有附很多的函式實作
比如計算MOVING AVERAGE
他就有寫出如何實作
但是看他函式就知道也是一樣從n根K棒之前開始重算
所以就針對他的計算方式 另外儲存所需資料
(用空間換時間 雖然只是不到1/1000秒 但是當TICK很多時 累計的時間是很多的
因為測試過即使每秒1000TICKS 目前的系統經過很多運算還是可以輕鬆達成
因為如果計算簡單的1000K的MA就要花點時間了)
如此就不用在FOR LOOP 中去運算了
舉例來說
計算10MA 標準算法是每個TICK都從前十K開始往目前的K棒去運算
總共是一個LOOP 十次運算
但是用空間來換時間就只要在前一K棒記住當時的前十K的總合
這一根K棒就把前十K的總合+目前的K棒收盤值 - 第11K的K棒收盤值 = 這根K棒的前十K的總合
這樣就是少了一個LOOP
在演算法學LOOP是很浪費的
個人經驗不論指標複雜度 大多在MC中的PL可以找到你所需的部份
再加以修改整合 應該都可以整合到這自制的系統
jerrywang168 發表於 13-3-18 14:23 static/image/common/back.gif
關於指標計算方式
採用類似MC 的POWERLANGUAGE 語言來開發
之後進行策略運算判定
有了K棒 有了指標
再加上其他所需資訊(這點個人認為和MC 奇狐就差很多了)
比如有人要算預估量 委買賣
就可以用簡單的IF ELSE SWITCH等來依你的需要判定了
當你有了策略結果當然就是執行下單了
網上也有很多參考資料(再次感謝其他網上GOOGLE到的大大分享)
很簡單的一試就連上期貨商了
(用C#比較麻煩一點點 找了較多資料 但是一試就OK)
目前還沒實作的是分析帳戶上有的倉位
就是依API去期貨商讀取倉位再分析
(因為有要其他大大分享多執行緒 才能再實作)
(主要是因為好像下單大師網站不見了 只剩原來部落格)
雖然您很用心
可是....你來市場應該不是來寫程式的..
我建議你還是多放點心思在策略....真的
因為我是過來人阿....
kidbaby 發表於 13-3-18 14:39 static/image/common/back.gif
雖然您很用心
可是....你來市場應該不是來寫程式的..
感謝您的分享
策略部份小弟已經實作了(勝率不是超高 但是可接受)
只是需要處理下單時避免被BLOCK LAG
可否請您指點
可以請教您如何在主程式(接收訊號再進行運算後)
另外一THREAD來處理下單和倉位問題
(C# C++ JAVA 能處理多執行緒地語言都可)
因為對Multi-Threading 不是很熟練
只會改程式來運用
請問你這個模組能夠回測嗎?
你有想過這麼複雜可以快多少? 0.5 sec ?
我之前寫過自己運算 parse 語法
之前compiler 沒學好寫起來真的很彆扭
但是在怎麼寫會比行之有年的 easy language 好?
自己寫會debug到死= ="
可能真的是我功力不足吧...
但是後來我想通了...
人的時間有限應該把時間花在應該花的地方
就這樣子過來人的一點點心得 kidbaby 發表於 13-3-18 15:45 static/image/common/back.gif
請問你這個模組能夠回測嗎?
你有想過這麼複雜可以快多少? 0.5 sec ?
給你一個讚~~
我也寫過自己的夢幻程式~ 用c#開三個執行緒,
一個接價, 一個運算, 一個畫圖,
接來的價格放到Queue裡面再取出來,
訊號來源是群益API, 挺不賴的, 不掉Tick,
可是問題來了~~~
這...這... 這... 和賺錢沒關係...
寫得再好也無助於心態的成長, 也無助於下單經驗的提升,
說白點, 就是有些鴕鳥, 活在自己的幻想世界中...
{:4_210:}
哀~ 想害一個人,就教他從輪子造起打造下單平台!
您如果想追求速度,那C#肯定不行啦,用VC++啦(但這個火坑又更痛苦了) 這裡還真是高手如雲。。。
不過前人說的很好,還是集中在策略。英文有句話,叫做 'reinvent the wheels'.
輪子早就發明了,為什麼還要在自己發明??
現有的平台太多了,當然都有他的問題,但是,你有把握會做的比他好嘛?
如果你覺得是策略語言問題,綁手綁腳,非得用C/VC++/C#, 那就選 MC。net 或是 Ninjatrader. (一定有其他的,但是我只熟這兩個。。)
kidbaby 發表於 13-3-18 15:45 static/image/common/back.gif
請問你這個模組能夠回測嗎?
你有想過這麼複雜可以快多少? 0.5 sec ?
1.回測的話是不需要的
因為我前面提過我用MC來作這部份
我的系統因為完全只給我自己用 所以要回測也不是難事只是給我自己看
2.快0.5秒就差非常多了
因為現在的快市差0.1秒就可能50TICK不見了
再加上下單就差很多了
為什麼要用自己的系統是因為怕萬一
我也知大多情形下都沒問題MC可能很簡單的開發
但是我用的策略實在是要應付那萬一被停損時用的
3.至於策略能不能獲利我自己清楚這是最重要的
謝謝您了
眼到手到哥 發表於 13-3-18 17:37 static/image/common/back.gif
給你一個讚~~
我也寫過自己的夢幻程式~ 用c#開三個執行緒,
可否請大大願意分享您的程式如何同時開三個THREAD且不影響效能
感謝
wldtw2008 發表於 13-3-18 18:35 static/image/common/back.gif
哀~ 想害一個人,就教他從輪子造起打造下單平台!
您如果想追求速度,那C#肯定不行啦,用VC++啦(但這個火 ...
W大 謝謝您分享很多好用的東西
我是用目前的系統測過了
一秒處理所有指標加NDDE接收可以上百個TICK沒問題的
這樣就夠我用了
因為只接收一個台指
如果W大您願意分享VC++的源碼如何處理多執行緒
就是同時能接收 處理指標 畫圖就好了
我也可改用VC++
因為說實在的小弟程式功力不佳 但是改寫功力還可以
要我寫很標準很棒的程式可能不如各位
但是寫可以用效能可用的應該還OK
balance 發表於 13-3-18 19:45 static/image/common/back.gif
這裡還真是高手如雲。。。
不過前人說的很好,還是集中在策略。英文有句話,叫做 'reinvent the wheels'....
b大謝謝您
前面我提過了我的系統只給我自己用 所以我不用考慮很多MC能作的功能
比如K大說的回測 複雜的程式語言等等問題
所有的指標我只是依我在奇狐或是MC上改寫好的原封不動改到我自己的系統
經過轉換幾個指標後 越來越順手了 只是也差不多都改好了
因為我實測MC+xDDE雖然沒漏TICK 但是收TICK還是慢了一點點
這不是我要的 加上我同時參考十幾個指標 所以效能上有點要求
所以只好自己動手作
大家何妨鼓勵鼓勵開版大從新打造交易系統的精神
也許是燕雀焉知鴻鵠之志