На счету 100000
рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю
ошибку о том, что недостаточно денег на счёте.
Вот сделал код
для примера, чтобы посмотреть как тестер расчитывает маржу для входа:
double margin;
OrderCalcMargin(ORDER_TYPE_SELL_LIMIT,symbol,Vol,symbol_info.MarginInitial(),margin);
Print("Margin to Open SELL LIMIT=",margin);
if (!OrderCalcMargin(ORDER_TYPE_BUY_LIMIT,symbol,Vol,symbol_info.MarginInitial(),margin)) Print("Last Error=",GetLastError());
Print("Margin to Open BUY LIMIT=",margin);
OrderCalcMargin(ORDER_TYPE_SELL,symbol,Vol,symbol_info.MarginInitial(),margin);
Print("Margin to Open SELL=",margin);
OrderCalcMargin(ORDER_TYPE_BUY,symbol,Vol,symbol_info.MarginInitial(),margin);
Print("Margin to Open BUY=",margin);
Print("Free Margin=",account.FreeMargin());
//--- все готово, отправляем на сервер отложенный ордер Buy Limitif(!trade.BuyLimit(Vol,price,symbol,0,0))
{
Print("Метод BuyLimit() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
". Описание кода: ",trade.ResultRetcodeDescription());
}
else
{
Print("Метод BuyLimit() выполнен успешно. Код возврата=",trade.ResultRetcode(),
" (",trade.ResultRetcodeDescription(),")");
}
Вот, что вижу в журнале:
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Тип счета: ACCOUNT_TRADE_MODE_DEMO2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Торговля на данном счете разрешена
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Автоматическая торговля на счете разрешена
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 АО ''Открытие Брокер'': server Open-Broker
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Balance=100000.0 Profit=0.0 Equity=100000.02018.02.0213:23:56.236 Core 012018.01.3000:00:00OnInit completed
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 RTS-3.18 (Фьючерсный контракт RTS-3.18) Bid=127640.0Ask=127690.02018.02.0213:23:56.236 Core 012018.01.3000:00:00 StopsLevel=0 pips, FreezeLevel=0 pips
2018.02.0213:23:56.236 Core 012018.01.3000:00:00Digits=0, Point=12018.02.0213:23:56.236 Core 012018.01.3000:00:00 SpreadFloat=true, Spread(текущий)=50 pips
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Ограничения на торговые операции: SYMBOL_TRADE_MODE_FULL (Full access)
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Режим исполнения сделок: SYMBOL_TRADE_EXECUTION_EXCHANGE (Exchange execution)
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Вычисление стоимости контракта: SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS (Calculation for FORTS futures)
2018.02.0213:23:56.236 Core 012018.01.3000:00:00 Размер стандартного контракта: 1.0 (RUR)
2018.02.0213:23:56.236 Core 012018.01.3000:00:00Volume info: LotsMin=1.0 LotsMax=100000.0 LotsStep=1.02018.02.0213:23:56.236 Core 012018.01.3000:00:00 Гарантийное обеспечение инструмента = 14675.752018.02.0213:23:56.236 Core 012018.01.3000:00:00 Щаг цены = 11.237862018.02.0213:23:56.236 Core 012018.01.3000:00:00OnInit completed
2018.02.0213:23:56.236 Core 012018.01.3018:00:01 ГО=14675.752018.02.0213:23:56.236 Core 012018.01.3018:00:01 Margin to Open SELL LIMIT=795299.02018.02.0213:23:56.236 Core 012018.01.3018:00:01 Margin to Open BUY LIMIT=0.02018.02.0213:23:56.236 Core 012018.01.3018:00:01 Margin to Open SELL=110068.02018.02.0213:23:56.236 Core 012018.01.3018:00:01 Margin to Open BUY=110068.02018.02.0213:23:56.236 Core 012018.01.3018:00:01 Free Margin=100000.02018.02.0213:23:56.236 Core 012018.01.3018:00:05 buy limit 5.00 RTS-3.18 at 128220 (128180 / 128190 / 128180)
2018.02.0213:23:56.236 Core 012018.01.3018:00:05 current account state: Balance: 100000.00, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 100000.00, Margin: 66016.00, FreeMargin: 33984.002018.02.0213:23:56.236 Core 012018.01.3018:00:05 calculated account state: Assets: 0.00, Liabilities: 0.00, Equity 100000.00, Margin: 110068.00, FreeMargin: -10068.002018.02.0213:23:56.236 Core 012018.01.3018:00:05 not enough money for order [#2buy limit 5.00 / 5.00 RTS-3.18 at 128220]
2018.02.0213:23:56.236 Core 012018.01.3018:00:05 CTrade::OrderSend: buy limit 5.00 RTS-3.18 at 128220 [done]
2018.02.0213:23:56.236 Core 012018.01.3018:00:05 Метод BuyLimit() выполнен успешно. Код возврата=10009 (done)
Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.
Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.
На счету 100000
рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю
ошибку о том, что недостаточно денег на счёте.
Вот сделал код
для примера, чтобы посмотреть как тестер расчитывает маржу для входа:
Вот, что вижу в журнале:
Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.
Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
я про то, что даже если Вы открываете байлимит, маржу считайте от БАЙ
и Вам тестер говорит, что для открытия 5 лотов надо 110068 поэтому 100000 явно мало на 10068
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
OrderCalcMargin
Вычисляет размер маржи,
необходимой для указанного типа ордера на текущем счете и при текущем
рыночном окружении без учета текущих отложенных ордеров и открытых
позиций. Позволяет оценить размер маржи для планируемой торговой
операции. Значение возвращается в валюте счета.
Если бы у Вас на счете были доллары и плечо 1:1, вернуло бы 100тыс., а так возвращает залог в рублях.
Этот баг когда будет побежден.
Невозможно нормально тестер использовать!
Почему этот простейший код компилируется так долго на i7?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MetaEditor build 1490
fxsaber, 2016.12.04 12:43
{
Print(ToString(Trans) + ToString(Request) + ToString(Result));
}
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + "\n"
string ToString( const MqlTradeTransaction &Trans )
{
return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}
string ToString( const MqlTradeRequest &Request )
{
return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) + TOSTRING(Request.tp) +
TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
TOSTRING(Request.position) + TOSTRING(Request.position_by));
}
string ToString( const MqlTradeResult &Result )
{
return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
TOSTRING(Result.retcode_external));
}
Здравствуйте,
У меня такая проблема в тестере:
На счету 100000 рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю ошибку о том, что недостаточно денег на счёте.
Вот сделал код для примера, чтобы посмотреть как тестер расчитывает маржу для входа:
Вот, что вижу в журнале:
Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.
Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.
В чём может быть проблема?
Здравствуйте,
У меня такая проблема в тестере:
На счету 100000 рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю ошибку о том, что недостаточно денег на счёте.
Вот сделал код для примера, чтобы посмотреть как тестер расчитывает маржу для входа:
Вот, что вижу в журнале:
Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.
Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.
В чём может быть проблема?
попробуйте OrderCalcMargin(ORDER_TYPE_BUY);
попробуйте OrderCalcMargin(ORDER_TYPE_BUY);
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
я про то, что даже если Вы открываете байлимит, маржу считайте от БАЙ
и Вам тестер говорит, что для открытия 5 лотов надо 110068 поэтому 100000 явно мало на 10068
Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку.
OrderCalcMargin
Вычисляет размер маржи, необходимой для указанного типа ордера на текущем счете и при текущем рыночном окружении без учета текущих отложенных ордеров и открытых позиций. Позволяет оценить размер маржи для планируемой торговой операции. Значение возвращается в валюте счета.
Если бы у Вас на счете были доллары и плечо 1:1, вернуло бы 100тыс., а так возвращает залог в рублях.
я про то, что даже если Вы открываете байлимит, маржу считайте от БАЙ
и Вам тестер говорит, что для открытия 5 лотов надо 110068 поэтому 100000 явно мало на 10068
Это я понял. Просто странно почему тестер не умеет считать правильно маржу для лимитированных заявок, которая значительно меньше.