← К каталогу
Исходный код · ID 882

3dma mt4 indicator.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

3DMa — пользовательский индикатор для MetaTrader 5, отображающий на графике набор скользящих средних с убывающими периодами. Расчёт выполняется на основе ценовых данных Close, получаемых через CopyClose. Каждая линия соответствует скользящей средней с определённым периодом и окрашена в цвет градиента, зависящего от соотношения текущего периода к максимальному.

Интерактивность обеспечивается обработкой событий графика через OnChartEvent: при клике мыши максимальный период и шаг изменения периода определяются по координатам курсора. При перемещении или изменении графика происходит пересчёт и перерисовка отображаемых линий. Вспомогательные функции отвечают за построение градиентной палитры и отрисовку линий на холсте с использованием Canvas API.

Индикатор использует библиотеку iCanvas для рендеринга графических элементов прямо на графике. Линии рисуются в пределах видимого окна, а служебные текстовые метки показывают текущие значения максимального периода и шага. Функция OnCalculate возвращает rates_total и выполняет минимальную обработку — основная вычислительная логика сосредоточена в обработчике событий и вспомогательных процедурах.

Получить полный код

Поиск по коду файла

#property version   "1.02"
#property strict
#include <Canvas\iCanvas.mqh> //
#property indicator_chart_window

double  close[];
long Total;
int Ma=0;
int stepMa=0;
int Size=0;

int OnInit()
  {
      // код доступен только после оплаты
   }

int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[])
  {
      // код доступен только после оплаты
   }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   static int MaOld=-1,stepMaOld=-1;
   static bool click=true;
   static string pre_sparam="1";
   static int preMa=0;
   if(sparam=="1" && sparam!=pre_sparam) if(click) click=false; else click=true;
   if(click)
     {
      Ma=W.MouseX+100;
      if (Ma>=Size) Ma=Size-1;
      stepMa=W.MouseY-15;
      if(stepMa<=0) stepMa=1;
      stepMa=1+stepMa/10;
      if(stepMa>Ma) stepMa=Ma-1;
      if (Size>=W.BarsInWind && preMa!=Ma) nMA();
      preMa=Ma;
     }
   if(id==CHARTEVENT_CHART_CHANGE || MaOld!=Ma || stepMaOld!=stepMa)
     {
      Size=CopyClose(_Symbol,_Period,(int)W.Right_bar,W.BarsInWind+Ma-1,close);
      if (Ma>=Size) Ma=Size-1;
      if (Size>=W.BarsInWind) nMA();
      MaOld=Ma; stepMaOld=stepMa;
     }
   pre_sparam=sparam;
  }

void nMA()
  {
   Canvas.Erase();
   double S=0;
   double A[]; 
   ArrayResize(A,W.BarsInWind);
   for(int i=Size-1;i>=Size-Ma; i--) S+=close[i];
   for(int Per=Ma;Per>0;)
     {
 

Показано первые 50% кода (символов: 2568)

Открыть по тарифу

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

Разовая покупка файла

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

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
256,80₽ ≈ $3.14