Индикатор Fractals не имеет никаких настроек, кроме цветовых. Его главное отличие от рассмотренных в том, что вычисленные значения индикатора отрисовываются не в виде кривых, а в виде символов. Поэтому в нём вместо массива buff_curves
применяется массив buff_symbols
, предназначенный для отрисовки символов. Этот индикатор содержит два вида фракталов: восходящие и нисходящие. По этой причине, как и в случае с индикаторами, имеющими несколько кривых, используются два массива buff_symbols
.

Подготовка массива buff_symbols
с индексами id1
и id2
для записи значений:
buff_symbols[id1] = [];
buff_symbols[id2] = [];
Массив list_symbols
предназначен для параметров отрисовки символов. В нашем случае для отрисовки фракталов используются символы с кодовыми значениями "217" и "218", размер "12px" и шрифт "Wingdings". Для того, чтобы симолы не накладывались на свечной график, предусмотрено смещение относительно ценовых экстремумов. Восходящие фракталы смещаются вверх на 5 пикселей относительно цен high, нисходящие на 15 вниз относительно цен low.
list_symbols[id1] = [String.fromCharCode(217), "12pt Wingdings", 5];
list_symbols[id2] = [String.fromCharCode(218), "12pt Wingdings", -15];
Как видно, элементы массива list_symbols
с индексами индикатора принимают значения в виде массива с тремя элементами: символ, размер/шрифт, смещение. Вместо указания символов в виде String.fromCharCode(217)
и String.fromCharCode(218)
, допускается короткая запись в виде "Ù"
и "Ú"
.
for (var i = 2; i < view; i++) {...}
Цикл поиска фракталов начинается со 2-й свечи с справой стороны, т.к. для каждой текущей свечи необходимы данные по 2 свечи с каждой стороны.
if ((high[i] > high[i-1]) && (high[i] > high[i-2]) && (high[i] > high[i+1]) && (high[i] > high[i+2])) buff_symbols[id1][i] = high[i];
Если цена high
текущего бара выше этих цен 2-х баров с каждой стороны, то записываем значение цены high
текущего бара в массив buff_symbols
с соответствующими индексами.
if ((low[i] < low[i-1]) && (low[i] < low[i-2]) && (low[i] < low[i+1]) && (low[i] < low[i+2])) buff_symbols[id2][i] = low[i];
Условие для нисходящего фрактала. Значения найденных таких фракталов записывается в другой массив.
Результатом выполнения функции будут значения цен high
и low
в массиве buff_symbols
. В качестве примера, ниже приводится таблица со значениями массива и результатом отрисовки. Для пустых ячеек – значение не определено.
i | buff_symbols[id1] | buff_symbols[id2] |
0 | | |
1 | | |
2 | | 362.20 |
3 | | |
4 | | |
5 | 370.75 | |
6 | | |
7 | | |
8 | 371.00 | |
9 | | |
10 | | |
11 | | 369.18 |
12 | | |
13 | 370.78 | |
14 | | |
15 | | 367.60 |
16 | | |
17 | | |
18 | 372.61 | |
19 | | |
20 | | |
21 | | 368.08 |
22 | | |
23 | 370.15 | |
24 | | |
25 | | |
26 | | 363.70 |
27 | 371.49 | |
