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

 

Сравнил Свопы тестера MQ и по алгоритму от fxsaber.
Почти полностью совпадают.
В алгоритме от fxsaber за выходные дни 25 дек и 1 янв берутся свопы, как за рабочий день. Тестер MQ за эти дни своп не берет. Не знаю какой вариант правильнее.

И еще в тестере MQ нашлась непонятная ситуация:



N Ticket Magic OpenTime CloseTime LengthTime TurnOver Symbol Type Lots OpenPrice StopLoss TakeProfit ClosePrice Commission Swap
233 465 100000231 2016.11.28 14:36:36.502 2016.11.30 13:16:45.241 1d 22:40:08.739 212 501.00 EURUSD buy 1.00 1.05853

1.06648
-2.80 (-2.80)

Сделка с 28 по 30 ноября прошедшая 2 ролловера (пн-ср) взяла 4 свопа вместо 2-х.
Для воспроизведения можете открыть и закрыть эту сделку по времени.
Могу предположить что *3 своп перенесся с дня благодарения 24 ноября, но там была сделка с 15 по 25 ноября, своп за нее взялся правильно (а не с -2 свопа).

 

И еще

С 11 по 15 сентября 2017 (пн-пт) прошло 4 дня. Т.к. был проход через четверг, то должно быть 1+1+3+1=6 свопов. Но взято почему то 8.

Опять хитроумные формулы не справились (((( У fxsaber-a тоже хитроумная, но видно, что она считает правильнее, может у него скопировать? Но она выходные не учитывает.
А может просто в цикле, с даты открытия по дату закрытия пройтись, и начислить за каждый день недели нужный своп ( 1+1+3+1=6 )? Учесть выходные, если надо. Так надежность 100%-ная будет. И не надо голову ломать с формулой без циклов. Уже год ломаете... и 3 или 4 попытки исправления было и вот опять надо.

 
Баг. Функция CharArrayToString(buffer, 0, WHOLE_ARRAY, CP_UTF8) не убирает начальный BOM из потока utf-8, то есть полученная строка начинается с символов 0xEF,0xFF,0xBF (если они были в файле), которые, кстати говоря, не убираются функциями StringTrimLeft/StringTrimRight и это сказывается на работоспособности дальнейшего парсинга. BOM является техническим флагом о кодировке, а не частью информации, переведенной в 2-байтовую строку, для которой BOM - это уже нонсенс.
 
Forester #:

Опять хитроумные формулы не справились (((( У fxsaber-a тоже хитроумная, но видно, что она считает правильнее, может у него скопировать? Но она выходные не учитывает.

Вроде, и не должна.

А может просто в цикле, с даты открытия по дату закрытия пройтись, и начислить за каждый день недели нужный своп ( 1+1+3+1=6 )? Учесть выходные, если надо. Так надежность 100%-ная будет. И не надо голову ломать с формулой без циклов.

Свопы в Тестере начисляются (должны) во время жизни позиции, а не по ее закрытии. Как и в реальности происходит. Если какая-то закрытая позиция получила неправильный своп, надо смотреть, как это происходило во время жизни этой позиции.

 
fxsaber #:

Вроде, и не должна.

Если за праздники должны браться свопы, значит это тоже баг MQ.
Тогда вот примеры, когда тестер MQ не взял свопы:
Рождество:

MQ


141 281 100000139 2015.12.23 17:58:35.000 2015.12.28 00:29:23.000 4d 06:30:48.000 218 543.00 EURUSD buy 1.00 1.08839

1.09704
-2.10 (-2.10)

Среда - понедельник. Должно быть 3+1+1 = 5 свопов.
MQ взяло 3 свопа.

По fxsaber формуле

141 141 100000139 2015.12.23 17:58:35.000 2015.12.28 00:29:23.000 4d 06:30:48.000 218 543.00 EURUSD buy 1.00 1.08839

1.09704
-3.50 (-3.50)

Взято 5 свопов, т.е. правильно.

Ну там вообще куча несовпадений в декабре-январе. Проще GIF анимацией показать:

Но до этого целый год было точное совпадение свопов. И потом еще год до  2016.11.28 совпадает. 

 
Forester #:

Рождество:

Надеюсь, в Тестере не отслеживаются праздники, т.к. это доп. тормоза из-за ерунды полной.

Начисляются ли в реале свопы на Рождество - надо анализировать историю реала.

 
fxsaber #:

Надеюсь, в Тестере не отслеживаются праздники, т.к. это доп. тормоза из-за ерунды полной.

Начисляются ли в реале свопы на Рождество - надо анализировать историю реала.

Не, думаю с праздниками я неверно предположил, т.к. там много других дней с багами, см. Gif-ку
 

Вводит в ступор сообщение об ошибке:

template<typename T>
void Func(T &a[], T v)
{
}

void OnStart()
{
   static const ushort ctrl[] = {'{', '}', '[', ']'};
   string str = "a";
   Func(ctrl, str[0]); // <-- template parameter ambiguous, could be 'ushort' or 'ushort'
}

Могли бы все-таки и подсказать, что дело в модификаторе const, который во втором параметре неявно затесывается в T. Но справедливости ради, оператор строка[] тоже возвращает const, т.к. строку через него нельзя править. Так что в любом случае неувязочка.

 
Forester # :

Если за праздники должны браться свопы, значит это тоже баг MQ.
Тогда вот примеры, когда тестер MQ не взял свопы:
Рождество:

MQ


141 281 100000139 2015.12.23 17:58:35.000 2015.12.28 00:29:23.000 4d 06:30:48.000 218 543.00 EURUSD buy 1.00 1.08839

1.09704
-2.10 (-2.10)

Среда - понедельник. Должно быть 3+1+1 = 5 свопов.
MQ взяло 3 свопа.

По fxsaber формуле

141 141 100000139 2015.12.23 17:58:35.000 2015.12.28 00:29:23.000 4d 06:30:48.000 218 543.00 EURUSD buy 1.00 1.08839

1.09704
-3.50 (-3.50)

Взято 5 свопов, т.е. правильно.

Ну там вообще куча несовпадений в декабре-январе. Проще GIF анимацией показать:

Но до этого целый год было точное совпадение свопов. И потом еще год до  2016.11.28 совпадает. 

Даже если бы расчет свопов был правильным, это не имеет значения, поскольку нет истории свопов. Поэтому используются свопы на момент запуска бэктеста, а не реальные свопы на момент истории. Поэтому результаты свопов Тестера НИКОГДА не соответствуют действительности.

 
Alain Verleyen #:

Даже если бы расчет свопов был правильным, это не имеет значения, поскольку нет истории свопов. Поэтому используются свопы на момент запуска бэктеста, а не реальные свопы на момент истории. Поэтому результаты свопов Тестера НИКОГДА не соответствуют действительности.

Предлагаете пользоваться программой, которая неточные данные еще и неверно складывает? Простейшие 1+1+3+1 не могут сложить.... 1-й класс школы! Если в примитивных вычислениях заблудились (как в 3-х соснах), как можно доверять, что в более сложных все в порядке?
А то, что история свопов не сохраняется, я в курсе. Пускай складывает последние свопы, но правильно!