но здесь ничего нету по ТЗ
чего нет покажите на скрине. поправлю добавлю
но здесь ничего нету по ТЗ
//+------------------------------------------------------------------+
//| MAPeriod.mq4 |
//| Copyright 2023, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
input int period_ma = 2;
input int width = 2;
input color clr = clrRed;
input ENUM_APPLIED_PRICE pr = 0;
double m[];
int map=period_ma;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexStyle(0,DRAW_LINE,0,width,clr);
SetIndexBuffer(0,m);
PutButton("More",30,90,"+");
PutButton("Less",30,30,"-");
PutLabel("Num",27,60,string(map));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
ObjectDelete("Num");
ObjectDelete("More");
ObjectDelete("Less");
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
for(int i=0; i<rates_total; i++)
{
m[i]=iMA(NULL,0,map,0,0,pr,i);
}
//--- 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_OBJECT_CLICK && sparam=="More")
{
map++;
ObjectSetString(0,"Num",OBJPROP_TEXT,IntegerToString(map));
ObjectSetInteger(0,"More",OBJPROP_STATE,false);
}
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Less")
{
map--;
ObjectSetString(0,"Num",OBJPROP_TEXT,IntegerToString(map));
ObjectSetInteger(0,"Less",OBJPROP_STATE,false);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,20);
ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Black);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- переведем кнопку в заданное состояние
ObjectSetInteger(0,name,OBJPROP_STATE,false);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutLabel(string nm,int x,int y,string text)
{
ObjectDelete(0,nm);
//--- создадим текстовую метку
ObjectCreate(0,nm,OBJ_LABEL,0,0,0);
//--- установим координаты метки
ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,nm,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,nm,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,nm,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,12);
//--- установим цвет
ObjectSetInteger(0,nm,OBJPROP_COLOR,clrYellow);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
}
//+------------------------------------------------------------------+
Почему он платный? Сложный?
суть сей идеи в том, что бы быстро поменять период МА не прибегая к ручному воздействию
//+------------------------------------------------------------------+
//| MAPeriod.mq4 |
//| Copyright 2023, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
double m[];
int map=2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexStyle(0,DRAW_LINE,0,4,Red);
SetIndexBuffer(0,m);
PutEdit("e",44,22);
map=(int)ObjectGetString(0,"e",OBJPROP_TEXT);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutEdit(string name,int x,int y)
{
ObjectCreate(0,name,OBJ_EDIT,0,0,0);
//--- установим координаты объекта
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размеры объекта
ObjectSetInteger(0,name,OBJPROP_XSIZE,35);
ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,string(map));
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим способ выравнивания текста в объекте
ObjectSetInteger(0,name,OBJPROP_ALIGN,0);
//--- установим (true) или отменим (false) режим только для чтения
ObjectSetInteger(0,name,OBJPROP_READONLY,0);
//--- установим угол графика, относительно которого будут определяться координаты объекта
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(0,name,OBJPROP_BACK,1);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(0,name,OBJPROP_SELECTED,0);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,1);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
for(int i=0; i<rates_total; i++)
{
m[i]=iMA(NULL,0,(int)ObjectGetString(0,"e",OBJPROP_TEXT),0,0,0,i);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
могу в новом топике
AM2