Новая версия платформы MetaTrader 5 build 5370: улучшения в веб-версии - страница 21

 
Alexander Voronkov #:
MetaTrader 5 build 5440

Функция OnChartEvent, при работе в индикаторах, полностью потеряла свою функциональность и выполняет свои действия только при полном отсутствии тиков - волатильности. В Экспертах, данная функция, работает исправно.

В каком из предыдущих билдов терминала этот же код, который даёт описанное поведение, работает корректно?
 
Artyom Trishkin #:
В каком из предыдущих билдов терминала этот же код, который даёт описанное поведение, работает корректно?

Здравствуйте!

Прошу прощения, но я не могу вам точно назвать номер билда, в котором работа была корректной, так как просто не обращал на это внимание.

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

 

Установил Платформу MetaTrader 5 build 5445 другого брокера и описанная выше проблема с OnChartEvent, отсутствует.

Все работает штатно, без каких либо неудобств и погрешностей.

Документация по MQL5: OnChartEvent / Обработка событий
Документация по MQL5: OnChartEvent / Обработка событий
  • www.mql5.com
Вызывается в экспертах и индикаторах при наступлении события ChartEvent . Функция предназначена для обработки изменений графика, вызванных...
 
Alexander Voronkov #:

В любом случае, такого не происходит с Советником, в одном и том же Терминале и с теми же условиями.

Возможно дело в брокере...?

Уже и не знаю, что думать...)

Эксперт работает в своём собственном потоке

Индикатор работает в потоке обновления символа в очереди таймфреймов и индикаторов на этих таймфреймах

 

Предложение по улучшению отчетов оптимизации в математическом режиме.

Сейчас только 1 значение (Результат) показывается при оптимизации, которое возвращается из OnTester(). Для оценки результатов торговых стратегий этого очень мало.

Хорошо бы сделать заполняемыми из OnTester() все 8 значений, которые показываются в обычном режиме:

SetTesterProfit(1234.56); SetTesterTrades(547);....
или просто 1 вызов для всех 8:
SetTesterResults(result, profit, trades, prib, mo, pros, fv, sharp);

И затем просто показать, как при обычной оптимизации эти поля. Позволять заполнять их можно только в мат. режиме или во всех. Незаполненные можно не показывать, чтобы не был столбец с нулями.

Все это можно вычислять. Все-таки платформа для трейдинга предназначена и даже мат. вычисления делаются в том числе для оценки стратегий.
Или можно что-то свое подставить в эти поля - это может пригодиться и тем, кто не для торговых стратегий использует мат. режим.

Работа не большая, а удобства добавит.

Заранее спасибо!

PS. Сейчас приходится комбинировать 3 параметра в 1 цифру: 1234.56 7890. В целой части округленная прибыль, первые 2 цифры в дробной части матожидание (до 99), последние 4 число трейдов (до 9999). Но сортировок по отдельным параметрам не сделать. Оценивать очень сложно. Да и всего 3 параметра, еще 4 было бы хорошо. И фильтры есть удобные в обычном режиме, которые можно будет применять и для мат. режима.

 
Forester #:

Предложение по улучшению отчетов оптимизации в математическом режиме.

Работа не большая

Как минимум, opt-формат брать не от мат. режима. Т.к. в мат. режиме там сохраняется только одно число.

PS. Сейчас приходится комбинировать 3 параметра в 1 цифру: 1234.56 7890.

Такое возможно делать только в режиме полного перебора. Для генетики не подходит.

 
Forester #:

SetTesterProfit(1234.56); SetTesterTrades(547);....

или просто 1 вызов для всех 8:
SetTesterResults(result, profit, trades, prib, mo, pros, fv, sharp);

Писал такое.

  void TesterStatistics( const ENUM_STATISTICS Statistic_ID, const double Value )
  {
    switch (Statistic_ID)
    {
      case STAT_INITIAL_DEPOSIT:
        this.initial_deposit = Value;

        break;
      case STAT_WITHDRAWAL:
        this.withdrawal = Value;

        break;
      case STAT_PROFIT:
        this.profit = Value;

        break;
      case STAT_GROSS_PROFIT:
        this.grossprofit = Value;

        break;
      case STAT_GROSS_LOSS:
        this.grossloss = -Value;

        break;
      case STAT_MAX_PROFITTRADE:
        this.maxprofit = Value;

        break;
      case STAT_MAX_LOSSTRADE:
        this.minprofit = -Value;

        break;
      case STAT_CONPROFITMAX:
        this.maxconprofit = Value;

        break;
      case STAT_CONPROFITMAX_TRADES:
        this.maxconprofit_trades = (int)Value;

        break;
      case STAT_MAX_CONWINS:
        this.conprofitmax = Value;

        break;
      case STAT_MAX_CONPROFIT_TRADES:
        this.conprofitmax_trades = (int)Value;

        break;
      case STAT_CONLOSSMAX:
        this.conlossmax = -Value;

        break;
      case STAT_CONLOSSMAX_TRADES:
        this.conlossmax_trades = (int)Value;

        break;
      case STAT_MAX_CONLOSSES:
        this.maxconloss = -Value;

        break;
      case STAT_MAX_CONLOSS_TRADES:
        this.maxconloss_trades = (int)Value;

        break;
      case STAT_BALANCEMIN:
        this.balance_min = Value;

        break;
      case STAT_BALANCE_DD:
        this.maxdrawdown = Value;

        break;
      case STAT_BALANCEDD_PERCENT:
        this.drawdownpercent = Value;

        break;
      case STAT_BALANCE_DDREL_PERCENT:
        this.reldrawdownpercent = Value;

        break;
      case STAT_BALANCE_DD_RELATIVE:
        this.reldrawdown = Value;

        break;
      case STAT_EQUITYMIN:
        this.equity_min = Value;

        break;
      case STAT_EQUITY_DD:
        this.maxdrawdown_e = Value;

        break;
      case STAT_EQUITYDD_PERCENT:
        this.drawdownpercent_e = Value;

        break;
      case STAT_EQUITY_DDREL_PERCENT:
        this.reldrawdownpercnt_e = Value;

        break;
      case STAT_EQUITY_DD_RELATIVE:
        this.reldrawdown_e = Value;

        break;
      case STAT_EXPECTED_PAYOFF:
        this.expected_payoff = Value;

        break;
      case STAT_PROFIT_FACTOR:
        this.profit_factor = Value;

        break;
      case STAT_RECOVERY_FACTOR:
        this.recovery_factor = Value;

        break;
      case STAT_SHARPE_RATIO:
        this.sharpe_ratio = Value;

        break;
      case STAT_MIN_MARGINLEVEL:
        this.margin_level = Value;

        break;
      case STAT_CUSTOM_ONTESTER:
        this.custom_fitness = Value;

        break;
      case STAT_DEALS:
        this.deals = (int)Value;

        break;
      case STAT_TRADES:
        this.trades = (int)Value;

        break;
      case STAT_PROFIT_TRADES:
        this.profittrades = (int)Value;

        break;
      case STAT_LOSS_TRADES:
        this.losstrades = (int)Value;

        break;
      case STAT_SHORT_TRADES:
        this.shorttrades = (int)Value;

        break;
      case STAT_LONG_TRADES:
        this.longtrades = (int)Value;

        break;
      case STAT_PROFIT_SHORTTRADES:
        this.winshorttrades = (int)Value;

        break;
      case STAT_PROFIT_LONGTRADES:
        this.winlongtrades = (int)Value;

        break;
      case STAT_PROFITTRADES_AVGCON:
        this.avgconwinners = (int)Value;

        break;
      case STAT_LOSSTRADES_AVGCON:
        this.avgconloosers = (int)Value;

        break;
    }

    return;
  }

Грубо говоря, можно уже сейчас создавать фейковый opt-файл во фрейм-режиме мат. расчетов. И после окончания оптимизации открывать его со всеми данными. Будет работать в GUI идеально.


ЗЫ Уверен, что мат. расчеты использует менее десяти человек. И любые улучшения (еще одно) со стороны MQ в этом режиме не увеличат их количество.

 
fxsaber #:

Писал такое.

Грубо говоря, можно уже сейчас создавать фейковый opt-файл во фрейм-режиме мат. расчетов. И после окончания оптимизации открывать его со всеми данными. Будет работать в GUI идеально.

Хорошо бы чтобы из коробки все работало, а не через костыли.
fxsaber #:

Как минимум, opt-формат брать не от мат. режима. Т.к. в мат. режиме там сохраняется только одно число.

Уже есть готовое решение - просто его применить. Надеюсь разработчики внесут предложенное улучшение. Если нет, придется костылить... может через месяц.
 
Forester #:
придется костылить...

Сделают или костылить, но придется самому делать расчеты этих показателей.

Виртуал часть из них считает, но не все.

 
fxsaber #:

ЗЫ Уверен, что мат. расчеты использует менее десяти человек. И любые улучшения (еще одно) со стороны MQ в этом режиме не увеличат их количество.

Пока не использую, но переход на этот режим тестирования у меня в списке задач! Так что, пожалуйста, по возможности не бросайте развитие механизмов скоростного тестирования 🙏🏻