Выпустили бета-версию MetaTrader 5 build 1795 на MetaQuotes-Demo - страница 5

 
Evgeny Chernyshev:

Проблема воспроизводится постоянно при каждой компиляции? Советник из маркета?

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

 
Evgeny Chernyshev:

Проблема воспроизводится постоянно при каждой компиляции? Советник из маркета?

Как это можно компилировать советник из маркета?

 
Похоже, стала понятная причина этого

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.03.01 13:13

В папке "Bases\MetaQuotes-Demo\history\" появилась папка с 2018.hcc, относящаяся к кастомному символу. Баг.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.03.06 17:24

  1. На чарте открыт кастомный символ (только история, не обновляется).
  2. Переключаюсь на другой торговый сервер.
  3. Чарт становится "Ожидание обновления".
  4. Закрываю чарт, жду несколько минут и пробую открыть чарт кастомного - открывается нормально.
  5. Перехожу к п.2 и все повторяется - нет чарта, ждем минуты, есть чарт.
Просьба к следующему билду исправить этот баг. Сильно ограничивает возможности кастомных.

  1. Заходим на MQ-Demo и открываем EURUSD-график.
  2. Заходим на BCS-MetaTrader5.
  3. На этом сервере нет символа EURUSD, поэтому на графике наблюдаем "Ожидание обновления".
  4. Но через несколько секунд появляется EURUSD-график.
  5. Соответственно, появляется файл Bases\BCS-MetaTrader5\history\EURUSD\2018.hcc.
Баг!

 
Alexey Volchanskiy:

Как это можно компилировать советник из маркета?

Имелась ввиду стандартная поставка терминала, исправил
 
Alexandr Saprykin:

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

К сожалению, по описанной Вами информации проблему воспроизвести не удалось. Нужно больше подробностей.

Напишите в сервисдеск, приложив Ваш советник. Второй вариант - попытаться локализовать проблему самостоятельно, чтобы мы попытались воспроизвести проблему с большими деталями относительно кода.

Спасибо.

 

MetaEditor build 1798 в режиме IDE пока не пробовал, но с IDE 1795 что-то непонятное происходит:

Один и тот же код то компилирует нормально, то с ошибкой: не указан файл и абсурдный номер строки (!). Были и другие абсурдные сообщения об ошибке - не сохранил - думал случайность


то капитально зависает при компиляции (видимо ищет эту абсурдную строку)


то самопроизвольно закрывается(выгружается) всего лишь при наборе кода (!). Причём все события носят случайный характер

 

Не понимаю, почему вчера Тестер на биржевых символах не использовал last-цену, как конечную, а сегодня - использует.

Все делаю идентично тому, что делал и вчера. Все идеально совпадает, но последняя цена - last. Да еще и нулевая.

Баг с нулевой ценой - без сомнений. Но совершенно не ясно, по какой причине вчера, делая все абсолютно то же самое, этого не возникало?!

Сначала подумал, что кеши глючат. И грохнул Bases, Tester, Files. Не помогло.

Единственное отличие вчера от сегодня: вчера были рабочие часы будней, сегодня - выходной. Но использовался Тестер только на истории. Неужели его поведение зависит от текущего состояния Терминала...

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Выпустили бета-версию MetaTrader 5 build 1795 на MetaQuotes-Demo

fxsaber, 2018.04.07 12:41

Не понимаю, почему вчера Тестер на биржевых символах не использовал last-цену, как конечную, а сегодня - использует.

Все делаю идентично тому, что делал и вчера. Все идеально совпадает, но последняя цена - last. Да еще и нулевая.

Баг с нулевой ценой - без сомнений.

Воспроизведение.

1. На MQ-Demo EURUSD M1 запускаем два раза скрипт со значением входного параметра, соответственно, TESTER и TESTER2.

#property script_show_inputs

#include <Symbol.mqh>

int GetRates( const string Symb, const datetime StartTime, MqlRates &Rates[] )
{
  return(CopyRates(Symb, PERIOD_M1, StartTime, TimeCurrent(), Rates));
}

int GetTicks( const string Symb, const datetime StartTime, MqlTick &Ticks[] )
{
  return(CopyTicksRange(Symb, Ticks, COPY_TICKS_ALL, (long)StartTime * 1000, (long)TimeCurrent() * 1000));
}

#define WEEK (7 * 24 * 3600)

input string CustomSymbol = "TESTER";

void OnStart()
{  
  const SYMBOL Symb(CustomSymbol);

  if (Symb.IsExist()) // Если символ создан
  {
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_BASE, AccountInfoString(ACCOUNT_CURRENCY));

    Symb.SetProperty(SYMBOL_TRADE_EXEMODE, SYMBOL_TRADE_EXECUTION_EXCHANGE);
    Symb.SetProperty(SYMBOL_TRADE_CALC_MODE, SYMBOL_CALC_MODE_EXCH_FUTURES);

    Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, 1);
    Symb.SetProperty(SYMBOL_DIGITS, _Digits);
    Symb.SetProperty(SYMBOL_TRADE_TICK_SIZE, _Point);

    MqlRates Rates[];    
    MqlTick Ticks[];
    
    GetRates(_Symbol, TimeCurrent() - WEEK, Rates);
    GetTicks(_Symbol, Rates[0].time, Ticks);  
    
    Symb.CloneTicks(Ticks);
    Symb.CloneRates(Rates);

    if (Symb.On())
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Открыли график нового символа   
  }
}

Получим такую картину


2.Выбираем в Тестере символ TESTER M1, реальные тики, конец интервала - завтрашний (или позже) день (конец интервала здесь очень важен, т.к. режим "Вся история" для кастомных символов работает так же, как и для обычных - текущий день не включается)


и делаем прогон этого советника

#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnInit()
{
  OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
}

На выходе будем иметь


Т.е. закрытие BUY-позиции в Тестере произошло по нулевой цене. Не по Bid, а по нулевой Last.


3. Чтобы в этом убедиться заходим во вкладку Тики CTRL+U окна и добавляем вручную в последний тик ранее созданного TESTER2-символа last-цену


4. Выбираем в Тестере символ TESTER2 и делаем прогон все того же советника. На выходе

Видим, что закрытие BUY-позиции произошло по заданной нами last-цене.


Выходит, что для биржевых кастомных символов, где нет в истории last-цены (что вполне нормально), закрытие все равно идет по last-цене, даже несмотря на то, что она нулевая.

Это баг, т.к. закрытие позиций в Тестере должно происходить по самой свежей Bid/Ask/Last-цене. И если last отсутствует, то она, конечно, не является свежей. Просьба поправить это недоразумение.

 
После перекомпиляции советника Оптимизационные кеши не сбрасываются для кастомных символов.
 

При запуске Оптимизации убедитесь, что такая ситуация не возникла, т.к. скорость оптимизации может упасть на десятки процентов, по сравнению с правильной работой.

Если видите такое, останавливайте Оптимизацию и запускайте снова.  У меня два/три раза иногда приходится перезапуститься, чтобы connecting исчез.

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