Бета-версия платформы MetaTrader 5 build 2055: Интеграция с Python и массовые улучшения в тестере стратегий - страница 12

 
Ramiz Mavludov:

2. Можно увидеть DD в деньгах, во время оптимизации а не в %. 

Пока такая возможность.

 

Каким-то образом получился кастомный символ, который может удаляться из Обзора рынка при открытом графике.



Возможно, поможет разобраться следующее. Перед этим багом пытался разобраться, почему эта функция

bool DeleteCharts( void ) 
{
  bool Res = true;

  long Chart = ::ChartFirst();

  while (Chart != -1)
  {
    if ((Chart != ::ChartID()) && (::ChartSymbol(Chart) == _Symbol))
      Res &= ChartClose(Chart);

    Chart = ::ChartNext(Chart);
  }

  return(Res);
}

выполняется три секунды при открытых двух чартах. Затем что-то сделал и она стала выполняться мгновенно. Далее вышел на баг, что выше. Воспроизвести его после перегрузки Терминала не получилось.

 
В логе появились записи от MessageBox
2019.05.27 11:36:14.100 Message Creating all the symbols can take a long time.
2019.05.27 11:36:14.100 Message Current size of Offline archive is 12788 Mb.
2019.05.27 11:36:14.100 Message Do you agree?
Источник указывается, как Message. Возможно ли добавить еще данные о программе в столбец Источник, которая вызывала MessageBoX?
 

Не ошибка и не баг, вроде бы, но спрошу здесь:

желтый человечек возле счета - реал, зелёный - демо, а вот что за счет - желтый человечек в зелёной кепке?

 
Andrey Dik:

Не ошибка и не баг, вроде бы, но спрошу здесь:

желтый человечек возле счета - реал, зелёный - демо, а вот что за счет - желтый человечек в зелёной кепке?

Предварительный

 
MetaQuotes Software Corp.:

Распределение задач между агентами


  1. Теперь во время выполнения оптимизации тестер стратегий может перераспределять задания на ходу. Если стал доступен новый агент (или один из ранее использованных освободился), тестер автоматически сформирует ему пакет заданий из тех, что уже были распределены между другими агентами. Аналогичным образом задания перераспределяются при обнаружении слишком медленных агентов — их задачи параллельно выдаются другим агентам, чтобы завершить оптимизацию быстрее.

    Также значительно ускорено распределение задач в режиме математических вычислений.

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

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


 

Недоработка компилятора.  Отсутствует контроль за инициализацией extern-переменных.  Следующий код компилируется без ошибок, хотя он некорректный:

extern int a=1;

extern int a=1; // Здесь должна быть ошибка! Повторная инициализация

extern int b;

extern int b;

void OnStart()
{ 
  Print(b); // Здесь должна быть ошибка! Обращение к неинициализированной extern-переменной
}

Кроме того, компилятор не даёт объявить extern-константу без инициализации:

extern const int a; // 'a' - 'const' variable must be initialized
 
планируется ли в ME ввести разграничение как в С++ обращение к членам/методам объекта класса . и -> ?
 

Баг Тестера в мультивалютном режиме.

Forum on trading, automated trading systems and testing trading strategies

Wrong symbol for Pending Order ticket during EA backtesting

fxsaber, 2019.05.29 22:21

I see

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
#include <Trade\Trade.mqh>

bool OrderScan( const string Symb )
{
  bool Res = false;
  
  for (int i = OrdersTotal() - 1; (i >= 0) && !Res; i--)
    Res = OrderSelect(i, SELECT_BY_POS) && (OrderSymbol() == Symb);
  
  return(Res);
}

void OnInit()
{
  MqlTick Tick;  
  SymbolInfoTick("GBPUSD", Tick);
}

void OnTick()
{
  if ((TimeCurrent() == D'2018.11.28 12:30') && !OrderScan("EURGBP"))
    OrderSend("EURGBP", OP_BUYSTOP, 1, 0.88422, 0, 0, 0);
  else if ((TimeCurrent() == D'2018.11.28 14:30') && !OrderScan("GBPUSD"))
    OrderSend("GBPUSD", OP_SELLSTOP, 1, 1.27879, 0, 0, 0);
  else if ((TimeCurrent() == D'2018.11.28 14:33:58') && OrderScan("GBPUSD") && (OrderType() == OP_SELL) && !OrderStopLoss())
  {
    OrderModify(OrderTicket(), OrderOpenPrice(), 1.32878, 0, 0);
    
    if (OrderScan("EURGBP"))
    {
//      OrderModify(OrderTicket(), 0.88262, 0, 0, 0);    

      CTrade trade;
      trade.OrderModify(OrderTicket(), 0.88262, 0, 0, ORDER_TIME_GTC, 0, 0);      
    }
  }
}


2018.11.28 12:30:00   buy stop 1.00 EURGBP at 0.88422 (0.88354 / 0.88372 / 0.88354)
2018.11.28 14:30:00   sell stop 1.00 GBPUSD at 1.27879 (1.27929 / 1.27948 / 1.27929)
2018.11.28 14:33:58   order [#3 sell stop 1.00 GBPUSD at 1.27879] triggered
2018.11.28 14:33:58   deal #2 sell 1.00 GBPUSD at 1.27878 done (based on order #3)
2018.11.28 14:33:58   deal performed [#2 sell 1.00 GBPUSD at 1.27878]
2018.11.28 14:33:58   order performed sell 1.00 at 1.27878 [#3 sell stop 1.00 GBPUSD at 1.27879]
2018.11.28 14:33:58   position modified [#3 sell 1.00 GBPUSD 1.27878 sl: 1.32878]
2018.11.28 14:33:58   failed modify order #2 buy stop 1.00 GBPUSD at 0.88422 sl: 0.00000 tp: 0.00000 -> 0.88262, sl: 0.00000 tp: 0.00000 [Invalid price]
2018.11.28 14:33:58   CTrade::OrderSend: modify #2 at 0.88262 (sl: 0.00000 tp: 0.00000) [invalid price]

В СБ баг можно обойти так

Forum on trading, automated trading systems and testing trading strategies

Wrong symbol for Pending Order ticket during EA backtesting

fxsaber, 2019.05.29 22:30

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();   
   m_request.symbol = ::OrderSelect(ticket) ? ::OrderGetString(ORDER_SYMBOL) : NULL;
//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }


Сервер

 

Build 2063. Тем не менее, возможно ли получить ответ от разработчика MT5?

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

Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов

Alain Verleyen, 2019.04.16 03:50

Build 2007/2025.

Кажется, невозможно изменить заголовок «Accept» в WebRequest (с mql4 это работает).

Прикрепленный код должен возвращать JSON-ответ, например:

{ "responseParameters": { "doui_setResponseParameters": [ "8AA8D0CD6A05153A016A16735AF94E0E"]}}

Но ответ - HTML-файл, потому что серверу нужен заголовок «Accept: application / json». Я знаю это, потому что это работает с Почтальоном, например.

При проверке HTTP, отправляемого MT5 с Wireshark, заголовок «Принять» всегда:

Принять: * / *

Это ошибка или я что-то упустил?