Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 869

 
Sergey Savinkin:

Работает. ))

А какой умный движок форума... Сам ссылку дал туда где полная инструкция по вставке кода.

 
Alexey Viktorov:

И действительно... зачем стремиться быть лучше...

Посчитай сколько лишнего кода в этих функциях понаписано и сколько кода ты пишешь вызывая эти самописные функции.

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

Если разница будет в 0,1 секунду по итогам года, то есть ли смысл заморачиваться?

Можете показать мастерство, как этот код сделать без функций и ускорить его работу?

 
Aleksey Vyazmikin:

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

Если разница будет в 0,1 секунду по итогам года, то есть ли смысл заморачиваться?

Можете показать мастерство, как этот код сделать без функций и ускорить его работу?

Так у тебя всё написано. Только всё это завёрнуто под mql4. Разве нельзя обойтись без такой обёртки?

А это

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

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Aleksey Vyazmikin, 2018.05.24 12:30

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

ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);

      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);
      default: return(PERIOD_CURRENT);
     }
  }

просто тихий ужас... К чему это всё???

А в общем-то здесь не курсы. Извини, больше не критикую.

 
Alexey Viktorov:

Так у тебя всё написано. Только всё это завёрнуто под mql4. Разве нельзя обойтись без такой обёртки?

А это


просто тихий ужас... К чему это всё???

А в общем-то здесь не курсы. Извини, больше не критикую.

Ну, раз нет желания показать, как лучше начинающим...

Не вижу ужаса, в MT4 временной период часто обозначают цифрами, кратными минутам, что уже в MT5 делать не логично, но позволяет легче портировать код.

 
Aleksey Vyazmikin:

Ну, раз нет желания показать, как лучше начинающим...

Не вижу ужаса, в MT4 временной период часто обозначают цифрами, кратными минутам, что уже в MT5 делать не логично, но позволяет легче портировать код.

Зачем имея это, переводить в количество минут и потом возвращать это взад???

Разве 16408 более понятно чем PERIOD_D1 или 49153 понятней чем PERIOD_MN1

Периоды графиков - Константы графиков - Стандартные константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Стандартные константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql4-программа. Перечисление ENUM_TIMEFRAMES содержит значения стандартных таймфреймов, онлайновые графики финансовых...
 

Здравствуйте, в советнике хочу узнать текущее значение ATR со старшего периода графика. Целое значение.

#include <Trade\SymbolInfo.mqh> 
CSymbolInfo    m_symbol;
//===
input int             ATRper=7;         //ATR Period
input ENUM_TIMEFRAMES ATRtimeframe=PERIOD_CURRENT;//«Time_Frame_ ATR»
int            handle_iCustom;
double atr_tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   handle_iCustom=iATR(m_symbol.Name(),ATRtimeframe,ATRper);
//--- if the handle is not created 
   if(handle_iCustom==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int Bar_=0;
   atr_tp= iCustomGet(handle_iCustom  ,0,Bar_);
   atr_tp=NormalizeDouble(atr_tp,Digits())/_Point;
   atr_tp=(int)atr_tp;
   Comment("atr_",atr_tp);
  }
//+------------------------------------------------------------------+
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }
///

Где ошибка?

 
lil_lil:

Здравствуйте, в советнике хочу узнать текущее значение ATR со старшего периода графика. Целое значение.

Где ошибка?

А что пишет-то? На что ругается?

 
Sergey Savinkin:

А что пишет-то? На что ругается?

Не ругается, врёт. Индикатор на старшем показывает "8", а в коменте советник пишет "6" 

 
lil_lil:

Не ругается, врёт. Индикатор на старшем показывает "8", а в коменте советник пишет "6" 

Запустил я Ваш советник на периоде 5 минут, период АТР 14, тайм-фрейм АТР - 1 час. Все показывает ровно, как в комментариях, так и на графике.

 
lil_lil:

Да он у меня и на текущем врёт, при ATRtimeframe=PERIOD_CURRENT


Сдается мне, дело здесь совсем не в коде. Вот мой PERIOD_CURRENT


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