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

 

Придется помочь...
Оба бага обнаружил таким алгоритмом расчета свопов и последующего сравнения. 
Логика простейшая, как тут можно столько багов наделать? (Год назад тоже исправления свопов были)

double  SWAPS_BY_DAYS[7]={0,1,1,3,1,1,0};//установить из спецификации
datetime Rollover_Time = ((datetime)SWAP_TIME % 86400);// время ролловера, обычно 00:00:00
datetime NextRollOwerTime = ((TimeDay(StartTime)) * 86400) + Rollover_Time;//ролловер 1го дня теста = начало дня + время ролловера

void OnTick(void){
   static MqlTick Tick; 
   if (!SymbolInfoTick(_Symbol, Tick)){ return;}
   if(Tick.time >= NextRollOwerTime ){ CalcSwapDaily ( Tick ); }
}

void CalcSwapDaily ( const MqlTick &Tick ){
   while (Tick.time >= NextRollOwerTime ){//на случай, если прошло несколько дней (праздничные дни). Посчитает своп каждому прошедшему без тиков дню
      for (int i =0; i < Orders; i++){
         swapFor1Day = ...;//расчет свопа каждой позиции/сделке 
         swapTotal += swapFor1Day * SWAPS_BY_DAYS[ TimeDayOfWeek( NextRollOwerTime - 86400 ) ];// c предыдущего дня (- 86400) на текущий;
      }
      this.NextRollOwerTime += 86400;//+1 день 
   }
}
int TimeDay ( datetime time ){return((int)( time / 86400));}//current Day from on 1 Jan 1971
int TimeDayOfWeek( datetime time ){return((int)((time / 86400 + THURSDAY) % 7));}//current DayOfWeek. 86400 sec in day.  7 days in week.  THURSDAY on 1 Jan 1971
 
Aleksei Kuznetsov # :

b5739
Анализировал логи с сделками в MТ тестере и обнаружил дни двойных свопов.

Двойной своп был взят за сделку с 2 на 3 января 2024 (вторник на среду). Есть зависимость от даты начала теста.

Тестовый эксперт. ДЦ - MQ demo. EURUSD . Реальные тики.

Сецификация

Запуск теста с 2023.12.20

Взято 2 свопа по -0.7

Запуск тестрера с 2023.12.31 или с 1 января 2024


Взят 1 своп

Так как есть зависимость от даты старта теста, очевидно, что это баг.

Подтверждено и передано в MQ.
 
Aleksei Kuznetsov # :

Эксперт тот же, меняем только даты (см в коде)

EURUSD

Взято 6 свопов. Правильно.

Меняем символ на XAUUSD


Тестируем с теми же датами

Взято 5 свопов. -4.6*5=-23
Почему не 6 как для EURUSD? Баг?

У вас прописаны разные алгоритмы расчета свопов для разных символов? Результаты простейшей функции на складывание!!! чисел отличаются. Видимо их 2 - одна с багом, другая без. Там ИИ что ли кодил, не понимая простейшую логику? 

Подтверждено и передано в MQ.
 
Alain Verleyen #:
Подтверждено и передано в MQ.

Можно исправить эти 2 мелочи пожалуйста: 

https://www.mql5.com/ru/forum/505987/page9#comment_59387580

https://www.mql5.com/ru/forum/505987/page9#comment_59388827

---

а также чтобы при нажатии Ctrl + A в этом маленьком окошке ввода (открывается при нажатии Enter) выделялся текст, а не происходило то, что происходит сейчас (не нашёл эту комбинацию нигде в верхнем меню MT)


 
Andrei Iakovlev #:

Можно исправить эти 2 мелочи пожалуйста: 

https://www.mql5.com/ru/forum/505987/page9#comment_59387580

Об ошибке сообщено в службу поддержки MQ. Об этом уже сообщалось. Они работают над этим.

---

а также чтобы при нажатии Ctrl + A в этом маленьком окошке ввода (открывается при нажатии Enter) выделялся текст, а не происходило то, что происходит сейчас (не нашёл эту комбинацию нигде в верхнем меню MT)


Запрос передан.
 

b5739

Тестовый эксперт. ДЦ - MQ demo. EURUSD. Реальные тики. Даты в коде.

input datetime openTime    = D'2024.12.31 11:00:00';
input datetime closeTime   = D'2025.01.02 03:00:00';
input ENUM_ORDER_TYPE otype = 0;
input double lot = 1;
#include <Trade\Trade.mqh>
CTrade ExtTrade;
void OnTick(void){
   static MqlTick Tick; static bool opened=false, closed=false;
   if (!SymbolInfoTick(_Symbol, Tick)){ return;}
   if(!opened && Tick.time>=openTime ){opened=true; ExtTrade.PositionOpen(_Symbol,otype,lot,(otype==ORDER_TYPE_SELL ? Tick.bid:Tick.ask),0,0);}
   if(!closed && Tick.time>=closeTime){closed=true; ExtTrade.PositionClose(_Symbol);}
}

Тест со вторника по четверг. 2 ролловера.
Взят 1 своп -0.7, а должно быть 1+3=4, так как среда - день тройного свопа
На XAUUSD тоже взят 1 своп.

EURUSD (Евро / Доллар США): Графики Форекс в реальном времени
EURUSD (Евро / Доллар США): Графики Форекс в реальном времени
  • 2026.03.31
  • www.mql5.com
Курс EURUSD за сегодня изменился на 0.77%. При этом минимальная цена на торгах достигала 1.15883, а максимальная — 1.17086
 
Alain Verleyen #:
Запрос передан.
Спасибо.
 
Vladislav Boyko # :

Я ожидал macro redefinition warning


Исправлено начиная со сборки 5745.
 
Andrei Iakovlev # :

The Ctrl + U character window does not remember the location of the middle line after closing.


Corrected from the assembly 5746.
 
Andrei Iakovlev # :

---

а также чтобы при нажатии Ctrl + A в этом маленьком окошке ввода (открывается при нажатии Enter) выделялся текст, а не происходило то, что происходит сейчас (не нашёл эту комбинацию нигде в верхнем меню MT)


Теперь всё работает. Сборка 5746.