MQL5: Примеры. - страница 3

 
  • 6. Сравнение двух double чисел

О вещественных числах: Вещественные типы (double, float).

Для сравнения двух double чисел применима такая функция:

//+------------------------------------------------------------------+
//| Compare doubles                                                  |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2,int digits)
  {
   if(NormalizeDouble(number1-number2,digits)==0)
      return(true);
   else
      return(false);
  }

Параметры

number1, number2

сравниваемые числа

digits

точность сравнения

Возвращаемое значение

true - если числа number1 и number2 одинаковые (с учетом digits), false - если числа number1 и number2  разные (с учетом digits)

Примечание

точность сравнения рекомендуется брать равной Digits() для данного символа, на котором сравниваются два double значения.

 
Vladimir Karputov:
  • 6. Сравнение двух double чисел

О вещественных числах: Вещественные типы (double, float).

Для сравнения двух double чисел применима такая функция:

Параметры

number1, number2

сравниваемые числа

digits

точность сравнения

Возвращаемое значение

true - если числа number1 и number2 одинаковые (с учетом digits), false - если числа number1 и number2  разные (с учетом digits)

Примечание

точность сравнения рекомендуется брать равной Digits() для данного символа, на котором сравниваются два double значения.

Предлагаю назвать эту функцию "Highly_Likely", чтобы соответствовало английскому языку ))

 
Sergey Chalyshev:

Предлагаю назвать эту функцию "Highly_Likely", чтобы соответствовало английскому языку ))

Фу. Показалось :)

 
Vladimir Karputov:
  • 6. Сравнение двух double чисел

О вещественных числах: Вещественные типы (double, float).

Для сравнения двух double чисел применима такая функция:

...

Приведенный код лучше заменить на этот:

bool DoubleEquals(double a, double b)
{
   return(fabs(a-b)<=16*DBL_EPSILON*fmax(fabs(a),fabs(b)));
}
 
Vasiliy Sokolov:

Приведенный код лучше заменить на этот:

Объяснишь?

 
Artyom Trishkin:

Объяснишь?

https://www.mql5.com/ru/forum/3872

сравнение на равенство вещественных чисел, в последний раз, надеюсь
сравнение на равенство вещественных чисел, в последний раз, надеюсь
  • 2011.05.29
  • www.mql5.com
Общее обсуждение: сравнение на равенство вещественных чисел, в последний раз, надеюсь
 

Что-то вас носит из одной темы в другую... 

Начали про ордера и позиции так и продолжайте.  Редко пишу под МТ5, но с введением хеджевых счетов появились сложности в подсчете текущей позиции. Закрытие позиции по одному инсрументу по разным признакам . Например по мин и максимальному убытку. 

Так же подсчет последних позиций в истории. Ну например, если последние сделки были Бай то подсчитать финансовый результат по 3 последним сделкам. именно в Бай и по одному инструменту.

 

Самая частая функция, которая применяется - это подсчёт количества позиций по текущему символу (символу на котором запущен эксперт) и с заданным (во входных параметрах эксперта) идентификатором эксперта (Magic number).

Пример эксперта во входных параметрах которого указан только идентификатор (Magic number). Для работы понадобиться подключить торговый класс CPositionInfo и объявить "m_position" - объект класса CPositionInfo.

//+------------------------------------------------------------------+
//|                                        CalculateAllPositions.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property description "Calculate all positions"
#include <Trade\PositionInfo.mqh>
CPositionInfo  m_position;                   // trade position object
//--- input parameters
input ulong    m_magic=15489;                // magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {


Сама функция, которая возвращает количество позиций по текущему символу и заданному идентификатору эксперта:

//+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
int CalculateAllPositions()
  {
   int total=0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
            total++;
//---
   return(total);
  }

В этой функции организован цикл по всем позициям в терминале. В цикле выбираем каждую позицию по её индексу в списке позиций (метод CPositionInfo::SelectByIndex). Если позиция выбралась, то получаем её свойства (CPositionInfo::Symbol и CPositionInfo::Magic).


Окончательный пример в эксперте "CalculateAllPositions.mq5" - на каждом тике выводится количество позиций по текущему символу и заданному идентификатору эксперта. Это облегчённый пример - в реальности на каждом тике не нужно получать количество позиций. Например тригером срабатывания проверки позиций может служить событие в OnTradeTransaction.

Файлы:
 
  • 2.8. iMomentum (handle_iMomentum)

...

 

...