Ошибки, баги, вопросы - страница 932

 
notused:

регулярно (пару раз в неделю) на протяжении нескольких месяцев отваливаются удалённые агенты по причине нехватки места:

или

при этом в логах агентов или всё чисто или:

и места на самом то деле завались:

 

 Проявляется, когда тестим что-то тяжёлое (в смысле, мультивалютник из 10 инструментов за период - год-два). Такое впечатление, что в какой-то момент агент хочет создать мегафайл (хотя в советнике нет ни принтов, ни работы с файлами). В общем, реально стало тяжко работать

 

Считаем: год тиковой истории (при режиме все тики на M1) требует  примерно 3Gb дискового пространства под временные файлы (понаблюдайте за папкой "...\tester\Agent-0.0.0.0-xxxx\temp", когда идёт тяжёлое задание). Умножаем на число агентов. 17 Gb уже на грани (а если 8 агентов, то и за ней)

Прикольное название эксперта. ;)

PS. Тестер (743) упирается в неназванные ограничения... 

 

Помогите, пожалуйста. Почему не находит сделку (ошибка 4755)?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistoryDealSelect(trans.deal)) {
      long DealMagic;
      if (HistoryDealGetInteger(trans.deal, DEAL_MAGIC, DealMagic)) {
        //
      }
      else Print("HistoryDealGetInteger(" + (string)trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = ", GetLastError());
    }
    else Print("HistoryDealSelect(" + (string)trans.deal + ") = false! GetLastError() = ", GetLastError());
  }
}

Листинг терминала:

2013.02.07 10:31:52   instant sell 0.01 EURUSD at 1.35354 (1.35354 / 1.35364 / 1.35354)
2013.02.07 10:31:52   deal #1028 sell 0.01 EURUSD at 1.35354 done (based on order #1028)
2013.02.07 10:31:52   deal performed [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   order performed sell 0.01 at 1.35354 [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   HistoryDealGetInteger(1028, DEAL_MAGIC, DealMagic) = false! GetLastError() = 4755
 
Ashes:

Считаем: год тиковой истории (при режиме все тики на M1) требует  примерно 3Gb дискового пространства под временные файлы (понаблюдайте за папкой "...\tester\Agent-0.0.0.0-xxxx\temp", когда идёт тяжёлое задание). Умножаем на число агентов. 17 Gb уже на грани (а если 8 агентов, то и за ней)

Прикольное название эксперта. ;)

Спасибо! Не мог и прикинуть, что 16Гб может быть мало. Перенесу агентов на другой диск - 650 Гб надеюсь хватит.

У меня тоже такое наблюдалось - особенно когда компьютер загружен. Но в последнее время, при нагруженном копмпьютере, одиночный проход теста просто завешивает терминал (дело не в нехватке места - терминал стоит там, где есть 650Гб свободного места). Но если поубивать все возможные процессы - всё проходит на ура. 
 
voix_kas:

Помогите, пожалуйста. Почему не находит сделку (ошибка 4755)?

С HistoryDealSelect возможно проблемы, если код тестировался в тестере стратегий.

тынц 


 
sion:

С HistoryDealSelect возможно проблемы, если код тестировался в тестере стратегий.

тынц 


Если использую конструкцию с HistorySelect(), то всё работает норм.

В OnTradeTransaction не работает. Вероятно, данное событие наступает до помещения информации о сделки в некую БД. Не смотря на явное указание в документации:

TRADE_TRANSACTION_DEAL_ADD - Добавление сделки в историю. Осуществляется в результате исполнения ордера или проведения операций с балансом счета.

 
voix_kas:

Если использую конструкцию с HistorySelect(), то всё работает норм.

В OnTradeTransaction не работает. Вероятно, данное событие наступает до помещения информации о сделки в некую БД. Не смотря на явное указание в документации:

TRADE_TRANSACTION_DEAL_ADD - Добавление сделки в историю. Осуществляется в результате исполнения ордера или проведения операций с балансом счета.

Тут тестировали,  через HistorySelect() работало, то-же запрос через HistoryDealSelect уже фейлился. На данном примере скорость размещения в бд не влияла.

Так в тестере стратегий проверяете? На реал, скорее всего, будет нормально работать.

 
sion:

Тут тестировали,  через HistorySelect() работало, то-же запрос через HistoryDealSelect уже фейлился. На данном примере скорость размещения в бд не влияла.

Так в тестере стратегий проверяете? На реал, скорее всего, будет нормально работать.

Подтверждаю, вот этот код с кастылём в виде HistorySelect() исправно работает: 

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistorySelect(0, TimeTradeServer())) {
      for (int i = 0; i < HistoryDealsTotal(); i++) {
        ulong Ticket = HistoryDealGetTicket(i);
        if (trans.deal == HistoryDealGetInteger(Ticket, DEAL_ORDER)) {
          Print(HistoryDealGetInteger(Ticket, DEAL_MAGIC));
          break;
        }
      }
    }
    else Log("HistorySelect(0, TimeTradeServer() = false! GetLastError() = ", GetLastError());
  }
}

Остаётся ждать, когда разработчик исправит явный баг.

 
Да, проверяю в тестере стратегий. В реал-тайм проблемы не наблюдается.
 
voix_kas:
Да, проверяю в тестере стратегий. В реал-тайм проблемы не наблюдается.
Тынц. Может пригодится, скорее всего, тоже ничего не изменилось.
 
sion:
Тынц. Может пригодится, скорее всего, тоже ничего не изменилось.

В общем, нашёл обходной путь для свой потребности. Без OnTradeTransaction.

Возник дополнительный вопрос относительно функции HistoryDealGetTicket().

В документации сказано, что она возвращает номер тикета сделки. При этом явно не описаны случае возврата ошибки, например, нужно ли проверять возвращаемое значение на ">0"?

Аналогично с HistoryOrderGetTicket(). Однако у последней в примере указана проверка на положительное возвращаемое значение.

Поиск по форуму показывают, что народ проверяет возвращаемое значение как в случае ордера, так и в случае сделки.

 

Скорее всего, такую проверку делать надо на случай, например, запроса сделки с порядковым номером более HistoryDealTotal()-1. Но я был признателен разработчикам за внесение ясности в документацию к языку MQL5.

Причина обращения: