![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте,
Мне нужен индикатор только для размещения фиксированной текстовой метки на графике.
Можете ли вы показать мне модель.
Спасибо.
Jo
Здравствуйте,
Мне нужен индикатор только для размещения фиксированной текстовой метки на графике.
Можете ли вы показать мне модель.
Спасибо.
JoJo
Вы заглянули в эту тему: https: //www.mql5.com/en/forum/179041
Jo Вы проверили эту тему: https: //www.mql5.com/en/forum/179041
Младен,
В этой теме я нашел сообщение, которое приводит к "TRO_MyNotes", это именно то, что мне нужно.
Еще раз, Младен, большое спасибо за вашу помощь.
Jo
Просто интересно, может ли кто-нибудь помочь с этим (пост #4739)?
Спасибо.
Не уверен, что то, о чем я спрашиваю, возможно, но, в отношении прилагаемого индикатора, возможно ли сделать желтую линию, которая появляется в канале, "истинной"?
Под этим я подразумеваю, что желтая линия не будет сглаживаться/пересчитываться.
Спасибо.godrich
Не может.
Это фильтр Ходрика/Прескотта - его природа заключается в пересчете. Были попытки сделать это (например, сделать его конечным), но результаты не похожи на оригинал.
Здравствуйте,
Я пытаюсь создать индикатор свечей MTF с закругленным ма с помощью функции icustom. Безуспешно, ошибок нет, но приложенный индикатор ничего не показывает. Пожалуйста, помогите. Спасибо.
Исходный код индикатора таков:
//| MAR.mq4 |
//| Copyright © 2014, Gehtsoft USA LLC |
//| http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Gehtsoft USA LLC"
#property link "http://fxcodebase.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern int timeFrame = 0; // Time frame to use
extern int Length=8;
extern int Method=0; // 0 - SMA
// 1 - EMA
// 2 - SMMA
// 3 - LWMA
extern double Round=2;
extern int Price=0; // Applied price
// 0 - Close
// 1 - Open
// 2 - High
// 3 - Low
// 4 - Median
// 5 - Typical
// 6 - Weighted
extern int BarsToCalculate = 0;
double MAR[],MARda[],MARdb[],slope[] ;
double MA[], MovAle[];
double MaRo;
string indicatorFileName;
bool returnBars;
int init()
{
IndicatorShortName("Rounded ma MTF");
IndicatorBuffers(6);
SetIndexBuffer(0,MAR);
SetIndexBuffer(1,MARda);
SetIndexBuffer(2,MARdb);
SetIndexBuffer(3,MA);
SetIndexBuffer(4,MovAle);
SetIndexBuffer(5,slope);
indicatorFileName = WindowExpertName();
returnBars = timeFrame==-999; if (returnBars) return(0);
if (timeFrame==0) timeFrame= Period();
MaRo=Round*Point;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { MAR[0] = MathMin(limit+1,Bars-1); return(0); }
if (timeFrame!=Period())
{
limit = (int)MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,-999,0,0)*timeFrame/Period()));
if (BarsToCalculate>0) limit = MathMin(limit,BarsToCalculate);
if (slope[limit]==-1) ClearPoint(limit,MARda,MARdb);
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
MAR = iCustom(NULL,timeFrame,indicatorFileName,0,Length,Method,Round,Price,BarsToCalculate,0,y);
slope = iCustom(NULL,timeFrame,indicatorFileName,0,Length,Method,Round,Price,BarsToCalculate,5,y);
MARda = EMPTY_VALUE;
MARdb = EMPTY_VALUE;
if (slope == -1) PlotPoint(i,MARda,MARdb,MAR);
}
return(0);
}
//
//
//
//
//
if (BarsToCalculate>0) limit = MathMin(limit,BarsToCalculate);
if (slope[limit]==-1) ClearPoint(limit,MARda,MARdb);
for(int pos=limit; pos>=0; pos--)
{
MA[pos]=iMA(NULL, 0, Length, 0, Method, Price, pos);
if (MA[pos]>MA[pos+1]+MaRo || MA[pos]MAR[pos+1]+MaRo || MA[pos]MAR[pos+1] && MovAle[pos+1]==1.) || (MA[pos]<MAR[pos+1] && MovAle[pos+1]==-1.))
MAR[pos]=MA[pos];
else MAR[pos]=MAR[pos+1];
if (MAR[pos]<MAR[pos+1])
MovAle[pos]=-1.;
else
if (MAR[pos]>MAR[pos+1])
MovAle[pos]=1.;
else MovAle[pos]=MovAle[pos+1];
MARda[pos] = EMPTY_VALUE;
MARdb[pos] = EMPTY_VALUE;
slope[pos] = slope[pos+1];
if (MAR[pos]>MAR[pos+1]) slope[pos] = 1;
if (MAR[pos]<MAR[pos+1]) slope[pos] = -1;
if (slope[pos]==-1) PlotPoint(pos,MARda,MARdb,MAR);
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
void ClearPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
second = EMPTY_VALUE;
else
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
second = EMPTY_VALUE;
}
else {
second = from;
second = from;
first = EMPTY_VALUE;
}
}
else
{
first = from;
second = EMPTY_VALUE;
}
}[/CODE]
and this is my indicator code:
[CODE]//+------------------------------------------------------------------+
//| MAR.mq4 |
//| Copyright © 2014, Gehtsoft USA LLC |
//| http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Gehtsoft USA LLC"
#property link "http://fxcodebase.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern int timeFrame = 0;
extern int Length = 8;
extern int Method = 0;
extern double Round = 2;
extern int Price = 0;
extern int BarsToCalculate = 0;
extern color WickUpColor = DarkGreen;
extern color WickDnColor = FireBrick;
extern color BodyUpColor = LimeGreen;
extern color BodyDnColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickUpColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickDnColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyUpColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyDnColor);
IndicatorShortName("Rounded ma MTF candles ("+timeFrame+","+Length+","+Round+")");
Length = MathMax(Length,1);
switch(timeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("Rounded ma MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(MathMax(Bars-counted_bars,3*timeFrame/Period()),Bars-1);
for(int i=limit;i>=0;i--)
{
int y = iBarShift(NULL,timeFrame,Time);
int slope=iCustom(Symbol(),timeFrame,"Rounded ma MTF",Length,Method,Round,Price,BarsToCalculate,5,y);
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+
Привет,
Я пытаюсь создать индикатор округлых свечей ma MTF с помощью функции icustom. Безуспешно, ошибок нет, но приложенный индикатор ничего не показывает. Пожалуйста, помогите. Спасибо.
Исходный код индикатора таков:
//| MAR.mq4 |
//| Copyright © 2014, Gehtsoft USA LLC |
//| http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Gehtsoft USA LLC"
#property link "http://fxcodebase.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern int timeFrame = 0; // Time frame to use
extern int Length=8;
extern int Method=0; // 0 - SMA
// 1 - EMA
// 2 - SMMA
// 3 - LWMA
extern double Round=2;
extern int Price=0; // Applied price
// 0 - Close
// 1 - Open
// 2 - High
// 3 - Low
// 4 - Median
// 5 - Typical
// 6 - Weighted
extern int BarsToCalculate = 0;
double MAR[],MARda[],MARdb[],slope[] ;
double MA[], MovAle[];
double MaRo;
string indicatorFileName;
bool returnBars;
int init()
{
IndicatorShortName("Rounded ma MTF");
IndicatorBuffers(6);
SetIndexBuffer(0,MAR);
SetIndexBuffer(1,MARda);
SetIndexBuffer(2,MARdb);
SetIndexBuffer(3,MA);
SetIndexBuffer(4,MovAle);
SetIndexBuffer(5,slope);
indicatorFileName = WindowExpertName();
returnBars = timeFrame==-999; if (returnBars) return(0);
if (timeFrame==0) timeFrame= Period();
MaRo=Round*Point;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { MAR[0] = MathMin(limit+1,Bars-1); return(0); }
if (timeFrame!=Period())
{
limit = (int)MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,-999,0,0)*timeFrame/Period()));
if (BarsToCalculate>0) limit = MathMin(limit,BarsToCalculate);
if (slope[limit]==-1) ClearPoint(limit,MARda,MARdb);
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
MAR = iCustom(NULL,timeFrame,indicatorFileName,0,Length,Method,Round,Price,BarsToCalculate,0,y);
slope = iCustom(NULL,timeFrame,indicatorFileName,0,Length,Method,Round,Price,BarsToCalculate,5,y);
MARda = EMPTY_VALUE;
MARdb = EMPTY_VALUE;
if (slope == -1) PlotPoint(i,MARda,MARdb,MAR);
}
return(0);
}
//
//
//
//
//
if (BarsToCalculate>0) limit = MathMin(limit,BarsToCalculate);
if (slope[limit]==-1) ClearPoint(limit,MARda,MARdb);
for(int pos=limit; pos>=0; pos--)
{
MA[pos]=iMA(NULL, 0, Length, 0, Method, Price, pos);
if (MA[pos]>MA[pos+1]+MaRo || MA[pos]MAR[pos+1]+MaRo || MA[pos]MAR[pos+1] && MovAle[pos+1]==1.) || (MA[pos]<MAR[pos+1] && MovAle[pos+1]==-1.))
MAR[pos]=MA[pos];
else MAR[pos]=MAR[pos+1];
if (MAR[pos]<MAR[pos+1])
MovAle[pos]=-1.;
else
if (MAR[pos]>MAR[pos+1])
MovAle[pos]=1.;
else MovAle[pos]=MovAle[pos+1];
MARda[pos] = EMPTY_VALUE;
MARdb[pos] = EMPTY_VALUE;
slope[pos] = slope[pos+1];
if (MAR[pos]>MAR[pos+1]) slope[pos] = 1;
if (MAR[pos]<MAR[pos+1]) slope[pos] = -1;
if (slope[pos]==-1) PlotPoint(pos,MARda,MARdb,MAR);
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
void ClearPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
second = EMPTY_VALUE;
else
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
second = EMPTY_VALUE;
}
else {
second = from;
second = from;
first = EMPTY_VALUE;
}
}
else
{
first = from;
second = EMPTY_VALUE;
}
}[/CODE]
and this is my indicator code:
[CODE]//+------------------------------------------------------------------+
//| MAR.mq4 |
//| Copyright © 2014, Gehtsoft USA LLC |
//| http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Gehtsoft USA LLC"
#property link "http://fxcodebase.com"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern int timeFrame = 0;
extern int Length = 8;
extern int Method = 0;
extern double Round = 2;
extern int Price = 0;
extern int BarsToCalculate = 0;
extern color WickUpColor = DarkGreen;
extern color WickDnColor = FireBrick;
extern color BodyUpColor = LimeGreen;
extern color BodyDnColor = Orange;
extern int WickWidth = 1;
extern int BodyWidth = 2;
double UpBuffer[];
double DnBuffer[];
double UpbBuffer[];
double DnbBuffer[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickUpColor);
SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickDnColor);
SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyUpColor);
SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyDnColor);
IndicatorShortName("Rounded ma MTF candles ("+timeFrame+","+Length+","+Round+")");
Length = MathMax(Length,1);
switch(timeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("Rounded ma MTF candles ("+TimeFrameStr+")");
return(0);
}
//----
//+------------------------------------------------------------------+
//| MTF function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(MathMax(Bars-counted_bars,3*timeFrame/Period()),Bars-1);
for(int i=limit;i>=0;i--)
{
int y = iBarShift(NULL,timeFrame,Time);
int slope=iCustom(Symbol(),timeFrame,"Rounded ma MTF",Length,Method,Round,Price,BarsToCalculate,5,y);
if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }
if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }
}
return(0);
}
//+------------------------------------------------------------------+
Заменить
slope=iCustom(Symbol(),timeFrame, "Rounded ma MTF",Length,Method,Round,Price,BarsToCalculate,5,y);
с
slope=iCustom(Symbol(),timeFrame, "Rounded ma MTF",0,Length,Method,Round,Price,BarsToCalculate,5,y);
Вот что я получаю, когда размещаю zup 150 с индикатором gann sq9 mxi nmc на одном графике:
большое спасибо, возможно это моя ошибка, я также получил версию от Поручика,
искренне
большое спасибо, возможно это моя ошибка, я также получил версию от Поручика, искренне.
Сообщите нам, что произошло.
Возможно, это проблема конкретного билда metatrader (я использую билд 788).
Как вы знаете, ZigZag может и будет перерисовываться.
Использование алертов (всплывающих окон) в качестве сигнала на перерисовывающем индикаторе - очень опасное занятие, и именно по этой причине я давно решил не делать их - насколько я понимаю, лучше не делать алерты на таком индикаторе, чем потом объяснять людям, не знакомым с причинами добавления тех или иных алертов, почему они дают сигналы на пересчитывающем индикаторе.
с уважением,Спасибо, сэр. Ценю ваш ответ![](https://c.mql5.com/forextsd/smiles/smile.png)