Добрый день!
Помогите пожалуйста в доработке простого индикатора.
Нужно дополнительно рисовать горизонтальную 1 линию посередине между
максимумом и минимумом значения индикатора в плавающем интервале например 100 последних свечей.
То есть значение линии должно меняться с течением времени. 0,15/ 0,22/ 0,33 например. Ниже код:
Уточните, о чем идет речь. Из описания вроде бы следует, что нужна линия, отображенная относительно границ подокна индикатора. При этом указываете, что границы плавающие. Тут же в коде приводите:
#property indicator_minimum 0 #property indicator_maximum 2
То есть границы фиксированные. В этом случае нужно всего лишь добавить:
#property indicator_level3 1.0
Выходит, что речь идет не о границах окна. Может Вы говорите о показаниях индикатора? Но тогда там будет не горизонтальная линия, а кривая.
Если же код не имеет отношения к тексту описания, то ответ: только мучаясь с графическим объектом, который перерисовывается на каждом событии графика (обрабатывается в OnChartEvent).
Уточните, о чем идет речь. Из описания вроде бы следует, что нужна линия, отображенная относительно границ подокна индикатора. При этом указываете, что границы плавающие. Тут же в коде приводите:
То есть границы фиксированные. В этом случае нужно всего лишь добавить:
Выходит, что речь идет не о границах окна. Может Вы говорите о показаниях индикатора? Но тогда там будет не горизонтальная линия, а кривая.
Если же код не имеет отношения к тексту описания, то ответ: только мучаясь с графическим объектом, который перерисовывается на каждом событии графика (обрабатывается в OnChartEvent).
Уточняю:
если листать график индикатора назад, то есть от 0 бара к N-ному, то максимум меняется
и нужно чтобы рисовалась на графике индикатора в его окне прямая-средняя,
например показания индикатора (минимум-максимум) были от 0 до 3,2 (средняя будет 1,6),
а потом например 0-4,5 (средняя будет 2,25) и она будет нарисована,а старая стерта или
изменена на новую 100-периодную.
В мт4 вроде есть такие операторы SetLevelStyle и SetLevelValue.Как их использовать
не знаю.
Уточняю:
если листать график индикатора назад, то есть от 0 бара к N-ному, то максимум меняется
и нужно чтобы рисовалась на графике индикатора в его окне прямая-средняя,
например показания индикатора (минимум-максимум) были от 0 до 3,2 (средняя будет 1,6),
а потом например 0-4,5 (средняя будет 2,25) и она будет нарисована,а старая стерта или
изменена на новую 100-периодную.
В мт4 вроде есть такие операторы SetLevelStyle и SetLevelValue.Как их использовать
не знаю.
явно не так...
и проблема с формулированием мыслей тоже присутсвует :-)
медианное значение индикатора за 100 пред.свечей - это кривая (выше об этом уже сказали).
Но вам нужен уровень.
Для какой точки кривой его рисовать ? для самой последней ?? для крайней справа в окне ??
в любом случае - это чисто визуальная вещь, ну и нарисуйте её как горизонталь. Координату возьмите от требуемой точки и следите за её изменениями
Уточняю:
если листать график индикатора назад, то есть от 0 бара к N-ному, то максимум меняется
Максимум чего меняется: подокна или значение какого-либо буфера?
и нужно чтобы рисовалась на графике индикатора в его окне прямая-средняя,
например показания индикатора (минимум-максимум) были от 0 до 3,2 (средняя будет 1,6),
а потом например 0-4,5 (средняя будет 2,25) и она будет нарисована,а старая стерта или
изменена на новую 100-периодную.
В мт4 вроде есть такие операторы SetLevelStyle и SetLevelValue.Как их использовать
не знаю.
Если показания индикатора, то укажите, какие именно показания интересуют. Ведь в коде объявлено четыре буфера. Какой из них нужен? Да и при таком подходе вообще непонятно, что будете получать. Ведь при одном масштабе в видимой части окна появятся одни данные, а при другом масштабе - другие. Получите линию, зависящую от масштаба. Замечательный способ для самообмана выйдет.
в ответ на ваше:
-явно не так...
и проблема с формулированием мыслей тоже присутсвует :-)
должно быть так ,у культурных людей:
-извините,я не все понял.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования


Добрый день!
Помогите пожалуйста в доработке простого индикатора.
Нужно дополнительно рисовать горизонтальную 1 линию посередине между
максимумом и минимумом значения индикатора в плавающем интервале например 100 последних свечей.
То есть значение линии должно меняться с течением времени. 0,15/ 0,22/ 0,33 например. Ниже код:
//+------------------------------------------------------------------+ //| Custom MACD.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //---- indicator settings #property indicator_separate_window extern int myBar ; // Начальный бар построения линий #property indicator_minimum 0 string per; #property indicator_maximum 2 #property indicator_level1 0.01 #property indicator_level2 0.03 #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Crimson #property indicator_color3 Gold #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 1 //extern color col = Magenta; //---- indicator parameters extern int SignalSMA=20; //---- indicator buffers double MacdBuffer[]; double MacdBuffer2[]; double SignalBuffer[]; double SignalBuffer2[]; //double Delta[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings IndicatorBuffers(5); //---- indicator buffers mapping SetIndexBuffer(0,SignalBuffer); SetIndexStyle (0,DRAW_LINE); SetIndexBuffer(1,SignalBuffer2); SetIndexStyle (1,DRAW_LINE); SetIndexBuffer(3,MacdBuffer); SetIndexBuffer(4,MacdBuffer2); // SetLevelStyle(STYLE_DASH,1,Gold); // SetLevelValue (2,0.013); //---- name for DataWindow and indicator subwindow label IndicatorShortName("ind_double(" +SignalSMA+")"); SetIndexLabel(0,"Sred_Up"); SetIndexLabel(1,"Sred_Dn"); //------------------------------------------------ SetIndexDrawBegin(0,SignalSMA); SetIndexDrawBegin(1,SignalSMA); SetIndexDrawBegin(2,SignalSMA); IndicatorDigits(3); // {#property indicator_maximum 1} //------------------------------------- return(0); } //+------------------------------------------------------------------+ //| Up/Down | //+------------------------------------------------------------------+ int start() { //string name; int limit,znak; int counted_bars=IndicatorCounted(); switch(Period()) { case PERIOD_M1: znak=6; break; case PERIOD_M5: znak=30; break; case PERIOD_M15: znak=90; break; case PERIOD_M30: znak=100; break; case PERIOD_H1: znak=60; break; case PERIOD_H4: znak=240; break; case PERIOD_D1: znak=1440; break; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) MacdBuffer[i]=(((iHigh(0,0,i) - iOpen(0,0,i))*MathPow(10,Digits))/znak); // MacdBuffer[i]=(((iHigh(0,0,i) - iOpen(0,0,i))*MathPow(10,Digits))/znak); //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_EMA,i); //----------------------------------------------------------------------------------------------------------------------------- for(int j=0;j<limit;j++) MacdBuffer2[j]=(((iOpen(0,0,j) - iLow(0,0,j))*MathPow(10,Digits))/znak); // MacdBuffer2[j]=(((iOpen(0,0,j) - iLow(0,0,j))*MathPow(10,Digits))/znak); //---------------------------------------------------------------------------------------------------------------------------- for (j=0;j<limit;j++) SignalBuffer2[j]=iMAOnArray(MacdBuffer2,Bars,SignalSMA,0,MODE_EMA,j); //------------------------------------------------------------------------------------------------------------------------------- return(0); } //+------------------------------------------------------------------------------------------------------------------------------