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手動選擇欲取得報價之商品)