Даже вот так измененный пример работает не корректно
#property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 2 //#property indicator_type1 DRAW_BARS #property indicator_color1 Gray double O[], H[], L[], C[]; void OnInit() { PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE); SetIndexBuffer(4, H, INDICATOR_DATA); PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS); SetIndexBuffer(0, O, INDICATOR_DATA); SetIndexBuffer(1, H, INDICATOR_DATA); SetIndexBuffer(2, L, INDICATOR_DATA); SetIndexBuffer(3, C, INDICATOR_DATA); }
не понятно как задать "связку" между индикатором и его бужерами
Уважаемый Nik107, что это за винегрет?
Чтобы научится правильно программировать индикаторы, нужно вначале изучить матчасть:
А вот рабочий пример индикатора в виде баров:
#property indicator_chart_window #property indicator_buffers 4 #property indicator_plots 1 #property indicator_type1 DRAW_BARS #property indicator_color1 clrBlue //---- indicator buffers double HighBuffer[]; double LowBuffer[]; double OpenBuffer[]; double CloseBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA); SetIndexBuffer(1,HighBuffer,INDICATOR_DATA); SetIndexBuffer(2,LowBuffer,INDICATOR_DATA); SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA); return(0); } //+------------------------------------------------------------------+ //| 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[]) { //--- economic indicator calculation int limit; if(prev_calculated>rates_total || prev_calculated<=0) limit=0; else limit=prev_calculated-1; //--- main loop for(int i=limit; i<rates_total; i++) { OpenBuffer[i]=open[i]; CloseBuffer[i]=close[i]; HighBuffer[i]=high[i]; LowBuffer[i]=low[i]; } return(rates_total); }
Уважаемый Nik107, что это за винегрет?
Уважаемый avoitenko, прежде чем отвечать нужно сначала ВНИМАТЕЛЬНО прочитать вопрос
Формулирую еще раз
Как написать индикатор рисующий:
- бары/свеч БЕЗ указания
#property indicator_type1 DRAW_BARS #property indicator_color1 Gray
2. и линии в том же окне
Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.
Спасибо за ссылки
Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.
Проперти все равно писать надо в любом случае, программно ли, не программно.
И почему у вас один буфер под двумя индексами?
Проперти все равно писать надо в любом случае, программно ли, не программно.
И почему у вас один буфер под двумя индексами?
Честно говоря, мне кажется, что заблудился в 3 соснах - т.е. не понятно как связать Массив_1 с 1-ой линией, Массивы_2-5 с барами, Массив_6 со второй линией и т.д.
Если возможно покажите кодом как в одном индикаторе отрисовать :
- линии (одну или несколько) и
- бары и
- линии и
- бары и т.д.
При этом нужно еще задать цвет каждой из линий и барам тожежл
Если для линий все понятно, то для баров смущает наличие LINE в параметре PLOT_LINE_COLOR
Для простоты, пжл, покажите кодом как индикатор рисует:
- линию и
- бары
в одном окне.
Спасибо
PS: прикрепил пример индикатора рисующего бары.
В него нужно добавить:
- рисование линии/-ий, например для простоты High и Low, чтобы не морочиться с исх. данными
- и еще одного ряда баров, например для простоты со сдвигом от первого ряда баров
...
Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.
Спасибо за ссылки
Так же как и в червёрке рисуют разноцветный буффер. Создаёте два буфера. Обоим указываете уровень нерисуемого значение.
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-EMPTY_VALUE);
и двумя чередующимися буферами отрисовываете. Как только какой-то из буферов не нужен, ему присваиваете значение указанное в PLOT_EMPTY_VALUE.
таким образом видимым в любой момент будет только один буффер.
(под буфером баров я подразумеваю объеденённые в одно понятие 5 или 4 массива данных)
Так же как и в червёрке рисуют разноцветный буффер. Создаёте два буфера. Обоим указываете уровень нерисуемого значение.
и двумя чередующимися буферами отрисовываете. Как только какой-то из буферов не нужен, ему присваиваете значение указанное в PLOT_EMPTY_VALUE.
таким образом видимым в любой момент будет только один буффер.
(под буфером баров я подразумеваю объеденённые в одно понятие 5 или 4 массива данных)
Если можно, покажите как это в коде сделать (см. выше приложил файл)
Спасибо, то, что нужно
За исключением одного "но" - помогите выбраться из 3 сосен - осталось не понятно как именно (или какие именно) буферы связаны с данным рядом баров или линией ?
Например, если мы в индикатор введем параметр задающий "Рисовать бары или линию" для первого значения (ряда_баров/линии) индикатора, то что ?
при переключении с баров на линию произойдет смещение буферов по отношению к индексам ?
остался открытым вопрос "Как буфер "привязан" к конкретной линии/ряду_баров индикатора ?"
Спасибо, то, что нужно
За исключением одного "но" - помогите выбраться из 3 сосен - осталось не понятно как именно (или какие именно) буферы связаны с данным рядом баров или линией ?
Например, если мы в индикатор введем параметр задающий "Рисовать бары или линию" для первого значения (ряда_баров/линии) индикатора, то что ?
при переключении с баров на линию произойдет смещение буферов по отношению к индексам ?
остался открытым вопрос "Как буфер "привязан" к конкретной линии/ряду_баров индикатора ?"
//--- вот этот код указывает на 0 буфер #property indicator_label1 "hl_equity" #property indicator_type1 DRAW_COLOR_CANDLES #property indicator_color1 C'192,192,192',C'128,128,128' #property indicator_style1 STYLE_SOLID #property indicator_width1 1
SetIndexBuffer(0,hl_equityBuffer1,INDICATOR_DATA); вот тут идёт привязка номера буфера к имени.
//--- вот этот код указывает на 1 буфер #property indicator_label2 "hl_equity" #property indicator_type2 DRAW_COLOR_CANDLES #property indicator_color2 C'192,192,192',C'128,128,128' #property indicator_style2 STYLE_SOLID #property indicator_width2 1
SetIndexBuffer(1,hl_equityBuffer1,INDICATOR_DATA); вот тут идёт привязка номера буфера к имени.
Отображение идёт от 0 до последнего указанного в значении
#property indicator_plots 3
Получается что отрисовка буферов будет такой что 0 график будет самым нижним при наложении значений.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет
В приведенных примера рисования индикатора в виде баров везде это задается установкой его свойств
как это сделать корректно программно ?
Перебрал варианты - не рисует
М.б. есть ограничение на использование баров вместе с др. типами линий в одном индикаторе ?
Спасибо