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

 
Urain:

Тогда внесите предложение в профильную ветку (всё же ошибки то нет).

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

 

Читал вот эту статью "Пошаговое руководство по написанию MQL5-советников для начинающих"  https://www.mql5.com/ru/articles/100 нашел в ней следующие строки:


Для 3-х и 5-ти значных котировок мы умножаем значения Stop Loss и Take Profit на 10.

Примерно тоже самое есть и в "MACD sample", который идет с терминалом:

//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

   m_adjusted_point=m_symbol.Point()*digits_adjust;

Что это за действие? Зачем умножать на 10 переменные при количестве знаков 3 и 5 после запятой?

Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
progeon:

Читал вот эту статью "Пошаговое руководство по написанию MQL5-советников для начинающих"  https://www.mql5.com/ru/articles/100 нашел в ней следующие строки:

Для 3-х и 5-ти значных котировок мы умножаем значения Stop Loss и Take Profit на 10.

Примерно тоже самое есть и в "MACD sample", который идет с терминалом:

//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

   m_adjusted_point=m_symbol.Point()*digits_adjust;

Что это за действие? Зачем умножать на 10 переменные при количестве знаков 3 и 5 после запятой?

Это для тех товарищей, которые привыкли всё считать в пунктах четырёхзнака, и перестраиваться не желают.

Таким образом задав в параметрах 100 пунктов стоплосс, получается пересчёт на пятизнаке в 1000 пунктов, а на четырёхзнаке 100 пунктов что одно и тоже.

Четырёхзнак имеет свои преимущества, лёгкость пересчёта прибыли, 1 пункт 1% от вложенных средств.

 
progeon:

Читал вот эту статью "Пошаговое руководство по написанию MQL5-советников для начинающих"  https://www.mql5.com/ru/articles/100 нашел в ней следующие строки:

Для 3-х и 5-ти значных котировок мы умножаем значения Stop Loss и Take Profit на 10.

Примерно тоже самое есть и в "MACD sample", который идет с терминалом:

//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;

   m_adjusted_point=m_symbol.Point()*digits_adjust;

Что это за действие? Зачем умножать на 10 переменные при количестве знаков 3 и 5 после запятой?


Для лучшей совместимости с разными брокерами (предоставляющих 4- или 5-значные котировки), то есть без необходимости изменять параметры советника.

Этот алгоритм исходит из того что у брокеров предоставляющих 4-значные котировки  _Digits может быть 4 или 2(как правило в парах там где есть JPY),

а в 5-значных 5 и 3 соответственно.

Хотя меня и самого интересует безопасность такого метода, так как вроде есть и инструменты с другим  значением _Digits.

Лично я проверяю по "EURUSD". Но в MT4 по крайней мере есть и такие брокеры у которых евродоллар имеет немного другое название, например  EURUSD_fx

или что то в этом роде.

 
crOss:
пункты 1 и 2 уходят, если фиксировать правое время на момент начала теста/оптимизации.
никто не просит актуальность до секунды... но один торговый день - это, извините, ни в какие ворота.

Urain:

Тогда придётся вводить не только год месяц число, но и час:минуты окончания.

Не обязательно.  Время можно фиксировать чисто программно в момент запуска теста/оптимизации.

Честно сказать, нахожу предложение вполне здравым. Я - за.

Мне оно сейчас неактуально, но возможно скоро будет очень желательно.

 
Urain:

Это для тех товарищей, которые привыкли всё считать в пунктах четырёхзнака, и перестраиваться не желают.

Таким образом задав в параметрах 100 пунктов стоплосс, получается пересчёт на пятизнаке в 1000 пунктов, а на четырёхзнаке 100 пунктов что одно и тоже.

Четырёхзнак имеет свои преимущества, лёгкость пересчёта прибыли, 1 пункт 1% от вложенных средств.

Ясно, продолжаем) Такой вопрос - в той же статье при формировании стоплосса и тейкпроффита используется функция NormalizeDouble зачем? Вроде как бессмысленно.

mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5
 
progeon:

Ясно, продолжаем) Такой вопрос - в той же статье при формировании стоплосса и тейкпроффита используется функция NormalizeDouble зачем? Вроде как бессмысленно.

Нет никакой бессмысленности, при вычислении уровня производятся операции с дублями, и результат будет не нормализованным, если передадите серверу как есть то получите реквот. Поэтому делается нормализация результата вычислений.
 
Urain:
Нет никакой бессмысленности, при вычислении уровня производятся операции с дублями, и результат будет не нормализованным, если передадите серверу как есть то получите реквот. Поэтому делается нормализация результата вычислений.
Стопрлосс допустим 100, point 0,00001. что может возникнуть при их умножении? 9-ки где-нибудь всплывут? Например, 0,0009999?
 
progeon:
Стопрлосс допустим 100, point 0,00001. что может возникнуть при их умножении? 9-ки где-нибудь всплывут? Например, 0,0009999?
   double a=1.45861+32*_Point;
   Print(DoubleToString(a,16));

Вроде вполне нормальное число должно выйти 1.45893, а получаем  1.4589300000000002

 
Renat:

Мы планировали сделать вкладку "Безопасность" в информации об эксперте, где показывается уровень безопасности и список вызываемых DLL функций.

Как раз к запуску магазина будет большая работа над EX5 файлами - тогда и реализуем.

Ренат, есть еще два вопроса про вызовы DLL в новом формате EX5.

1. Как будет себя вести код при отключенных вызовах? Как сейчас - даже не запускаться?

2. Если не будет запускаться, то зачем имеется MQL5_DLLS_ALLOWED / TERMINAL_DLLS_ALLOWED?

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