成行注文がエラーコード10006(rejected)で通らない

 
int MQL45::OrderSend(string symbol, int cmd, double volume, double price, int slippage, double sl, double tp, string comment = NULL, int magic = 0, datetime expiration=0, color arrow=clrNONE)
{
    trader.SetExpertMagicNumber(magic);

    bool result = false;
    switch (cmd) {
    case OP_BUY:
        result = trader.Buy(volume, symbol, 0.0, sl, tp, comment);
        break;
    case OP_SELL:
        result = trader.Sell(volume, symbol, 0.0, sl, tp, comment);
        break;
    case OP_BUYLIMIT:
        result = trader.BuyLimit(volume, price, symbol, sl, tp, ORDER_TIME_SPECIFIED, expiration, comment);
        break;
    case OP_SELLLIMIT:
        result = trader.SellLimit(volume, price, symbol, sl, tp, ORDER_TIME_SPECIFIED, expiration, comment);
        break;
    case OP_BUYSTOP:
        result = trader.BuyStop(volume, price, symbol, sl, tp, ORDER_TIME_SPECIFIED, expiration, comment);
        break;
    case OP_SELLSTOP:
        result = trader.SellStop(volume, price, symbol, sl, tp, ORDER_TIME_SPECIFIED, expiration, comment);
        break;
    }

    if (!result) {
        MqlTradeRequest request = {};
        trader.Request(request);
        double stop_level_tp = 0;
        double stop_level_sl = 0;
        switch (request.type) {
        case ORDER_TYPE_BUY:
        case ORDER_TYPE_BUY_LIMIT:
        case ORDER_TYPE_BUY_STOP:
        case ORDER_TYPE_BUY_STOP_LIMIT:
            stop_level_tp = (request.tp != 0) ? (request.tp - request.price) / Point() : 0;
            stop_level_sl = (request.sl != 0) ? (request.price - request.sl) / Point() : 0;
            break;
        case ORDER_TYPE_SELL:
        case ORDER_TYPE_SELL_LIMIT:
        case ORDER_TYPE_SELL_STOP:
        case ORDER_TYPE_SELL_STOP_LIMIT:
            stop_level_tp = (request.tp != 0) ? (request.price - request.tp) / Point() : 0;
            stop_level_sl = (request.sl != 0) ? (request.sl - request.price) / Point() : 0;
            break;
        }
        Alert(StringFormat("【エラー%d】%s: %.0f / %.0f / %d", trader.ResultRetcode(), trader.ResultComment(), stop_level_tp, stop_level_sl, SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)));
        return -1;
    }

    switch (cmd) {
    case OP_BUY:
    case OP_SELL:
        return (int)trader.ResultDeal();
    default:
        return (int)trader.ResultOrder();
    }
}

FXGT Miniデモ口座で、CTradeクラスを使ったMT4のOrderSend()関数のラッパーを使って成行注文で発注すると、

BTCUSD, ETHUSDは正常終了しますがLTCUSD, XRPUSDは下記のエラーでサーバーにはねられます。


GQ  0   14:39:12.040    Trades  '5017203': accepted market sell 100 XRPUSDm tp: 0.73526

LI  0   14:39:12.040    Trades  '5017203': rejected market sell 100 XRPUSDm tp: 0.73526 (Current book is empty)


MT4のOrderSend()のラッパー関数は上記の通りです。原因がお判りの方がいらっしゃったらご教授お願い致します。

 

"book" とは何ですか?

プログラムの問題ではなく手続き上の問題のように思いますけど。

 
Nagisa Unada #:

"book" とは何ですか?

プログラムの問題ではなく手続き上の問題のように思いますけど。

返信ありがとうございます。

"book"とはいわゆる「板」のことだと思いますが、板が空っぽって理解できません。

"Current book is empty"でググっても、全く情報が得られません。現在、fxgtのサポートに問い合わせ中です。