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

 

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

Можно проверить запустив эксперт МА из стандартных примеров, с параметрами по умолчанию.

Для некоторых дат спред завышается с 2-5 до 200 - 500 на целые сутки с 0:00 до 23:59. Проверено на 2-х ДЦ - видимо проблема не в котировках, а в самом тестере.

Вот пример для даты 16.10.2017. Тест надо запускать с 16.10.2017. На заднем плане терминал с прокрученым на эту дату графиком - там спред в нормальном диапазоне.

Другой пример на др. ДЦ

Делаю эксперт который контролирует спред и именно эти 200 - 500 он и видит. В результате целый день работа не по алгоритму.

Другая найденная дата 19.09.2017.  Прогнал тест с сентября до сегодня - около 20-30% дней с завышенным спредом. Видел завышение до 2000.

Отправляю в СД.

PS. Ответили. В новом билде будет исправлено.
 
elibrarius:

...

Отправляю в СД.

Тоже жду ответа по этому вопросу:

Открыта, Начата: 2017.12.16 14:36, #1911211

 

OrderSend на MetaQuotes-Demo зависает - иногда несколько секунд выполняется, иногда не снять скрипт (только через закрытие терминала).

 
Сразу несколько ошибок в TRADE_ACTION_CLOSE_BY
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  MqlTradeRequest Request = {0};
  MqlTradeResult Result;      
      
  Request.action = TRADE_ACTION_CLOSE_BY;
  Request.position = OrderSend(_Symbol, OP_SELL, 0.01, Bid, 100, 0, 0);
  Request.position_by = OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);

  Request.symbol = _Symbol; // Если убрать эту строку, то сообщения в логе изменятся

  Print(OrderSend(Request, Result)); // false
}

Результат

'7489613': instant sell 0.01 GBPUSD at 1.34334 (deviation: 100)
'7489613': accepted instant sell 0.01 GBPUSD at 1.34334 (deviation: 100)
'7489613': deal #176902665 sell 0.01 GBPUSD at 1.34334 done (based on order #193547458)
'7489613': order #193547458 sell 0.01 / 0.01 GBPUSD at 1.34334 done in 73.458 ms
'7489613': instant buy 1.00 GBPUSD at 1.34342 (deviation: 100)
'7489613': accepted instant buy 1.00 GBPUSD at 1.34342 (deviation: 100)
'7489613': deal #176902666 buy 1.00 GBPUSD at 1.34342 done (based on order #193547459)
'7489613': order #193547459 buy 1.00 / 1.00 GBPUSD at 1.34342 done in 76.044 ms
'7489613': failed close position #193547459 buy 0.99 GBPUSD by position #193547458 [Invalid request]


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

 

Баг Стилизатора ME МТ4/МТ5

 #define f(x) x   //пробел вначале строки и перед конечным выражением
#define f(x) x    //стилизатор удалил пробел в начале строки. Пробел перед конечным выражением остался

 #define f(x) (x)   //пробел вначале строки и перед конечным выражением, ЗАКЛЮЧЕННЫМ В СКОБКИ
#define f(x)(x) //стилизатор удаляет не только пробел в начале строки, но и разделяющий пробел между аргументом и конечным выражением. 

//В итоге компилятор выдает ошибку во втором случае
//'(' - unexpected in macro definition

 

Реальные тики М1. При отрицательном спреде в окне данных тестера (виз. режим) спред становится неправильным. Ваш сервер, 2017.10.23 01:00 и 01:01 минуты

Сделал эксперт который проверяет спред. При отрицательном спреде эксперт видит неправильный спред, - увеличенный на 1. На скриншоте -1 в эксперте, -2 на графике. При положительном спреде - в эксперте все правильно.

Спред на реальных тиках может сильно отличаться от спреда по ценам открытия. Вот пример с разницей в 39 пт. 2017.10.23 00:53
По ценам открытия:


По
реальным тикам:

Что то мне казалось, что должно соответствовать в обоих режимах...

 
elibrarius:

Сделал эксперт который проверяет спред. При отрицательном спреде эксперт видит неправильный спред, - увеличенный на 1. На скриншоте -1 в эксперте, -2 на графике. При положительном спреде - в эксперте все правильно.

Уверен, что Вами допущена ошибка в коде при вычислении спреда. Если не найдете, покажите код.

 

а что случилось с функциями Copy... ? раньше они возвращали тайм-серию, а сейчас нет:


в принципе не сложно самому развернуть индексацию массива, но прежний код где использовал функции разворачивающие тайм-серии после Copy... наверное теперь работать не будут
 
Konstantin:

а что случилось с функциями Copy... ? раньше они возвращали тайм-серию, а сейчас нет:


в принципе не сложно самому развернуть индексацию массива, но прежний код где использовал функции разворачивающие тайм-серии после Copy... наверное теперь работать не будут

Изначально так и было и в справке об этом написано.


 
fxsaber:

Уверен, что Вами допущена ошибка в коде при вычислении спреда. Если не найдете, покажите код.

Хм. Ну найдите  )))

int OnInit()
  {
   return(INIT_SUCCEEDED);
}

void OnTick()
  {
  int s[];
  CopySpread(_Symbol,_Period,0,1,s);
  Print(s[0]);
  }

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