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

 
alex_xss:

1) Лично я согласен, и будь моя воля просто вырубил бы ее и запретил включать в коде. Но низзя)

2) Спасибо, но там не нашел решения (везде решается через объект OBJ_VLINE, мне это не подходит), копаю по-своему

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

гиморно, но при наличии вкуса и вагона времени может получиться красиво 

 
Maxim Kuznetsov:

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

гиморно, но при наличии вкуса и вагона времени может получиться красиво 

А можете ли вы написать простой пример на канвасе? плиз

Ни черта не шарю в нем, мне бы просто прямоугольник размером с чарт и линию вертикальную на нем

 
alex_xss:

А можете ли вы написать простой пример на канвасе? плиз

Ни черта не шарю в нем, мне бы просто прямоугольник размером с чарт и линию вертикальную на нем

надо позвать @Nikolai Semko он с канвасом дружит гораздо сильнее. А пока он в пути - посмотрите его профиль там много всякого на канвасе

 
alex_xss:

А можете ли вы написать простой пример на канвасе? плиз

Ни черта не шарю в нем, мне бы просто прямоугольник размером с чарт и линию вертикальную на нем

Прикол. Такой глюк только в MT4 и только с вертикальными линиями.

Только загадка - почему это мешает. Я бы в жизни не заметил.

А можно сформулировать задачу более детально, чтобы понять лучший путь для решения. У взаимодействия графических объектов с канвасом есть нюансы.
Кстати, один из возможных путей решения - это сменить руководителя. ))
Т.к. если он считает, что смена цвета - это костыль, то использования канваса для него тем более будет костылем. 
Хотя допускаю, что Ваш руководитель - это вымышленый персонаж или аллегория. ))

 

alex_xss
:

А можете ли вы написать простой пример на канвасе? плиз

Ни черта не шарю в нем, мне бы просто прямоугольник размером с чарт и линию вертикальную на нем


   Не оптимально вплане быстродействия (перерисовка происходит чаще чем должно быть - просто лень усложнять код) , но рабочий вариант.

   Можно реализовать канвас на размер экрана (не окна, например 1920x1080) и не перерисовывать его совсем. Просто памяти будет отъедать 8 Мбайт.
   Кстати, смена цвета сетки не поможет.

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/en/code/23840

int OnInit()
  {
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE) DrawGrid();
  }
//+------------------------------------------------------------------+
void DrawGrid() {
  Canvas.Erase(0);
  if (ChartGetInteger(0,CHART_SHOW_GRID)) {
      Canvas.SetBack(false);
      ChartSetInteger(0,CHART_FOREGROUND,0,true);
      uint clr = ColorToARGB((color)ChartGetInteger(0,CHART_COLOR_GRID),255);
      for (int y=0;y<W.Height;y++)
      if (y%6<2 || y%6>4) {
         for (int x=32;x<W.Width;x+=32)
         Canvas.m_pixels[y*W.Width+x]=clr;
      } 
  }
  Canvas.Update();
}
Файлы:
 
Может у кого есть функция сортировки массива (string) по алфавиту?
 
Aleksey Vyazmikin:
Может у кого есть функция сортировки массива (string) по алфавиту?

У меня такая, когда-то давно сабер писал

//===============================================================================================
//--------------------------------- Сортирует строковой массив ---------------------------------+
//===============================================================================================
void ArraySortStr(string &Str[]) {
 string Min;
 int jMin, Size = ArraySize(Str);
  for(int i=0; i<Size-1;i++) {
   Min = Str[i];
   jMin = i;
    for(int j=i+1; j<Size; j++)
     if(Str[j] < Min) {
       Min = Str[j];
       jMin = j;
      }
     if(jMin > i) {
       Str[jMin] = Str[i];
       Str[i] = Min;
     }
   }
 }
 
Vitaly Muzichenko:

У меня такая, когда-то давно сабер писал

Спасибо.

 
Maxim Kuznetsov:

надо позвать @Nikolai Semko он с канвасом дружит гораздо сильнее. А пока он в пути - посмотрите его профиль там много всякого на канвасе

Большое спасибо, обязательно гляну)

Nikolai Semko:

Прикол. Такой глюк только в MT4 и только с вертикальными линиями.

Только загадка - почему это мешает. Я бы в жизни не заметил.

А можно сформулировать задачу более детально, чтобы понять лучший путь для решения. У взаимодействия графических объектов с канвасом есть нюансы.
Кстати, один из возможных путей решения - это сменить руководителя. ))
Т.к. если он считает, что смена цвета - это костыль, то использования канваса для него тем более будет костылем. 
Хотя допускаю, что Ваш руководитель - это вымышленый персонаж или аллегория. ))

Ага, прикольный прикол, на который я потратил уже почти неделю) Жопа горит)

Ну как почему мешает. Есть индикатор, использующий треугольники для рисования. Красивенько все получается, цвета уже подобрали, а тут разглядели такой косяк.
Индикатор не для личного пользования, а делать релиз с таким багом это бред. Либо менять всю отрисовку, что достаточно геморно т. к. я новичек, либо править баг

Смена цвета сетки не помогает, как вы верно заметили, я к этому и сам уже пришел) Вначале на некоторых сочетаниях цветов казалось что поможет

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

Задача: сделать так, чтобы пользователь видел на экране сетку, если она включена, одного цвета всегда. Учитывая баги МТ4 с вертикальной сеткой + закрашенный объект. Не знаю что еще добавить)

По сути варик, который вы написали выше, подходит. Шлифануть его я смогу. Золотой вы человек!! Просто слов нет чтобы выразить мою благодарность. Могу пятишку накинуть вам за помощь

Только пара маленьких вопросиков:
Сильные лаги будут на слабых компах? Знаю что вопрос абстрактный, но буду рад любому ответу)
"Просто памяти будет отъедать 8 Мбайт" - полагаю вы не про оперативную память говорите?)) Если про нее, 8МБ это ж пустяк вроде
iCanvas обязательно, обычный не пойдет? Просто это еще пользователям говорить "этот файл туда, этот сюда". Они ж тупенькие, не поймут что куда пихать)

 
доброго дня

Прошу проконсультировать - ответить на ворпос

В метатрейдере есть индикатор Bulls.mq4.
Зачем в нем дополнительный буфер, и почему нельзя использовать просто промежуточную переменную
dd = iMA(NULL,0,InpBullsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
ExtBullsBuffer[i]=dd;

Вопрос в том, что ExtBullsBuffer[i] используется только для хранения вычисленного значения результата функции iMA и в следующей строке это значение присваивается элементу индикаторного буфера. Больше нигде ExtBullsBuffer не используется. Почему тут нужен этот промежуточный буфер ExtBullsBuffer, а не просто переменная, как на рисунке зеленым отмечено
***
Причина обращения: