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

Igor Makanu:

вот подобрал решение, но по моему что то не учел

По логике все верно.

yiduwi:

Ух, без единицы, вообще стрелка ставится на третий бар, Код небольшой, где я напортачил?

На первый бар ставится, если так Не понимаю.

наверное так, но под МТ5 толком не пишу, могу ошибиться 

//+------------------------------------------------------------------+
//|                                                          tst.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

input int Pips=5;
//--- indicator buffers
double         BufferUP[];
double         BufferDN[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=rates_total-prev_calculated;
   if(limit>1 || prev_calculated==0)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Igor Makanu:

наверное так, но под МТ5 толком не пишу, могу ошибиться 

Тоже, на второй бар ставит у меня)

Igor Makanu:

спасибо, это одна из ошибок, но все равно не соображу как получить из 159 002 секунд 44 часов 10 минут 2 секунд (онлайн калькулятор )) )


вот подобрал решение, но по моему что то не учел

2019.06.18 11:46:22.691 tstss EURUSD,H1: h = 44 , m = 10 , s = 2

По моему так проще

 int timeinsec = 159002;
 int sec = timeinsec%60;
 int min = ((timeinsec-sec)%3600)/60;
 int hou = (timeinsec-sec-min)/3600;
yiduwi:

Тоже, на второй бар ставит у меня)

должен стрелку ставить только там где условие выполняется, да кстати вспомнил для МТ5 лучше условие полное провисать:

if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i]; else BufferDN[i]=EMPTY_VALUE;
Alexey Viktorov:

По моему так проще

годится! спасибо! да примерно такое и хотел!

Есть код в котором много вызовов Print. Нельзя как нибудь без убирания из кода Print быстро все их отключить \ Включить обратно ?  Пока только такой вариант вижу:
bool L=true;
if(L)Print("123");

Т.е заменить все "Print(" На  "if(L)Print(" , может ещё какие нибудь варианты есть ?

pivomoe:
Есть код в котором много вызовов Print. Нельзя как нибудь без убирания из кода Print быстро все их отключить \ Включить обратно ?  Пока только такой вариант вижу:

Т.е заменить все "Print(" На  "if(L)Print(" , может ещё какие нибудь варианты есть ?

Во входных параметрах вывести флаг "Печать". Работать будет как и Ваш код, только сам флаг (переменная bool) будет во входных параметрах.

Здравствуйте !

Оптимизация по всем символам в тестере МТ5 отказывается работать...

Просветите пожалуйста, как ее уговорить ?

СПАСИБО.

yiduwi:

Благодарю.

Igor Makanu:... должен стрелку ставить только там где условие выполняется ...

Однако, ставит на второй бар. 


Направление индексации индикаторного буфера проверьте.

Artyom Trishkin:

Направление индексации индикаторного буфера проверьте.

Что проверять, вот этот код на какой бар должен ставить стрелку?

 {
//---
   int limit=rates_total-prev_calculated;
   if(limit>1 || prev_calculated==0)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i]; else BufferDN[i]=EMPTY_VALUE;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }