Пользовательские индикаторы > SOH (Stochastic Oscillator Hour) - стохастический осциллятор от таймфрейма H1

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

SOH (Stochastic Oscillator Hour) - стохастический осциллятор от таймфрейма H1

Непрочитанное сообщение evge » 10 дек 2016, 20:16

Модификация для АД4 стохастического осциллятора суть которой отрисовка рядов индикатора от таймфрейма H1 на нижестоящие таймфреймы графика (5, 15, 30 минут и т.д.).

Особенности

  • Использование на ТФ ниже 1 минуты возможно, но не рекомендуется, т.к. для формирования потребуется длинная история.
    Если потребуется отображение менее чем на 1 минутных таймфреймах, необходимо увеличить значение 60 параметра "nK".
  • На текущем часе текущего таймфрейма рисуются данные SO H1 предыдущего часа

Стохастический осциллятор – является еще одним ярким представителем нормированных осцилляторов, т.е. его значения колеблются в диапазоне от 0 до 100. Индикатор показывает положение и направление движения текущей цены относительно максимума и минимума за выбранный период.

Сигнальная линия строится как простое среднее от основной линии стохастика.

Signal = SMA(SO, N3).

N1 – период поиска максимального и минимального значения, N2 – период сглаживания быстрого стохастика, N3 – период сигнальной линии

Сигналы

Лонг – индикатор пересекает вниз уровень «80»; шорт – индикатор пересекает вверх уровень «20».
SO пересекает сигнальную линию вверх или вниз.
Анализ дивергенций между экстремумами индикатора MFI и ценой.

Автор: Джордж Лэйн (George Lane).
Источник: Стивен Б. Акелис, Технический анализ от А до Я.

Параметры

Все параметры задаются актуальными для таймфрейма H1

nK - период поиска максимального и минимального значения
nD - период сглаживания быстрого стохастика
Signal - период сигнальной линии

Примеры

SOH-02.png
SOH M15
SOH-02.png (37.11 КБ) 9198 просмотров

Для сравнения значений SOH ТФ = M10 и обычный SO ТФ = 1H
SOH-01.png
Для сравнения значений SOH ТФ = M10 и обычный SO ТФ = 1H


Код: Выделить всё

function Initialize()
{
   IndicatorName = "SOH"; //SOH (Stochastic Oscillator Hour)
   AddInput("Input", Inputs.Candle);   
   PriceStudy = false;   
   AddSeries("sD", DrawAs.Line, Color.Green);
   AddSeries("Signal", DrawAs.Line, Color.Red);

   AddParameter("nK", 5, 60);   
   AddParameter("nD", 3);
   AddParameter("nSignal", 3);

   AddLevel(20.0 , Color.Gray, "sD");
   AddLevel(80.0 , Color.Gray, "sD");

   // для сохранения списков значений OHLC часовых баров
   AddGlobalVariable("O", Types.DoubleList);
   AddGlobalVariable("H", Types.DoubleList);
   AddGlobalVariable("L", Types.DoubleList);
   AddGlobalVariable("C", Types.DoubleList);
   // для хранения минимальной и максимальной цены текущего часа
   AddGlobalVariable("Min", Types.Double, 999999999);
   AddGlobalVariable("Max", Types.Double, 0.0);
   // для хранения цены открытия текущего часа
   AddGlobalVariable("Open", Types.Double, 0.0);

   AddGlobalVariable("sDH", Types.DoubleList);
   AddGlobalVariable("sKH", Types.DoubleList);
}

function Evaluate()
{
// evge 10.12.2016 http://alfadirect4.ru
// модификация: SO от H1 для нижестоящих таймфреймов

// закончился часовой бар и начался новый
// сохраняем часовые данные в списках
if (BarTime(0).Hours != BarTime(1).Hours)
{
   // сохраняем данные часового бара
   O.Insert(0, Open);
   H.Insert(0, Max);
   L.Insert(0, Min);
   C.Insert(0, Input.Close[1]);
   // лишнее удаляем
   var CN = O.Count;
   if (CN > nK)
   {
      O.RemoveAt(CN - 1);
      H.RemoveAt(CN - 1);
      L.RemoveAt(CN - 1);
      C.RemoveAt(CN - 1);
   }
   // новый бар
   Min = Double.MaxValue;
   Max = 0.0;
   Open = Input.Open[0];
}
if (Input.Low[0] < Min) Min = Input.Low[0];
if (Input.High[0] > Max) Max = Input.High[0];

var i = 0;
var eMax = 0.0;
var eMin = Double.MaxValue;
var sK = 100.0;

if (O.Count < nK)
{
  Signal = 0.0;
  sDH.Insert(0, 0.0);
  sKH.Insert(0, 0.0);
}
else
{

if (BarTime(0).Hours != BarTime(1).Hours)
   {

   for (i=0; i < nK; i++)
   { 
      if (H[i] > eMax) eMax = H[i];
      if (L[i] < eMin) eMin = L[i];
   }
   var a = (eMax - eMin);
   if (a > 0.0) sK = (C[0] - eMin) / (eMax - eMin) * 100.0;

   sKH.Insert(0, sK);
   if (sKH.Count > nK) sKH.RemoveAt(sKH.Count - 1);

   sD = sD[1] - (sKH[0 + nD] - sKH[0]) / nD;

   sDH.Insert(0, sD[0]);
   if (sDH.Count > nK) sDH.RemoveAt(sDH.Count - 1);

   Signal = Signal[1] - (sDH[0 + nSignal] - sDH[0]) / nSignal;

   }
   else
   {
   sD = sD[1];
   Signal = Signal[1];
   }

} //O.Count >= nK

}


Скачать исходный код (скрипт)

SOH.zip
(1.53 КБ) 919 скачиваний
никогда такого не было и вот опять

Вернуться в «Пользовательские индикаторы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей