Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2644

 
Vitaly Muzichenko #:

Эти объёмы только на бирже, на форекс только "тиковые"

Спасибо. К кому подсоединить хотя бы демо, чтоб эта гистограмма заработала?

 
ANDREY #:

Спасибо большое за подсказку
Поставил перед циклом for  дополнительный код и компилятор код принял. То есть, как я понял ,тем самым цикл for  переместился на локальный уровень. Не понял только об особенностях оформления цикла for на глобальном уровне, то есть, когда, как я понял основной код внутри функции OnTick()  начинается именно с этого цикла. Что нужно оформлять этот цикл другими скобками, не фигурными? Или в чем особенность оформления данного цикла в случае если он находится на глобальном уровне?

Цикл for не может быть на глобальном уровне, отсюда ошибка. Только внутри какой-нибудь функции.

Строка 

#include <ТПсл.mqh>

замещается препроцессором на содержимое из файла. Где эта строчка встретится, туда файл и вставится. Потом начинается компиляция. Фигурные скобки должны быть согласованы (с учетом вставленного файла).

 

Доброго времени суток! Ситуация такая...   Решил сделать несколько обычных линий разноцветными, и добавить разноцветные свечи... все бы хорошо !только вот, когда я пытаюсь скрыть эти линии, остальные буферы начинают жить своей непонятной жизнью! Без разноцветных все работает как надо, все скрывается и все отображается!Как это работает? что не так? Для примера сделал канал разноцветный и скрыть/показать линии.

Буду очень благодарен за помощь!

#property strict
#property copyright "MSG"
#property link      ""
#property version   "1.01"
#property indicator_chart_window
#property indicator_plots   5
#property indicator_buffers 10
#property indicator_label1  "H_Buff"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrDimGray,clrMaroon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_label2  "H_Lev_Buff"
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color2  clrDimGray,clrMaroon
#property indicator_style2  STYLE_DOT
#property indicator_width2  1
#property indicator_label3  "M_Buff"
#property indicator_type3   DRAW_COLOR_LINE
#property indicator_color3  clrDimGray,clrMaroon
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2
#property indicator_label4  "L_Lev_Buff"
#property indicator_type4   DRAW_COLOR_LINE
#property indicator_color4  clrDimGray,clrMaroon
#property indicator_style4  STYLE_DOT
#property indicator_width4  1
#property indicator_label5  "L_Buff"
#property indicator_type5   DRAW_COLOR_LINE
#property indicator_color5  clrDimGray,clrMaroon
#property indicator_style5  STYLE_SOLID
#property indicator_width5  2
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
enum SHOW_CHANNEL_LINES
  {
   SHOW_ALL,
   HIDE_LEVELS,
   HIDE_MIDDLE,
   HIDE_MIDDLE_LEVELS,
   HIDE_HIGH_LOW_LEVELS,
   HIDE_HIGH_LOW_MIDDLE,
   HIDE_ALL
  };
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
input group "<<<ChannelParameters>>>"
input int                 InpChannelPeriod = 120;
input SHOW_CHANNEL_LINES  InpShowChannel   = SHOW_ALL;
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
double H_Buff[], H_Lev_Buff[], M_Buff[], L_Lev_Buff[], L_Buff[],
       H_Col_Buff[], H_Lev_Col_Buff[], M_Col_Buff[], L_Lev_Col_Buff[], L_Col_Buff[];
//+==================================================================================+
//| Custom indicator initialization function                                         |
//+==================================================================================+
int OnInit()
  {
   SetVisual();
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
   SetIndexBuffer(0, H_Buff,         INDICATOR_DATA);
   SetIndexBuffer(1, H_Col_Buff,     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2, H_Lev_Buff,     INDICATOR_DATA);
   SetIndexBuffer(3, H_Lev_Col_Buff, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(4, M_Buff,         INDICATOR_DATA);
   SetIndexBuffer(5, M_Col_Buff,     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(6, L_Lev_Buff,     INDICATOR_DATA);
   SetIndexBuffer(7, L_Lev_Col_Buff, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(8, L_Buff,         INDICATOR_DATA);
   SetIndexBuffer(9, L_Col_Buff,     INDICATOR_COLOR_INDEX);
   int h_l_b, m_b, l_b;
   h_l_b = (InpShowChannel == HIDE_HIGH_LOW_LEVELS || InpShowChannel == HIDE_HIGH_LOW_MIDDLE ||
            InpShowChannel == HIDE_ALL)                                                        ? DRAW_NONE : DRAW_COLOR_LINE;
   m_b   = (InpShowChannel == HIDE_MIDDLE          || InpShowChannel == HIDE_MIDDLE_LEVELS ||
            InpShowChannel == HIDE_HIGH_LOW_MIDDLE || InpShowChannel == HIDE_ALL)              ? DRAW_NONE : DRAW_COLOR_LINE;
   l_b   = (InpShowChannel == HIDE_LEVELS          || InpShowChannel == HIDE_MIDDLE_LEVELS ||
            InpShowChannel == HIDE_ALL             || InpShowChannel == HIDE_HIGH_LOW_LEVELS)  ? DRAW_NONE : DRAW_COLOR_LINE;
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, h_l_b);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE, l_b);
   PlotIndexSetInteger(4, PLOT_DRAW_TYPE, m_b);
   PlotIndexSetInteger(6, PLOT_DRAW_TYPE, l_b);
   PlotIndexSetInteger(8, PLOT_DRAW_TYPE, h_l_b);
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
   ResetLastError();
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
   return(INIT_SUCCEEDED);
  }
//+==================================================================================+
//| Custom indicator de-initialization function                                      |
//+==================================================================================+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+==================================================================================+
//| 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 bar;
   int minbars = InpChannelPeriod;
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
   if(prev_calculated < minbars)
     {
      bar = minbars;
      ArrayInitialize(H_Buff,     EMPTY_VALUE);
      ArrayInitialize(H_Lev_Buff, EMPTY_VALUE);
      ArrayInitialize(M_Buff,     EMPTY_VALUE);
      ArrayInitialize(L_Lev_Buff, EMPTY_VALUE);
      ArrayInitialize(L_Buff,     EMPTY_VALUE);
     }
   else
      bar = rates_total - 1;
   for(; bar < rates_total; bar++)
     {
      int    max      = ArrayMaximum(high, bar - InpChannelPeriod + 1, InpChannelPeriod);
      int    min      = ArrayMinimum(low,  bar - InpChannelPeriod + 1, InpChannelPeriod);
      double highl    = high[max];
      double lowl     = low[min];
      double middel  = (highl + lowl)    / 2;
      double hlevl    = (highl + middel) / 2;
      double llevl    = (lowl  + middel) / 2;
      H_Buff[bar]     = highl;
      L_Buff[bar]     = lowl;
      M_Buff[bar]     = middel;
      H_Lev_Buff[bar] = hlevl;
      L_Lev_Buff[bar] = llevl;

      static int trend;
      if(H_Buff[bar] > H_Buff[bar - 1])
         trend = 0;
      if(L_Buff[bar] < L_Buff[bar - 1])
         trend = 1;
      H_Col_Buff[bar]     = trend;
      H_Lev_Col_Buff[bar] = trend;
      M_Col_Buff[bar]     = trend;
      L_Lev_Col_Buff[bar] = trend;
      L_Col_Buff[bar]     = trend;
     }
   return(rates_total);
  }

//+==================================================================================+
//| Визуальные настройки                                                             |
//+==================================================================================+
void SetVisual()
  {
   ChartSetInteger(0, CHART_SHOW_GRID, false);
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, C'18,19,22');
   ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, C'223,223,223');
   ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, C'96,97,108');
   ChartSetInteger(0, CHART_COLOR_CHART_DOWN, C'96,97,108');
   ChartSetInteger(0, CHART_COLOR_CHART_UP, C'223,223,223');
   ChartSetInteger(0, CHART_MODE, 1);
   ChartSetInteger(0, CHART_COLOR_FOREGROUND, C'134,84,51');
   ChartSetInteger(0, CHART_SHIFT, true);
   ChartSetDouble(0, CHART_SHIFT_SIZE, 10);
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHOW_VOLUMES, false);
   ChartSetInteger(0, CHART_SHOW_BID_LINE, false);
   ChartSetInteger(0, CHART_SHOW_ASK_LINE, false);
   ChartSetInteger(0, CHART_SHOW_PERIOD_SEP, false);
  }
 
Putnik #:

Цикл for не может быть на глобальном уровне, отсюда ошибка. Только внутри какой-нибудь функции.

Строка 

замещается препроцессором на содержимое из файла. Где эта строчка встретится, туда файл и вставится. Потом начинается компиляция. Фигурные скобки должны быть согласованы (с учетом вставленного файла).

Cпасибо большое за ценную информацию

 
Vitaly Murlenko #:

Спасибо. К кому подсоединить хотя бы демо, чтоб эта гистограмма заработала?

Я могу инвест скинуть
 
Roman Shiredchenko #:
Я могу инвест скинуть
Не, спасибо. Я думал, что можно без плясок с бубном обойтись.
 
Maxim Kuznetsov #:
по сути - надо экстренно вводить проф.тестирование для допуска во фриланс

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

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

Тут вопрос мотивации, тк MQL это, хоть и С-подобный, но очень узкопрофильный язык. 

Во-первых на работах, обычно, не увольняют при первой-же спорной ситуации, в которой еще и не виноват.

Во-вторых, когда потеря возможности работы на каком-то сервисе/работе, если это более популярный язык, это всего-лишь неудобства, то тут это уже проблема тк вакансии на MQL это экзотика.

 
Andrei Sokolov #:
Например сейчас заблокировали возможность брать работы после того, как после закрытия заказа, отказался бесплатно добавлять новую логику скандальному заказчику. Предполагаю что он обратился в сервис и оболгал меня, точнее не знаю тк на созданную по этому поводу заявку пока не ответили.

Вы же ему предлагали сделать оплату.

Точно до буквы, что Вы ему написали по оплате в обсуждении заказа?

 
Artyom Trishkin #:

Подскажите, пожалуйста, почему валидатор ругается




Мой прошлый индикатор с первого раза прошёл проверку, я на его шаблоне сдела другой (инит тот же). 


//+------------------------------------------------------------------+
//| Инициализация индикатора                                         |
//+------------------------------------------------------------------+
void OnInit()
  {
    SetIndexBuffer(0, ZigZagBuffer, INDICATOR_DATA);
    IndicatorSetString(INDICATOR_SHORTNAME, "SMC Structure");
    IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
    PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);    

    
    // Delete objects if reinitialization
    int deleted = 0;
    int total = ObjectsTotal(0,-1,-1); // 0 - current chart
    // Iterate objects from the end
    for (int i = total-1; i >= 0; i--)
      {
        string name = ObjectName(0, i);
        if (StringFind(name, "CP", 0) == 0) // Check name prefix
          {
            if(!ObjectDelete(0, name))
            Print("Error deleting object: ", name);
          }
      }  
     
     
   //--- ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ОТОБРАЖЕНИЯ ПУНКТОВ ---
   point_calc = MathPow(10, _Digits);
   
  }
 
Artyom Trishkin #:

Вы же ему предлагали сделать оплату.

Точно до буквы, что Вы ему написали по оплате в обсуждении заказа?

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