Yin Zhou Luo:
4756的範圍比較大,但你OrderSend下達之後會有MqlTradeResult 傳回價格、手數、滑點、止盈、止損……既然有N多種可能致4756,希望官方能細化錯誤碼,能像其它錯誤一樣能給編寫者一個明確的提示。
編程的朋友們覺得如何呢?
改用 MqlTradeResult 傳回的資料裡的 retcode 碼,來再來分類就比較仔細
嗯。查返回码是个办法。
前久给他们写了一个简单策略。在OrderSend之前偷了下懒,没做校验钱够不够。然后,客户反馈看到一大堆失败……唉,苦的我好一通找BUG……
以下是一段我在使用針對retcode處理程式碼,你可以直接套用,應該夠用了
string retcode_msg = "未知伺服器拒絕";
switch (result.retcode)
{
//--- 常見錯誤 ---
case TRADE_RETCODE_REQUOTE: retcode_msg = "重新報價"; break;
case TRADE_RETCODE_PRICE_CHANGED: retcode_msg = "價格已變更"; break;
case TRADE_RETCODE_PRICE_OFF: retcode_msg = "商品無報價"; break;
case TRADE_RETCODE_NO_MONEY: retcode_msg = "保證金不足"; break;
case TRADE_RETCODE_MARKET_CLOSED: retcode_msg = "市場關閉"; break;
case TRADE_RETCODE_TRADE_DISABLED: retcode_msg = "交易已被禁用"; break;
case TRADE_RETCODE_TIMEOUT: retcode_msg = "請求因超時而取消"; break;
case TRADE_RETCODE_TOO_MANY_REQUESTS: retcode_msg = "請求過於頻繁"; break;
//--- 請求參數無效 ---
case TRADE_RETCODE_INVALID: retcode_msg = "無效請求"; break;
case TRADE_RETCODE_INVALID_VOLUME: retcode_msg = "無效交易量"; break;
case TRADE_RETCODE_INVALID_PRICE: retcode_msg = "請求中價格無效"; break;
case TRADE_RETCODE_INVALID_STOPS: retcode_msg = "無效停損停利"; break;
case TRADE_RETCODE_INVALID_EXPIRATION: retcode_msg = "請求中訂單過期日期無效"; break;
case TRADE_RETCODE_INVALID_FILL: retcode_msg = "無效的訂單執行條件"; break;
case TRADE_RETCODE_INVALID_ORDER: retcode_msg = "不正確或禁止的訂單類型"; break;
//--- 伺服器/客戶端狀態 ---
case TRADE_RETCODE_SERVER_DISABLES_AT: retcode_msg = "伺服器禁用EA"; break;
case TRADE_RETCODE_CLIENT_DISABLES_AT: retcode_msg = "客戶端禁用EA"; break;
case TRADE_RETCODE_LOCKED: retcode_msg = "請求被鎖定以便處理"; break;
case TRADE_RETCODE_FROZEN: retcode_msg = "訂單或倉位凍結"; break;
case TRADE_RETCODE_CONNECTION: retcode_msg = "與交易服務器無法連接"; break;
//--- 其它拒絕原因 ---
case TRADE_RETCODE_REJECT: retcode_msg = "請求被拒絕"; break;
case TRADE_RETCODE_CANCEL: retcode_msg = "交易者已取消請求"; break;
case TRADE_RETCODE_ERROR: retcode_msg = "請求處理錯誤"; break;
case TRADE_RETCODE_ORDER_CHANGED: retcode_msg = "訂單狀態已更改"; break;
case TRADE_RETCODE_LIMIT_ORDERS: retcode_msg = "待處理訂單的數量已達到限制"; break;
case TRADE_RETCODE_LIMIT_VOLUME: retcode_msg = "該品種的訂單和倉位的交易量已達到限制"; break;
case TRADE_RETCODE_ONLY_REAL: retcode_msg = "僅對實時帳戶允許操作"; break;
case TRADE_RETCODE_POSITION_CLOSED: retcode_msg = "指定的倉位已被關閉"; break;
}
下單成交,會有成交完成的retcode訊息,來源都是retcode,但我是分開處理的如下
下單成交,會有成交完成的retcode訊息,來源都是retcode,但我是分開處理的如下
switch (result.retcode)
{
case TRADE_RETCODE_DONE: status_msg = "完全成交"; break;
case TRADE_RETCODE_DONE_PARTIAL: status_msg = "部分成交"; break;
case TRADE_RETCODE_PLACED: status_msg = "已掛單"; break;
case TRADE_RETCODE_NO_CHANGES: status_msg = "無變更"; break;
}
价格、手数、滑点、止盈、止损……既然有N多种可能致4756,希望官方能细化错误码,能象其它错误一样能给编写者一个明确的提示。
编程的朋友们觉得如何呢?