РИСУНКА_СТРЕЛКА

Стилът DRAW_ARROW рисува стрелки (символи от набора Wingdings) на графиката в определен цвят със стойността на индикаторния буфер. Дебелината и цветът на символите могат да бъдат зададени по същия начин, както за стила DRAW_LINE - чрез директиви на компилатора или динамично с помощта на функцията PlotIndexSetInteger (). Динамичната промяна на свойствата на графичен график ви позволява да промените външния вид на индикатора в зависимост от текущата ситуация.

Кодът на символа за нанасяне на графиката се задава с помощта на свойството PLOT_ARROW.

// --- задайте кода на символа от шрифта Wingdings за рисуване в PLOT_ARROW
PlotIndexSetInteger (0, PLOT_ARROW, код);

По подразбиране е PLOT_ARROW = 159 (кръг).

Всяка стрелка всъщност е символ, който има височина и точка на закрепване и може да покрие важна информация на графиката (например цената на затваряне на бар). Следователно можете допълнително да зададете вертикално отместване в пиксели, което не зависи от мащаба на графиката. Стрелките ще бъдат визуално изместени вертикално от този определен брой пиксели, въпреки че самите стойности на индикатора ще останат същите:

// --- задаване на вертикално отместване на стрелките в пиксели
PlotIndexSetInteger (0, PLOT_ARROW_SHIFT, смяна);

Отрицателна стойност за PLOT_ARROW_SHIFT означава, че стрелките са изместени нагоре, а положителната стойност е изместване на стрелките надолу.

Стилът DRAW_ARROW може да се използва както в отделен подпрозорец на диаграмата, така и в главния прозорец. Празни стойности не се изчертават или показват в „Прозорец с данни“; всички стойности в буферите на индикатора трябва да бъдат зададени изрично. Буферите не се инициализират, за да се изпразнят.

// --- задаване на празна стойност
PlotIndexSetDouble (plot_index_DRAW_ARROW, PLOT_EMPTY_VALUE, 0);

Броят на необходимите буфери за изграждане на DRAW_ARROW - 1.

Пример за индикатор, който рисува стрелки на всяка лента с цената на затваряне по-висока от цената на затваряне на предишния бар. Цветът, дебелината, отместването и символния код на всички стрелки се променят произволно на всеки N отметки.

const double

В примера първоначално за начертаване на plot1 със стила DRAW_ARROW свойствата, цветът и размерът се задават с помощта на директивата #property compiler, а след това във функцията OnCalculate () свойствата се задават произволно. Параметърът N е преместен във външните параметри на индикатора за възможността за ръчна инсталация (раздел "Параметри" в прозореца на свойствата на индикатора).

#property description "Индикатор за демонстрация DRAW_ARROW"
#property description "Изчертава стрелки на диаграмата, посочени от Unicode символи"
#property description "Цвят, размер, отместване и код на символа със стрелка се променят произволно"
#property описание "всеки N тикове"
#property description "Параметърът на кода задава основната стойност: code = 159 (кръг)"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
// --- графика на стрелки
#property indicator_label1 "Стрелки"
#property indicator_type1 РИСУНКА_СТРЕЛКА

#property indicator_color1 clrGreen
#property indicator_width1 1
// --- входни параметри
вход int N = 5; // брой отметки за промяна
въведете кратък код = 159; // символен код за рисуване в DRAW_ARROW
// --- буфер за индикатор за начертаване
двойно ArrowsBuffer [];
// --- масив за съхранение на цветове
цветни цветове [] =< clrRed, clrBlue, clrGreen >;
//+------------------------------------------------------------------+
// | Функция за инициализация на потребителски индикатор |
//+------------------------------------------------------------------+
int OnInit ()
<
// --- картографиране на индикаторни буфери
SetIndexBuffer (0, ArrowsBuffer, INDICATOR_DATA);
// --- задайте символния код за рисуване в PLOT_ARROW
PlotIndexSetInteger (0, PLOT_ARROW, код);
// --- задаване на вертикално отместване на стрелките в пиксели
PlotIndexSetInteger (0, PLOT_ARROW_SHIFT, 5);
// --- задайте 0 като празна стойност
PlotIndexSetDouble (0, PLOT_EMPTY_VALUE, 0);
//---
връщане (INIT_SUCCEEDED);
>
//+------------------------------------------------------------------+
// | Функция за итерация на потребителски индикатор |
//+------------------------------------------------------------------+
int OnCalculate (const int rate_total,
const int prev_calculated,
const дата и час [],
const double & open [],
const double & high [],
const double & low [],
const double & close [],
const long & tick_volume [],
const long & volume [],
const int & spread [])
<
статични тикове = 0;
// --- изчисляване на отметки за промяна на цвят, размер, смесване и код на стрелка
кърлежи ++;
// --- ако се е натрупал критичен брой кърлежи
ако (тикове> = N)
<
// --- промяна на свойствата на реда
ChangeLineAppearance ();
// --- нулиране на брояча на отметките
кърлежи = 0;
>

// --- блок за изчисляване на стойностите на индикатора
int старт = 1;
if (prev_calculated> 0) start = prev_calculated-1;
// --- цикъл на изчисление
за (int i = 1; i close [i-1])
ArrowsBuffer [i] = close [i];
// --- в противен случай посочете нулева стойност
друго
ArrowsBuffer [i] = 0;
>
// --- връща стойност на prev_calculated за следващо повикване
връщане (тарифи_общо);
>
//+------------------------------------------------------------------+
// | Променя външния вид на символите в индикатора |
//+------------------------------------------------------------------+
void ChangeLineAppearance ()
<
// --- низ за генериране на информация за свойствата на индикатора
низ comm = ";
// --- блок за промяна на цвета на стрелката
int номер = MathRand (); // получаваме произволно число
// --- делителят на числото е равен на размера на масива цветове []
int размер = ArraySize (цветове);
// --- получаваме индекса за избор на нов цвят като остатъка от целочислено разделение
int color_index = брой% размер;
// --- задайте цвета като свойство PLOT_LINE_COLOR
PlotIndexSetInteger (0, PLOT_LINE_COLOR, цветове [color_index]);
// --- запишете цвета на реда
comm = comm + "\ r \ n" + (низ) цветове [color_index];

// --- блок за промяна на размера на стрелките
число = MathRand ();
// --- получаваме дебелината като остатъка от целочислено деление
int ширина = брой% 5; // размерът е зададен от 0 до 4
// --- задайте цвета като свойство PLOT_LINE_WIDTH
PlotIndexSetInteger (0, PLOT_LINE_WIDTH, ширина);
// --- запишете размера на стрелките
comm = comm + "\ r \ nWidth =" + IntegerToString (ширина);

// --- блок за промяна на кода на стрелката (PLOT_ARROW)
число = MathRand ();
// --- получаваме остатъка от целочисленото разделение за изчисляване на новия код на стрелка (от 0 до 19)
int code_add = число% 20;
// --- задайте новия код на символа като сбор от код + код_добавяне
PlotIndexSetInteger (0, PLOT_ARROW, код + code_add);
// --- напишете кода на символа PLOT_ARROW
comm = "\ r \ n" + "PLOT_ARROW =" + IntegerToString (code + code_add) + comm;

// --- блок за промяна на вертикалното отместване на стрелките в пиксели
число = MathRand ();
// --- получаваме отместването като остатък от целочислено разделение
int shift = 20-число% 41;
// --- задайте ново отместване от -20 до 20
PlotIndexSetInteger (0, PLOT_ARROW_SHIFT, смяна);
// --- запишете отместването PLOT_ARROW_SHIFT
comm = "\ r \ n" + "PLOT_ARROW_SHIFT =" + IntegerToString (shift) + comm;