Страница 1 из 4
Fractal – фрактал (экстремум)
Добавлено: 07 фев 2016, 16:57
evge
Фракталы Билла Вильямса (В.Williams) показывают особые точки или локальные экстремумы. «Особые точки» - это экстремальные точки на графике, в которых происходит изменение направления движения цены. Эти точки говорят, что в данный момент времени на данном уровне существенно меняется соотношение спроса и предложения, которое может происходить из-за выхода новой информации или из-за достижения определенных ценовых уровней.
Параметр «Period» данного индикатора показывает порядок фрактала, т.е. какое количество точек справа и слева должно быть ниже (выше) экстремума.
Пример:

- Fractal-00.png (24.02 КБ) 59056 просмотров
Исходный текст:Код: Выделить всё
function Initialize()
{
IndicatorName = "Fractal";
AddInput("Input", Inputs.Candle);
AddParameter("Period", 5);
PriceStudy = true;
AddSeries("H", DrawAs.Custom, Color.Coral);
AddSeries("L", DrawAs.Custom, Color.LightGreen);
}
function Evaluate()
{
// AlfaDirect. 2014. OX
// Fractal. Period - число точек справа и слева от экстремума, которые ниже (выше) него
if (CurrentIndex > 2 * Period)
{
var xH = 0;
var xL = 0;
var HPoint = Input.High[-Period];
var LPoint = Input.Low[-Period];
for (var i = 0; i < Period; i++ )
{
if ( HPoint >= Input.High[i+1-Period] && HPoint >= Input.High[-i-1-Period] )
xH = xH + 1;
if ( LPoint <= Input.Low[i+1-Period] && LPoint <= Input.Low[-i-1-Period] )
xL = xL + 1;
}
if ( xH == Period )
{
H[Period] = HPoint;
}
if ( xL == Period )
{
L[Period] = LPoint;
}
H.DrawArrowDown();
L.DrawArrowUp();
}
}
Re: Fractal – фрактал (экстремум)
Добавлено: 16 май 2018, 19:59
MonteCristo
Как при тестировании стратегии, на каждом шаге выполнения OnUpdate(), получить последние значения рядов H и L у этого индикатора?
Re: Fractal – фрактал (экстремум)
Добавлено: 16 май 2018, 23:05
evge
Нужно учитывать, что фракталы рисуются "задним числом", т.е. в момент их обнаружения уже прошло некоторое время (задержка, кол-во баров заданное в параметре периода).
Где они реально стали известны можно чуть доделав индикатор продемонстрировать:
Код: Выделить всё
function Initialize()
{
IndicatorName = "FractalX";
AddInput("Input", Inputs.Candle);
AddParameter("Period", 5);
PriceStudy = true;
AddSeries("H", DrawAs.Custom, Color.OrangeRed);
AddSeries("L", DrawAs.Custom, Color.Green);
AddSeries("HReal", DrawAs.Line, Color.OrangeRed);
AddSeries("LReal", DrawAs.Line, Color.Green);
}
function Evaluate()
{
// AlfaDirect. 2014. OX
// Fractal. Period - число точек справа и слева от экстремума, которые ниже (выше) него
// evge 16.05.2018
// Добавлены серии HReal, LReal для возможности тестирования в стратегиях
LReal[0] = LReal[1];
HReal[0] = HReal[1];
if (CurrentIndex > 2 * Period)
{
var xH = 0;
var xL = 0;
var HPoint = Input.High[-Period];
var LPoint = Input.Low[-Period];
for (var i = 0; i < Period; i++ )
{
if ( HPoint >= Input.High[i+1-Period] && HPoint >= Input.High[-i-1-Period] )
xH = xH + 1;
if ( LPoint <= Input.Low[i+1-Period] && LPoint <= Input.Low[-i-1-Period] )
xL = xL + 1;
}
if ( xH == Period )
{
H[Period] = HPoint;
HReal[0] = HPoint;
}
if ( xL == Period )
{
L[Period] = LPoint;
LReal[0] = LPoint;
}
H.DrawArrowDown();
L.DrawArrowUp();
}
}
Можете использовать, вместо H и L серий, HReal и LReal.
Эти серии будут содержать на каждом последующем баре последний фрактал High (HReal) и Low (LReal).

- Реальный момент появления фракталов в виде линии (серия HReal и LReal)
- FractalX-01.png (37.25 КБ) 58140 просмотров
Re: Fractal – фрактал (экстремум)
Добавлено: 17 май 2018, 19:24
MonteCristo
Не понял, что значит задержка? Если у фрактала период 5, то мы же увидим на текущем баре фрактал, который только что нарисовался, с учетом того, что слева и справа по 5 свечек, естественно. То есть если текущая свечка стала 5-ой, которая ниже экстремума, значит в OnUpdate() по идее я хочу увидеть, что 5 баров назад есть экстремум. Разве не так?
Re: Fractal – фрактал (экстремум)
Добавлено: 17 май 2018, 19:27
evge
Об этом и речь, а текущем баре мы узнаем что фрактал был 5 баров назад и там его и нарисуем.
На таких индикаторах, которые рисуют "задним числом" тестирование в АД4 будет всегда показывать граальные результаты.
Даже если рисуется с запаздыванием в 1 бар.
Серии, те что я добавил в пример, рисуют повторяя линию от бара к бару по значениям последних фракталов H и L, начиная с момента их обнаружения и до обнаружения новых фракталов.
К этим сериям в стратегии можно обратится на любом баре и не выискивать на истории отрисованные задним числом фракталы (тестирование стратегий этого не любит).
Re: Fractal – фрактал (экстремум)
Добавлено: 19 май 2018, 00:51
MonteCristo
Но ведь я могу в переменную просто запомнить. Фрактал нарисовался, хлоп его в переменную глобальную загнал и дальше с ней сравнитьва цену закрытия. Простоя не пойму как вытащить последнее значение из серий H и L
Re: Fractal – фрактал (экстремум)
Добавлено: 19 май 2018, 08:25
evge
можно, если перенести в код стратегии поиск фракталов. Если вызывая индикатор искать в серии последний фрактал, не переделав индикатор, то получите заглядывание в будущее.
Re: Fractal – фрактал (экстремум)
Добавлено: 19 май 2018, 08:48
nordseven
А если предпослседний?
Re: Fractal – фрактал (экстремум)
Добавлено: 19 май 2018, 10:26
evge
Хранить в глобальной переменной Types.DoubleList:
удалять лишнее
Код: Выделить всё
if (ListH.Count > 20) ListH.RemoveAt(0);
if (ListL.Count > 20) ListL.RemoveAt(0);
Обращаться по индексу
ListH[0] - последний
ListH[1] - предпоследний
и т.д.
Re: Fractal – фрактал (экстремум)
Добавлено: 19 май 2018, 19:01
MonteCristo
А H и L это что? Я думал прям из них можно последнее значение вынуть. Просто хотел узнать как. Я думал что-то типа такого: H[H.Count() - 1]. Но нормального описания всех методов и функций не нашел. H и L наполняются так же пошагово вместе с каждым баром или разом заполняется в начале теста за весь период тестирования?