Пользовательские индикаторы > ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

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

ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение evge » 05 июн 2019, 13:42

Индикатор ASCTrend является представителем вероятностных трендовых индикаторов, предназначенным для определения точки входа в рынок. Основан на классическом WPR.

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

Risk - В основе индикатора лежит осциллятор WPR, данный параметр одновременно влияет на его период и уровни. Чем больше Risk, тем меньше сигналов. Максимум 32.

Примеры

ASCTrend-01.png
ASCTrend-01.png (29.81 КБ) 8301 просмотр


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

function Initialize()
{
   IndicatorName = "ASCTrend";
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);
    AddSeries("Sell", DrawAs.Custom, Color.Red);
    AddSeries("Buy", DrawAs.Custom, Color.Green);
    AddSeries("wpr1", DrawAs.Line, Color.Black, false);
   AddSeries("wpr2", DrawAs.Line, Color.Black, false);
    AddParameter("Risk", 25);
   AddGlobalVariable("Whait", Types.Int, 0);
   AddGlobalVariable("RangeSum", Types.Double, 0);
}

function Evaluate()
{

// evge 05.06.2019 https://alfadirect4.ru

var I = Input;
int defaultPeriod = 3 + Risk * 2;
int UpperLevel = 67 + Risk;
int LowerLevel = 33 - Risk;

int RangePeriod = 10;

if (CurrentIndex < RangePeriod)
   {
   RangeSum += I.High[0] - I.Low[0];
   return;
   }
   
RangeSum += -(I.High[RangePeriod] - I.Low[RangePeriod]) + (I.High[0] - I.Low[0]);
double Range = RangeSum / RangePeriod;

if (CurrentIndex < defaultPeriod) return;   

double H1 = 0, H2 = 0, L1 = Double.MaxValue, L2 = Double.MaxValue;
for (int i = 0; i < defaultPeriod; i++)
{
   if (I.High[i] > H1) H1 = I.High[i];
   if (I.Low[i] < L1) L1 = I.Low[i];
   if (i < 4)
   {
      if (I.High[i] > H2) H2 = I.High[i];
      if (I.Low[i] < L2) L2 = I.Low[i];
   }
}

if ((H1 - L1) != 0)
   wpr1[0] = -100 * ((H1 - I.Close[0]) / (H1 - L1));
   else
   wpr1[0] = -100 * (H1 - I.Close[0]);
if ((H2 - L2) != 0)
   wpr2[0] = -100 * ((H2 - I.Close[0]) / (H2 - L2));
   else
   wpr2[0] = -100 * (H2 - I.Close[0]);

double Indicator = wpr2[0];
for (int j = 0; j < 6; j++)
   {
   if (Math.Abs(I.Close[j + 3] - I.Close[j]) >= Range * 4.6)
      {
      Indicator = wpr1[0];
      break;
      }
   }
Indicator = 100 - Math.Abs(Indicator);

if (Indicator < LowerLevel)
   {
   if (Whait == -1)
      {
      Sell[0] = I.High[0];
      Sell.DrawArrowDown();
      }
   Whait = 1;
   }

if (Indicator > UpperLevel)
   {
   if (Whait == 1)
      {
      Buy[0] = I.Low[0];
      Buy.DrawArrowUp();
      }
   Whait = -1;
   }

}


Скачать индикатор

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

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение oxi » 05 июн 2019, 22:47

Евгений, посмотрел индикатор...

ASCTrend(31) = SO(4, 1, 1) при уровнях 98 = 67+31 и 2 = 33-31
т.е. все время используется код

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

   if (i < 4)
   {
      if (I.High[i] > H2) H2 = I.High[i];
      if (I.Low[i] < L2) L2 = I.Low[i];
   }

на мелких ТФ вторая ветка не увидел, что он используется
Но работает прикольно :)))

Безымянный23456.png

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

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение evge » 06 июн 2019, 06:21

Старался повторить из МТ5.

Расчет WPR был дописан. Считает в двух периодах, зависящий от Risk и второй равный 4 независимо от Risk.

По идее, видел что этот период (4) и RangePeriod можно было бы вынести в параметры.

Но повторял как есть.

Там ещё пару параметров было "звук сигнал" и "e-mail". Это не повторял :)
никогда такого не было и вот опять

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение oxi » 06 июн 2019, 11:57

К написанию , как всегда, нет претензий :)
Я про сам индикатор.

Balalayka
Сообщения: 38
Зарегистрирован: 21 сен 2018, 10:57
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение Balalayka » 07 июн 2019, 12:55

Евгений, добрый день!
Интересный индикатор, спасибо за ваш труд
Разрешите задать вопрос, каким образом оптимальней получить значение параметров buy/sell в переменную для использования сигналов?

Заранее спасибо за ответ

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

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение evge » 07 июн 2019, 13:13

Самый просто вариант это в конструкторе стратегий:

(простой пример)

ASCT-01.png
ASCT-01.png (19.18 КБ) 8101 просмотр

ASCT-02.png
ASCT-02.png (24.65 КБ) 8101 просмотр


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

/**

Hash code F44ABB7CFAFD3E275416720C0C7EBA5C
**/
function Initialize()
{
   StrategyName = "ASCT";
   AddParameter("P1", 20, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MY.ASCTrend", new Dictionary <string, string>{{"Risk", "P1"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MY.ASCTrend(Input1, P1).GetValue("Buy", 0) > 0) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (MY.ASCTrend(Input1, P1).GetValue("Sell", 0) > 0) )
   {
      EnterShort();
   }

}


если чуть оптимальнее чем делает конструктор и код который он формирует, то так:

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

var A = MY.ASCTrend(Input1, P1);
var Buy = A["Buy"];
var Sell = A["Sell"];

if (Buy[0] > 0) EnterLong();
if (Sell[0] > 0) EnterShort();
никогда такого не было и вот опять

Sergey
Сообщения: 4
Зарегистрирован: 21 ноя 2019, 15:51

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение Sergey » 21 ноя 2019, 23:48

evge писал(а):если чуть оптимальнее чем делает конструктор и код который он формирует, то так:

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

var A = MY.ASCTrend(Input1, P1);
var Buy = A["Buy"];
var Sell = A["Sell"];
if (Buy[0] > 0) EnterLong();
if (Sell[0] > 0) EnterShort();


Евгений, добрый вечер!
Индикатор поставил, робота по нему запустил, большое спасибо!
А вот этот код куда надо вставить?

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

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение evge » 22 ноя 2019, 05:54

Sergey писал(а):А вот этот код куда надо вставить?


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

function Initialize()
{
   StrategyName = "ASCT";
   AddParameter("P1", 20, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MY.ASCTrend", new Dictionary <string, string>{{"Risk", "P1"}});
}

function OnUpdate()
{
var A = MY.ASCTrend(Input1, P1);
var Buy = A["Buy"];
var Sell = A["Sell"];
if (Buy[0] > 0) EnterLong();
if (Sell[0] > 0) EnterShort();
}
никогда такого не было и вот опять

JUGA
Сообщения: 2
Зарегистрирован: 24 ноя 2019, 18:36

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение JUGA » 24 ноя 2019, 18:41

Добрый день.
Скачал индикатор ASCTrend, но к сожалению он не рисуется.

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

Re: ASCTrend - трендовый индикатор на основе WPR (Larry Williams' Percent Range)

Непрочитанное сообщение evge » 25 ноя 2019, 11:11

Стрелки индикатора могут быть слишком малы по умолчанию.
После добавления индикатора на график, выставите в его параметрах размеры = 5 для серий "Sell", "Buy".
никогда такого не было и вот опять


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

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

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