Индикатор 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 | |
