Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.08.03 22:16
HistoryOrderGetInteger(OrderTicket, ORDER_TIME_DONE_MSC) - возвращает ноль в тестере!Скрипт несколько десятков раз делает одно и то же через OrderSend (не Async)
Например, скрипт делает 50 раз одно и то же. Из них для 26-го и 37-го раза отложенник выставляется, но модификация и удаление его не происходит - "Invalid request".
Это из-за какого-то внутреннего переполнения?
Вот лог
2016.11.11 03:04:53.364 Trades '8500457': accepted buy limit 1.00 AUDCAD at 1.02387
2016.11.11 03:04:53.364 Trades '8500457': order #40316582 buy limit 1.00 / 1.00 AUDCAD at market done in 60.046 ms
2016.11.11 03:04:53.365 Trades '8500457': modify order #40316582 buy limit 1.00 AUDCAD at 1.02387 sl: 0.00000 tp: 0.00000 -> 1.02387, sl: 1.02287 tp: 0.00000
2016.11.11 03:04:53.423 Trades '8500457': accepted modify order #40316582 buy limit 1.00 AUDCAD at 1.02387 sl: 0.00000 tp: 0.00000 -> 1.02387, sl: 1.02287 tp: 0.00000
2016.11.11 03:04:53.423 Trades '8500457': modify #40316582 buy limit 1.00 AUDCAD -> price: 1.02387, sl: 1.02287, tp: 0.00000) done in 58.551 ms
2016.11.11 03:04:53.424 Trades '8500457': cancel order #40316582 buy limit 1.00 AUDCAD at 1.02387 sl: 1.02287
2016.11.11 03:04:53.483 Trades '8500457': accepted cancel order #40316582 buy limit 1.00 AUDCAD at 1.02387 sl: 1.02287
2016.11.11 03:04:53.484 Trades '8500457': cancel #40316582 buy limit 1.00 AUDCAD at market done in 59.999 ms
2016.11.11 03:04:53.485 Trades '8500457': buy limit 1.00 AUDCAD at 1.02387
2016.11.11 03:04:53.542 Trades '8500457': accepted buy limit 1.00 AUDCAD at 1.02387
2016.11.11 03:04:53.542 Trades '8500457': order #40316583 buy limit 1.00 / 1.00 AUDCAD at market done in 57.727 ms
2016.11.11 03:04:53.543 Trades '8500457': failed modify order #40316583 buy limit 1.00 AUDCAD at 1.02387 sl: 0.00000 tp: 0.00000 -> 1.02387, sl: 1.02287 tp: 0.00000 [Invalid request]
2016.11.11 03:04:53.543 Trades '8500457': failed cancel order #40316583 buy limit 1.00 AUDCAD at 1.02387 [Invalid request]
2016.11.11 03:04:53.543 Trades '8500457': buy limit 1.00 AUDCAD at 1.02387
2016.11.11 03:04:53.601 Trades '8500457': accepted buy limit 1.00 AUDCAD at 1.02387
2016.11.11 03:04:53.602 Trades '8500457': order #40316584 buy limit 1.00 / 1.00 AUDCAD at market done in 59.059 ms
2016.11.11 03:04:53.603 Trades '8500457': modify order #40316584 buy limit 1.00 AUDCAD at 1.02387 sl: 0.00000 tp: 0.00000 -> 1.02387, sl: 1.02287 tp: 0.00000
2016.11.11 03:04:53.662 Trades '8500457': accepted modify order #40316584 buy limit 1.00 AUDCAD at 1.02387 sl: 0.00000 tp: 0.00000 -> 1.02387, sl: 1.02287 tp: 0.00000
2016.11.11 03:04:53.662 Trades '8500457': modify #40316584 buy limit 1.00 AUDCAD -> price: 1.02387, sl: 1.02287, tp: 0.00000) done in 59.187 ms
2016.11.11 03:04:53.663 Trades '8500457': cancel order #40316584 buy limit 1.00 AUDCAD at 1.02387 sl: 1.02287
2016.11.11 03:04:53.720 Trades '8500457': accepted cancel order #40316584 buy limit 1.00 AUDCAD at 1.02387 sl: 1.02287
2016.11.11 03:04:53.721 Trades '8500457': cancel #40316584 buy limit 1.00 AUDCAD at market done in 58.285 ms
Выделил жирным проблемное место. До и после этого скрипт с теми же запросами все выполняет (видно по логу). Стоп-уровни точно не участвуют тут - далеко устанавливаю.
Распечатка полученного (от OrderSend) MqlTradeResult-результата
Код 10013.
Воспроизводится легко на Hedge и Netto-счетах, включая Metaquotes-Demo. Есть мысли по багу?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Машинное обучение: теория и практика (торговля и не только)
Renat Fatkhullin, 2016.11.10 20:04
Для отключения контроля за делением вещественных на ноль, используйте параметр FpNoZeroCheckOnDivision=1 в разделе [Experts] файла metaeditor.ini
При наличии данного параметра, следующий код выдаст inf
Естественно, наличие данного параметра не избавит от ошибки компиляции при делении на константу 0.0
'0.0' - division by zero in the constant expression s1.mq5 8 12
1468
А в этом Вашем случае точно есть миллисекунды? Эксперт закрывал или тестовый торговый сервер по стопу?
#define TOSTRING(A) #A + " = " + (string)(A)
void OnTick()
{
static bool FirstRun = true;
if (FirstRun && SymbolInfoDouble(_Symbol, SYMBOL_ASK) != 0)
{
const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
if (HistoryOrderSelect(Ticket))
Print(TOSTRING(HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE_MSC)));
if (HistoryDealSelect(Ticket))
Print(TOSTRING(HistoryDealGetInteger(Ticket, DEAL_TIME_MSC)));
FirstRun = false;
}
}
2016.11.11 11:25:56 Core 1 2016.11.03 00:00:03 HistoryOrderGetInteger(Ticket,ORDER_TIME_DONE_MSC) = 0
Макросы, вроде, перестали соответствовать C++, но так даже удобнее
void f(int, int) {}
void OnStart()
{
MACRO(f(0, 0)); // отсутствует ошибка "not actual parameters count for macro"
}
А в этом Вашем случае точно есть миллисекунды? Эксперт закрывал или тестовый торговый сервер по стопу?
Может быть я немного не в той ветке пишу, но зачем в журналах терминала сделали обратную последовательность прихода сообщений? Можно вернуть как было или сделать параметром?
Билд 1468 х64.