Вопрос 4.
Кто может пояснить ПРИНЦИП работы DRAW_FILLING
Не понятно по какому принципу выбираются уровни заливки.
Почему возник вопрос ... DRAW_FILLING
Имеем ...в Price_Channel
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 2
#property indicator_type1 DRAW_FILLING
#property indicator_type2 DRAW_LINE
#property indicator_color1 DodgerBlue,Gray
#property indicator_color2 Blue
Шаг первый - имеем три буфера, две линии индикатора
Далее ... Задаем имена индикаторных буферов
//--- indicator buffers
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtMiddBuffer[];
Ставим в соответствие индексы массивов
//--- indicator buffers mapping
SetIndexBuffer(0,ExtHighBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtLowBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ExtMiddBuffer,INDICATOR_DATA);
Определяем метки линий индикатора (короткие имена)
PlotIndexSetString(0,PLOT_LABEL,"Channel("+string(InpChannelPeriod)+") upper;Channel("+string(InpChannelPeriod)+") lower");
PlotIndexSetString(1,PLOT_LABEL,"Median("+string(InpChannelPeriod)+")");
И вот тут не понятно ... так как для меня
PlotIndexSetString(1,..) - это соответствует ... (1),ExtLowBuffer
А поскольку явно не указан тип линии для соответствующего массива (буфера)
PlotIndexSetInteger(Х,PLOT_DRAW_TYPE,DRAW_LINE);
То по старинке. как в МТ4 ... я считаю, что
#property indicator_type2 DRAW_LINE ... это соответствует ... (1),ExtLowBuffer
Поэтому и запутался.
И вот тут не понятно ... так как для меня
PlotIndexSetString(1,..) - это соответствует ... (1),ExtLowBuffer
А поскольку явно не указан тип линии для соответствующего массива (буфера)
PlotIndexSetInteger(Х,PLOT_DRAW_TYPE,DRAW_LINE);
То по старинке. как в МТ4 ... я считаю, что
#property indicator_type2 DRAW_LINE ... это соответствует ... (1),ExtLowBuffer
Привет. Учитывая, что вопросов, по крайней мере, у меня будет очень много, решил открыть новую тему.
Вопрос 1.
Почему, если, например, цвет линии индикатора не определён в
#property indicator_color1 Red
а задан в
int OnInit()
{
PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red);
return(0);
}
то цвет линии индикатора в терминале - silver (вероятно, по умолчанию).
Попробуйте задать свойство #property indicator_color1 Red
Круто. Если и было в Справочнике, сразу не уяснил. Спасибо. Буду "думкать" дальше.
Лучше предварительно указать количество цветов через функцию. Вот пример индикатора, строчка с указанием количества цветов выделена желтым цветом.
//+------------------------------------------------------------------+ //| ColorLine.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //---- plot ColorLine #property indicator_label1 "ColorLine" #property indicator_type1 DRAW_LINE #property indicator_style1 STYLE_SOLID #property indicator_width1 3 //--- indicator buffers double ExtColorLineBuffer[]; //--- int ExtMAHandle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtColorLineBuffer,INDICATOR_DATA); //--- get MA handle ExtMAHandle=iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE); PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,1); PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red); } //+------------------------------------------------------------------+ //| 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[]) { //--- int limit; //--- check data int calculated=BarsCalculated(ExtMAHandle); if(calculated<rates_total) { Print("Not all data of ExtMAHandle is calculated (",calculated,"bars ). Error",GetLastError()); return(0); } //--- copy values of MA into indicator buffer ExtColorLineBuffer if(CopyBuffer(ExtMAHandle,0,0,rates_total,ExtColorLineBuffer)<=0) return(0); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Класс,конечно, что на вопросы дилетанта отвечает профи такого уровня, как Вы, Rosh ... спасибо.
Цвета, соответствие уровней в DRAW_FILLING (и аналогичные) ... кажется я понял ... сработал рефлекс с мт4 ... а надо было внимательнее прочитать справочник.
Но явно ответ, в этом случае, каким образом ставится
соответствие (индекса) ИНДИКАТОРНОГО БУФЕРА (номеру) ГРАФИЧЕСКОЙ СЕРИИ
Но явно ответ, в этом случае, каким образом ставится
соответствие (индекса) ИНДИКАТОРНОГО БУФЕРА (номеру) ГРАФИЧЕСКОЙ СЕРИИ
Специального механизма произвольного связывания индексов буферов и графических построений нет. Связывание фиксированное и все зависит только от количества буферов необходимых для графического построения (это количество фиксированное для каждого способа отрисовки). Рассмотрим простой пример. Есть 2 построения: отрисовка баров (4 буфера) и разноцветной линии ( 2 буфера - для значений и для цвета). В этом случае индексы буферов с 0 по 3 включительно относятся к первому построению, а с 4 по 5 - ко второму (причем именно 5-ый для цвета).
Специального механизма произвольного связывания индексов буферов и графических построений нет. Связывание фиксированное и все зависит только от количества буферов необходимых для графического построения (это количество фиксированное для каждого способа отрисовки). Рассмотрим простой пример. Есть 2 построения: отрисовка баров (4 буфера) и разноцветной линии ( 2 буфера - для значений и для цвета). В этом случае индексы буферов с 0 по 3 включительно относятся к первому построению, а с 4 по 5 - ко второму (причем именно 5 для цвета).
Несколько неожиданно, если честно.
Если правильно понимаю, то логика следующая:
1. имеем Индикаторный буфер
если требуется "рисование"
2. задаем Графическую серию
3. и определяем параметры (свойства, тип, ...) Графического построения для данной Графической серии
4. Параметры Графического построения связаны с необходимым количеством ИНДИКАТОРНЫХ БУФЕРОВ - если это так, то требуется последовательный ввод (связывание с индексом в SetIndexBuffer) БУФЕРОВ
Идея как бы эта ? ... В общем ...что то типа многовекторной структуры данных ... толково придумано, если вдуматься.
Так, а где прочитать о кол-ве необходимых Буферов для того или иного построения?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет. Учитывая, что вопросов, по крайней мере, у меня будет очень много, решил открыть новую тему.
Вопрос 1.
Почему, если, например, цвет линии индикатора не определён в
#property indicator_color1 Red
а задан в
int OnInit()
{
PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red);
return(0);
}
то цвет линии индикатора в терминале - silver (вероятно, по умолчанию).
Вопрос 2.
Аналогичная проблема и с DRAW_LINE
int OnInit()
{
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);
return(0);
}
линия рисуется все равно сплошной (solid).
Вопрос 3.
Есть ли у кого нибудь пример кода с использованием DRAW_SECTION.
Вопрос 4.
Кто может пояснить ПРИНЦИП работы DRAW_FILLING
Не понятно по какому принципу выбираются уровни заливки.