alexliou 發表於 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.解析傳回的錯誤訊息, 如果內容包刮"取消" 及委託書號, 則解讀為停損刪單成功
這兩個做法, 程式要怎麼修改, 就留給客倌您自己了


lawlu 發表於 17-10-18 15:58

期待已久的Alex大大的新版報價終於出來了,目前CoCo不夠,無法下載,但先大推一下

TrendRover 發表於 17-10-18 18:01

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

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

jepaty 發表於 17-10-19 10:09

本帖最後由 jepaty 於 17-10-19 10:27 編輯

萬分感謝TrendRover大大幫忙 目前我抓下來使用Visual Studio 2015 編譯 出現了10個錯誤訊息還在努力debug中.....我也會把版本改成Visual Studio 2017希望可以有好消息 謝謝各位前輩幫忙

simoncc 發表於 17-10-19 15:52

jepaty 發表於 17-10-19 10:09
萬分感謝TrendRover大大幫忙 目前我抓下來使用Visual Studio 2015 編譯 出現了10個錯誤訊息還在努力debug中 ...

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


alexliou 發表於 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/



jepaty 發表於 17-10-19 17:15

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

謝謝Alexiou大 我換成2017 順利多了 目前只有一個小問題還沒解決按下執行後 在執行途中會出現這個問題 但似乎不影響執行程序 謝謝熱情教導

alexliou 發表於 17-10-19 17:38

jepaty 發表於 17-10-19 17:15
謝謝Alexiou大 我換成2017 順利多了 目前只有一個小問題還沒解決按下執行後 在執行途中會出現這個問題 但 ...

這個時候的 bstrData的值是甚麼?在Debug Mode中,滑鼠放到三行前的bstrData 上, 應該可以出現bstrData的值

rainfly 發表於 17-10-19 21:27

本帖最後由 rainfly 於 17-10-19 21:30 編輯

我也想看板主分享的code @@
可惜金錢不足,請問有什麼方法拜讀嗎
謝謝有人可以分享給我嗎
rainflywalk@gmail.com
麻煩了

jepaty 發表於 17-10-20 16:08

alexliou 發表於 17-10-19 17:38
這個時候的 bstrData的值是甚麼?在Debug Mode中,滑鼠放到三行前的bstrData 上, 應該可以出現bstrData的 ...

bstrData 那時候的值是"M003 NO DATA"

alexliou 發表於 17-10-20 18:14

jepaty 發表於 17-10-20 16:08
bstrData 那時候的值是"M003 NO DATA"

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

if (elements != "##" && bstrData != "M003 NO DATA")

jepaty 發表於 17-10-23 09:41

alexliou 發表於 17-10-20 18:14
果然跟我猜的一樣
沒有Position
因為我 always有部位


感謝Alexliou 大大 經過這樣改寫後 編譯一切正常了!!

alexliou 發表於 17-10-25 08:27

程式碼修正
=========================================
請將 OnReceiveStopLossReport() Method 中的
OrderStatus = status == "5" ? "尚未觸發" : "全部取消",
修改為
OrderStatus = status == "8" ? "全部取消" : "尚未觸發",

cukie 發表於 17-10-25 15:44

感謝您的費心{:4_151:}

alexliou 發表於 17-11-1 11:12

本帖最後由 alexliou 於 17-11-1 11:21 編輯

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

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

頁: 1 2 [3] 4 5
查看完整版本: 群益API 2.13.7 C#實作