Особенности языка mql5, тонкости и приёмы работы - страница 291

 

Вот результат работы функции PrintEnum<ENUM_TIMEFRAMES>();

вывод:

 enum ENUM_TIMEFRAMES
   {
    PERIOD_CURRENT = 0,
    PERIOD_M1 = 1,
    PERIOD_M2 = 2,
    PERIOD_M3 = 3,
    PERIOD_M4 = 4,
    PERIOD_M5 = 5,
    PERIOD_M6 = 6,
    PERIOD_M10 = 10,
    PERIOD_M12 = 12,
    PERIOD_M15 = 15,
    PERIOD_M20 = 20,
    PERIOD_M30 = 30,
    PERIOD_H1 = 16385,
    PERIOD_H2 = 16386,
    PERIOD_H3 = 16387,
    PERIOD_H4 = 16388,
    PERIOD_H6 = 16390,
    PERIOD_H8 = 16392,
    PERIOD_H12 = 16396,
    PERIOD_D1 = 16408,
    PERIOD_W1 = 32769,
    PERIOD_MN1 = 49153,
   };
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

amrali, 2025.02.14 05:37

#define  PROPERTIES1(function, enumtype) \
   for(int i=-2; i<USHORT_MAX+1000; ++i) \
     { \
      enumtype prop_id = (enumtype)i; \
      if(StringFind(EnumToString(prop_id),"::")<0) \
         Print(EnumToString(prop_id),"=",function(prop_id)); \
     }

Это гораздо дороже, чем анализировать _LastError.


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

 
fxsaber #:

Это гораздо дороже, чем анализ _LastError.


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

Это одноразовые помощники, а не критичный по времени код. Для пользователя нет никакой разницы, заняло ли это 10 наносекунд против 100 наносекунд :)

Мне плевать на использование процессора и счета за электричество.
 
amrali #:

Это одноразовые помощники, а не критичный по времени код. Для пользователя нет никакой разницы, заняло ли это 10 наносекунд против 100 наносекунд :)

Зачем делать не оптимально?

 
fxsaber #:



Это уже задокументировано. Не смешивайте пулы истории из разных источников.



 
amrali #:

Это уже задокументировано. Не смешивайте пулы истории из разных источников.

Просто пытаюсь использовать вашу функцию.

// Пробуем распечатать все балансовые сделки.
void OnStart()
{
  if (HistorySelect(0, INT_MAX))
    for (uint i = HistoryDealsTotal(); (bool)i--;)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      if (HistoryDealGetInteger(Ticket, DEAL_TYPE) == DEAL_TYPE_BALANCE)
        PrintDeal(Ticket);
    }
}

Короче, указал на архитектурную ошибку и привел пример ее проявления. От результатов обсуждения ошибка никуда не исчезнет.

 
fxsaber #:

Просто пытаюсь использовать вашу функцию.

Короче говоря, я указал на архитектурную ошибку и привел пример ее проявления. Ошибка не исчезнет от результатов обсуждения.

Тогда не забудьте переименовать мою функцию в:
SelectPrintDeal(), чтобы избежать путаницы.
 
amrali #:
Тогда не забудьте переименовать мою функцию в:
SelectPrintDeal(), чтобы избежать путаницы.

Пожалуйста, если допускаете ошибки в коде в данной ветке, исправляйте их, а не упражняйтесь в остроумии.

 
fxsaber #:

Пожалуйста, если вы допустили ошибки в коде в этой теме, исправьте их, а не упражняйтесь в остроумии.

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

В моем коде нет ошибок, ошибки на самом деле в том, как вы пытаетесь приспособить функцию к ситуации, которая на самом деле задокументирована на странице документации платформы.

К вашему сведению, администрация форума должна решать за пользователей, что им писать или не писать в этой теме.
 
amrali #:
В моем коде нет ошибок

  1. Указание на ошибку.
  2. Пример использования.

Просьба читателей высказаться.