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

 
Aleksey Sergan:



Пожалуйста запустите этот код: Multicurrency iMA Trend 2.

В настройках (параметр Symbols) указать "EURUSD,GBPUSD").

У меня на конфигурации

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120M  @ 2.50GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

все SL закрывались по ценам своего символа. То есть ошибок перехлёста цен нет.

 
Vladimir Karputov:

Пожалуйста запустите этот код: Multicurrency iMA Trend 2.

В настройках (параметр Symbols) указать "EURUSD,GBPUSD").

У меня на конфигурации

все SL закрывались по ценам своего символа. То есть ошибок перехлёста цен нет.

Спасибо, ошибка локализована. Пост ниже.

 
Andrey Barinov:

тут 2 ошибки.

№1. Ваша ошибка. Где-то в коде. Вы устанавливаете СЛ для позиции по EURUSD используя цену GBPUSD. Терминал против этого ничего не должен иметь.

№2. Баг терминала. Если этот СЛ срабатывает по несуществующей на тот момент цене в потоке EURUSD, используя цену GBPUSD.

 

Andrey Barinov:

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Видимо при отправке запроса на модификацию, приоритет имеет поле position а не symbol. Распечатайте req.position

Да, вы оказались правы, моя ошибка логическая:

в структуре:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

фактический номер позиции для GBPUSD #4

при выполнении OrderSend тестер устанавливает стоп для символа, соответствующего позиции #3, это eurusd.

Ошибки тестера:

- не проверяет соответствие  m_request.position и m_request.symbol;

- устанавливает стоп 1.60704 для бай позиции, символ eurusd, у которого текущая цена 1.30935;

- на следующем тике исполняет стоп по цене 1.60704, хотя фактическая цена 1.30935.

Всем спасибо. Надеюсь разработчики платформы увидят пост.

 
Aleksey Sergan:

 

Да, вы оказались правы, моя ошибка логическая:

в структуре:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

фактический номер позиции для GBPUSD #4

при выполнении OrderSend тестер устанавливает стоп для символа, соответствующего позиции #3, это eurusd.

Ошибки тестера:

- не проверяет соответствие  m_request.position и m_request.symbol;

- устанавливает стоп 1.60704 для бай позиции, символ eurusd, у которого текущая цена 1.30935;

- на следующем тике исполняет стоп по цене 1.60704, хотя фактическая цена 1.30935.

Всем спасибо. Надеюсь разработчики платформы увидят пост.

Исполнение стопа для бай позиции по 1.60704 при текущей цене 1.30935 не является ошибкой. А вот установка для бай стопа на уровень 1.60704 при текущей цене 1.30935 это ошибка.

 

Билд 2007

Функция:

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение.

Ошибка? - или я делаю что то не так

 
Andrey Dik:

Билд 2007

Функция:

в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение.

Ошибка? - или я делаю что то не так

DEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0

 
Andrey Barinov:

DEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0

ну так берётся же первая с конца списка, должна быть OUT

 
Andrey Dik:

ну так берётся же первая с конца списка, должна быть OUT

Если в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь.

 
Andrey Barinov:

Если в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь.

нет, так же 0.0

 
Andrey Dik:

нет, так же 0.0

Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте.

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