COCO研究院

 找回密碼
 註冊
搜索
樓主: alexliou

[API] 群益API 2.13.7 C#實作

  [複製鏈接]
 樓主| 發表於 17-10-13 19:25 | 顯示全部樓層
程式還有一個會出錯的地方 : 取消停損單(單子會取消, 但委託簿卻沒有反應最新的狀況)
這是因為停損單取消成功後,  程式會立即向主機查詢最新停損單狀態
但因為時間間隔太短, 主機還在處理停損單的狀態, 所以回復一個 QUERY_IN_PRPCESSING的錯誤訊息,
導致程式無法更新停損單狀態.
Remedy是 在取消停損單後, 讓執行緒暫停個一小段時間(say 1.5秒鐘, 時間長點比較保險)再去更新停損狀態

最簡單的修改是在 CancelOrder() Method 加入以下紅字修正:
    .    .
    .
else if (orderType == "停損單")
            {
                code = SKOrder.CancelFutureStopLoss(User.ID, false, User.FutureAccount, seqNo, "STP", out string message);
                WriteMessage("Order", "CancelFutueStopLoss", code);
                if (code == 0)
                {
                   Thread.Sleep(1500);
                    UpdateStopOrders();                  
                }            
            }

老實說, 讓執行緒pending 個一秒半 , 對一個分秒必爭 的 Trader 而言, 並不是個太理想的辦法

另外兩個做法是:
1. 設定一個Timer, 使得要求更新停損單(UpdateStopOrder)的Call在取消停損單後一段時間再執行
2.解析傳回的錯誤訊息, 如果內容包刮"取消" 及委託書號, 則解讀為停損刪單成功
這兩個做法, 程式要怎麼修改, 就留給客倌您自己了


發表於 17-10-18 15:58 | 顯示全部樓層
期待已久的Alex大大的新版報價終於出來了,目前CoCo不夠,無法下載,但先大推一下
發表於 17-10-18 18:01 | 顯示全部樓層
lawlu 發表於 17-10-18 15:58
期待已久的Alex大大的新版報價終於出來了,目前CoCo不夠,無法下載,但先大推一下 ...

你確定錢不夠下載 ?再檢查一次~

評分

參與人數 1金錢 +2 收起 理由
cukie + 2 按一個讚

查看全部評分

發表於 17-10-19 10:09 | 顯示全部樓層
本帖最後由 jepaty 於 17-10-19 10:27 編輯

萬分感謝TrendRover大大幫忙 目前我抓下來使用Visual Studio 2015 編譯 出現了10個錯誤訊息還在努力debug中.....我也會把版本改成Visual Studio 2017希望可以有好消息 謝謝各位前輩幫忙
error.png
發表於 17-10-19 15:52 | 顯示全部樓層
jepaty 發表於 17-10-19 10:09
萬分感謝TrendRover大大幫忙 目前我抓下來使用Visual Studio 2015 編譯 出現了10個錯誤訊息還在努力debug中 ...

你把那些變數定義移到外面的scope去就可以了,我是用vs2015 改一下就可了


擷取.JPG
 樓主| 發表於 17-10-19 16:26 | 顯示全部樓層
本帖最後由 alexliou 於 17-10-19 16:28 編輯

使用VS 2015會出現編譯錯誤的地方 大多是因為  out variable 沒有事先宣告
這是因為我使用了C# 7.0的語法 修改為先行宣告就可以了
https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/



發表於 17-10-19 17:15 | 顯示全部樓層
alexliou 發表於 17-10-19 16:26
使用VS 2015會出現編譯錯誤的地方 大多是因為  out variable 沒有事先宣告
這是因為我使用了C# 7.0的語法  ...

謝謝Alexiou大 我換成2017 順利多了 目前只有一個小問題還沒解決按下執行後 在執行途中會出現這個問題 但似乎不影響執行程序 謝謝熱情教導
error.png
 樓主| 發表於 17-10-19 17:38 | 顯示全部樓層
jepaty 發表於 17-10-19 17:15
謝謝Alexiou大 我換成2017 順利多了 目前只有一個小問題還沒解決按下執行後 在執行途中會出現這個問題 但 ...

這個時候的 bstrData的值是甚麼?在Debug Mode中,  滑鼠放到三行前的bstrData 上, 應該可以出現bstrData的值
發表於 17-10-19 21:27 | 顯示全部樓層
本帖最後由 rainfly 於 17-10-19 21:30 編輯

我也想看板主分享的code @@
可惜金錢不足,請問有什麼方法拜讀嗎
謝謝有人可以分享給我嗎
rainflywalk@gmail.com
麻煩了
發表於 17-10-20 16:08 | 顯示全部樓層
alexliou 發表於 17-10-19 17:38
這個時候的 bstrData的值是甚麼?在Debug Mode中,  滑鼠放到三行前的bstrData 上, 應該可以出現bstrData的 ...

bstrData 那時候的值是  "M003 NO DATA"
 樓主| 發表於 17-10-20 18:14 | 顯示全部樓層
jepaty 發表於 17-10-20 16:08
bstrData 那時候的值是  "M003 NO DATA"

果然跟我猜的一樣
沒有Position
因為我 always有部位
所以這種case我沒測到
請增加 if statement的 測試條件
將  if (elements[0] != "##")
修改為
if (elements[0] != "##" && elements.Length >= 3)

if (elements[0] != "##" && bstrData != "M003 NO DATA")
發表於 17-10-23 09:41 | 顯示全部樓層
alexliou 發表於 17-10-20 18:14
果然跟我猜的一樣
沒有Position
因為我 always有部位

感謝Alexliou 大大 經過這樣改寫後 編譯一切正常了!!
 樓主| 發表於 17-10-25 08:27 | 顯示全部樓層
程式碼修正
=========================================
請將 OnReceiveStopLossReport() Method 中的
  OrderStatus = status == "5" ? "尚未觸發" : "全部取消",
修改為
  OrderStatus = status == "8" ? "全部取消" : "尚未觸發",

回復 支持 1 反對 0

使用道具 舉報

發表於 17-10-25 15:44 | 顯示全部樓層
感謝您的費心
 樓主| 發表於 17-11-1 11:12 | 顯示全部樓層
本帖最後由 alexliou 於 17-11-1 11:21 編輯

今早發現竟然無法啟動自動報價
檢查一下發現 QuoteConnectStatus 竟然不會變成 Connected
去群益官網一看
API 的版本又更新了(2.13.8)
但出新版的同時  竟然舊版的behavior 也變了

(雖然無法自動StartQuoting, 但還是可以在各個ComboBox手動選擇欲取得報價之商品)

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-20 15:21

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |