3dma mt4 indicator.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.