Пользовательские индикаторы > ADXHour - ADX H1 на нижестоящих таймфреймах

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

ADXHour - ADX H1 на нижестоящих таймфреймах

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

ADXhour формирует ADX по данным таймфрейма H1 на нижестоящих таймфреймах.
Индикатор строится на ТФ <= 1 час. Последнее значение индикатора = ADX(ТФ=1час) с запаздыванием на 1 бар.

Автор модификации
evge

Автор кода ADX в АД4
AlfaDirect. 2016. OX

Входящие параметры

Period - период в таймфрейме H1 для формирования ADX

Примеры работы

ADXHour-01.png


Исходный код

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

function Initialize()
{
  IndicatorName = "ADXHour";
  PriceStudy = false;
  AddInput("Input", Inputs.Candle);         
  AddParameter("Period", 14);
  AddSeries("ADX", DrawAs.Line, Color.Blue);   
  AddSeries("DIP", DrawAs.Line, Color.Green);   
  AddSeries("DIN", DrawAs.Line, Color.Red);     
  AddGlobalVariable("DIp", Types.Double, 0.0);
  AddGlobalVariable("DIn", Types.Double, 0.0);
  AddGlobalVariable("vATR", Types.Double, 0.0);

  AddGlobalVariable("H", Types.Double, 0.0);
  AddGlobalVariable("L", Types.Double, 0.0);
  AddGlobalVariable("C", Types.Double, 0.0);

  AddGlobalVariable("H1", Types.Double, 0.0);
  AddGlobalVariable("L1", Types.Double, 0.0);
  AddGlobalVariable("C1", Types.Double, 0.0);
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// ADX (Average Directional Index) Сглаживание EMA.
// Реализация MQL
//
// evge 20.06.2016 ADXHour модификация

double KC = (double)2.0 / (Period + 1.0);
double KE = 1.0 - KC;
if (CurrentIndex == 0)
{
   DIp = 0.0;    DIn = 0.0;   
   H = Input.High[0]; L = Input.Low[0]; C = Input.Close[0];
   H1 = H; L1 = L; C1 = C; 
}
else
{

ADX = ADX[1]; DIP = DIP[1]; DIN = DIN[1];

if ( BarTime().Hours == BarTime(-1).Hours ) {

//определяем H L C текущего часа
if (Input.High[0] > H) H = Input.High[0];
if (Input.Low[0] < L) L = Input.Low[0];
C = Input.Close[0];

} else {

    // Расчет (DX+    DX-) --------------------------
   double dH = H - H1;
   double dL = L1 - L;
   double DXp = 0.0;
   double DXn = 0.0;

    if (dH > 0.0) DXp = dH; else DXp = 0.0;
    if (dL > 0) DXn = dL; else DXn = 0.0;
    if (DXp == DXn) { DXn = 0.0; DXp = 0.0; }   
    if (DXp > DXn) DXn = 0.0;     
    if (DXp < DXn) DXp = 0.0;
   
    // Расчет TR --------------------------------------------------
    double TR = Math.Max(Math.Max(Math.Abs(H - L), Math.Abs(H - C1)), Math.Abs(L - C1));

       vATR = KE*vATR + KC*TR;
         
    // Расчет (DI+  DI-) ----------------------------------------------
    if (vATR < 0.00000000001)
    {
        DIp = KE*DIp; 
        DIn = KE*DIn; 
        DIP = DIP[-1];
        DIN = DIN[-1];
    }
    else
    {
        DIp = KE*DIp + KC*DXp; 
        DIn = KE*DIn + KC*DXn; 
        DIP = DIp / vATR * 100.0;
        DIN = DIn / vATR * 100.0;
    }

    // ADX --------------------------------
    double  div = ( DIP[0] + DIN[0] );
    double  Buffer = 0.0;
    if (div == 0.0) 
        Buffer = 0.0;
    else
        Buffer = 100.0 * (Math.Abs(DIP[0]-DIN[0]) / div);

    ADX = KE*ADX[-1] + KC*Buffer; 

   H1 = H; L1 = L; C1 = C;
   H = Input.High[0]; L = Input.Low[0]; C = Input.Close[0];
   
} //Hours != Hours[-1]

} //CI != 0;

}


Скачать исходный текст

ADXHour.zip
(1.43 КБ) 1394 скачивания
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение Avialr » 23 июн 2016, 22:14

Что то не реагирует тестирование на данный индикатор
поставил
1. Индикатор больше - 20
2. Индикатор со смещением 13 - меньше текущего индикатора

соответственно - открываем длинную позицию

Никак не реагирует - почему?

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 23 июн 2016, 22:18

Avialr писал(а):Индикатор больше - 20


Поставили в конструкторе или через исходный код?

У индикатора 3 выходных ряда.

Что конкретно поставили ADX, DIP, DIN?
никогда такого не было и вот опять

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 23 июн 2016, 22:34

Avialr писал(а):Никак не реагирует - почему?


Сейчас запишу видео и размещу тут
никогда такого не было и вот опять

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 24 июн 2016, 08:36

phpBB [media]
никогда такого не было и вот опять

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 24 июн 2016, 08:41

Файл стратегии

ADX1.ads
(1.26 КБ) 2018 скачиваний

Это всего лишь пример, он не претендует на рабочую версию стратегии.
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение Avialr » 26 июн 2016, 19:34

Если использовать встроенный индикатор ADX - то там по одному параметру реагирует
Здесь столько данных нужно внести - что аж путаешься - параметры SL, TP - я так понимаю автоматически не выскакивают - нужно вводить принудительно?
Так же не понял зачем условие присутствует ADXHour (со смещением 130) больше 25.
CurrentPLper() меньше SL и больше TP - это что за условие такое?

Проще никак не получится видимо?

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 26 июн 2016, 22:39

Avialr писал(а):параметры SL, TP - я так понимаю автоматически не выскакивают - нужно вводить принудительно?


Это просто добавленные доп. параметры для правил 2 и 3:

SL - StopLoss,

CurrentPLper() < SL - если имеем убыток открытой позиции в % меньше (меньше, т.к. убыток - это отрицательное значение процента) чем заданный в SL, то закрываем позицию

TP - TakeProfit,

CurrentPLper() > TP - если имеем прибыль открытой позиции в % больше чем заданно в TP, то закрываем позицию

Avialr писал(а):Так же не понял зачем условие присутствует ADXHour (со смещением 130) больше 25.


это проверка, что в предыдущий час (13 * 5 (наш таймфрейм) = 65 минут) значение ряда ADX было больше 25, варианты ADX ниже или равные 25 пропускаем.

Avialr писал(а):CurrentPLper() меньше SL и больше TP - это что за условие такое?


Описал выше. Вообще желательно почитать docx - файл

ТЕРМИНАЛ40.СКРИПТЫ ИНДИКАТОРОВ и СТРАТЕГИЙ.docx

Не буду здесь выкладывать, т.к. более свежий вариант лучше скачивать с alfadirect.ru на странице загрузки терминала АД4.

Там описываются эти стандартные функции оценки позиции:

CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение Avialr » 27 июн 2016, 09:39

Avialr писал(а):
Так же не понял зачем условие присутствует ADXHour (со смещением 130) больше 25.


это проверка, что в предыдущий час (13 * 5 (наш таймфрейм) = 65 минут) значение ряда ADX было больше 25, варианты ADX ниже или равные 25 пропускаем.

смещение 130 = это 130*5 - т.е. 10 часов - одно смещение приравнивается к одной свече? в данном случае это 5 мин - получается что мы проверяем фактор 10 часов назад (видимо должно быть 13 а не 130) - или я в чем то не прав?

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

Re: ADXHour - ADX H1 на нижестоящих таймфреймах

Непрочитанное сообщение evge » 27 июн 2016, 10:34

Avialr писал(а):смещение 130


Да, это просто ошибка. Быстро набросок стратегии делал, для примера.
никогда такого не было и вот опять


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

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

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