Помощь в кодировании - страница 476

 

Здравствуйте,

Мне нужен индикатор только для размещения фиксированной текстовой метки на графике.

Можете ли вы показать мне модель.

Спасибо.

Jo

 
Jovager:
Здравствуйте,

Мне нужен индикатор только для размещения фиксированной текстовой метки на графике.

Можете ли вы показать мне модель.

Спасибо.

Jo

Jo

Вы заглянули в эту тему: https: //www.mql5.com/en/forum/179041

 
mladen:
Jo Вы проверили эту тему: https: //www.mql5.com/en/forum/179041

Младен,

В этой теме я нашел сообщение, которое приводит к "TRO_MyNotes", это именно то, что мне нужно.

Еще раз, Младен, большое спасибо за вашу помощь.

Jo

 

Просто интересно, может ли кто-нибудь помочь с этим (пост #4739)?

Спасибо.

 
godrich:
Не уверен, что то, о чем я спрашиваю, возможно, но, в отношении прилагаемого индикатора, возможно ли сделать желтую линию, которая появляется в канале, "истинной"?

Под этим я подразумеваю, что желтая линия не будет сглаживаться/пересчитываться.

Спасибо.

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);

}

//+------------------------------------------------------------------+

 
thefxpros:
Привет,

Я пытаюсь создать индикатор округлых свечей 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);

 
mladen:
Вот что я получаю, когда размещаю zup 150 с индикатором gann sq9 mxi nmc на одном графике:

большое спасибо, возможно это моя ошибка, я также получил версию от Поручика,

искренне

 
zigflip:
большое спасибо, возможно это моя ошибка, я также получил версию от Поручика, искренне.

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

Возможно, это проблема конкретного билда metatrader (я использую билд 788).

 
mladen:
Как вы знаете, ZigZag может и будет перерисовываться.

Использование алертов (всплывающих окон) в качестве сигнала на перерисовывающем индикаторе - очень опасное занятие, и именно по этой причине я давно решил не делать их - насколько я понимаю, лучше не делать алерты на таком индикаторе, чем потом объяснять людям, не знакомым с причинами добавления тех или иных алертов, почему они дают сигналы на пересчитывающем индикаторе.

с уважением,

Спасибо, сэр. Ценю ваш ответ