Пользовательские индикаторы > Renko Levels

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 27 дек 2021, 10:07

Добавить другой ТФ на тот же график возможности нет.

На форуме есть 2 варианта ручного счета, единственная проблема в том, что они выдают "числовые" серии Open, Low, High и Close, а не свечки.
Если индикатор, который вы хотите использовать, работает с числовыми сериями, то все ОК, если же требует свечек, то его придется слегка допилить, чтобы вместо свечек брать данные из отдельных числовых серий.

CustomCandle
viewtopic.php?f=4&t=601#p3872
Генерирует "свечку" по последнему интервалу любой заказанной длины.

BarFrame - бары вышестоящего таймфрейма
viewtopic.php?f=4&t=102#p520
Генерирует данные, совместимые с "настоящей" (еще незаконченной) свечкой более длинного ТФ.

K_R_L
Сообщения: 34
Зарегистрирован: 19 июн 2021, 21:39
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Renko Levels

Непрочитанное сообщение K_R_L » 27 дек 2021, 10:45

отображать на графике свечи не нужно, числа нужны.
что бы RenkoUp, RenkoDn, RenkoBuySell соответствовала часовому тайфрейму на 15 минутном графике

З.Ы.
Суппорт ...эээ ... послал к "робото писателям", написал им о нестабильности графика.
Посмотрим, может что ответят.

BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 27 дек 2021, 13:01

Числа там и так есть.

Также недавно стало можно использовать данные из другого ТФ в стратегиях (но не в индикаторах). Сам не пробовал, без надобности, но в первых версиях были странности, обсждались на форуме; сейчас не знаю.

K_R_L
Сообщения: 34
Зарегистрирован: 19 июн 2021, 21:39
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Renko Levels

Непрочитанное сообщение K_R_L » 27 дек 2021, 14:02

BugsDigger

пробую прикрутить это в дополнение
https://www.tradingview.com/script/j2gf ... o-Candles/

пока по черновому, на RenkoBuySell.
в принципе работает, но не так. Движение есть, но оно отображается во времени, а во времени не надо.
т.е. есть изменение - отобразили, а временную шалу не трогаем.
А сейчас изменение - отобразили, но временная шкала дальше идёт.

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


if (Change == 1)
{
 RenkoBuySell[0]=ATR ;
 RenkoBuySell.DrawHistogram(c);
 }

BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 28 дек 2021, 07:43

Так уж устроен терминал: все графики привязаны ко времени. Вы можете присваивать отдельные точки в серии, а не подряд, и они будут отображаться как отдельные, а между ними будет зазор. При обращении к ряду по индексу [0]. [-1] ... [-n] вы будете получать значения подряд, но значения BarTime(-n) будут не подряд.

Я в неизменные участки проставляю старые значения и в первом варианте красил их серым, чтобы на сером фоне подчеркивать именно изменения.

Графиков без привязки ко времени нет. По здравом размышлении случаев, где они бы были позарез нужны (прямо "кушать не могу без них") придумать трудно.
Последний раз редактировалось BugsDigger 28 дек 2021, 14:59, всего редактировалось 1 раз.

K_R_L
Сообщения: 34
Зарегистрирован: 19 июн 2021, 21:39
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Renko Levels

Непрочитанное сообщение K_R_L » 28 дек 2021, 09:45

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

Хотел Ренко в АД, но похоже Ренко условный получается. Но в принципе тоже нормальный, если бы не одно но - с косячным отображением истории.
На 4 х часах и днях косячит меньше :)

BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 29 дек 2021, 21:26

Вариант с опциональным рестартом в начале дня.

При включенном рестарте:
- для ТФ>=1 минуты (и меньше суточного, естественно) гарантирует стабильность показаний;
- в начале дня может появиться участок, выделенный серым; это значит, что тренд еще не выявлен (начальный коридор не пробит вверх или вниз).

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

function Initialize()
{
 IndicatorName = "RenkoLevels";
 PriceStudy=false;
 AddInput("Input", Inputs.Candle);

 AddParameter("DEMAperiod", 8);
 AddParameter("ATRperiod", 60);
 AddParameter("ATRk", 1.0);
 AddParameter("Sens", 1.0);
 AddParameter("Daily", 0);

 AddSeries("RenkoBuySell", DrawAs.Custom, Color.Black, AxisType.ZeroBased);
 AddSeries("RenkoUp", DrawAs.Custom, Color.Black, true, Axes.Parent);
 AddSeries("RenkoDn", DrawAs.Custom, Color.Black, true, Axes.Parent);

 AddGlobalVariable("atr_", Types.Double);
}

function Evaluate()
{
 double sens=Sens;

 double atr;
 bool b=(CurrentIndex==0 || (Daily!=0 && BarDate(0)!=BarDate(-1)));
 if(b)
 { // начало дня
  atr=Input.High[0]-Input.Low[0];
  if(sens!=0.0 && atr>3.0*sens) atr=3.0*sens; // сделал ограничение, иначе начальное значение ATR выглядит слишком большим   
 }
 else
 { // очередной бар дня
  double tr=Math.Max(Input.High[0], Input.Close[-1])-Math.Min(Input.Low[0], Input.Close[-1]);
  double atp=ATRperiod;
  atr=((atp-1.0)*atr_+tr)/atp;
 }
 atr_=atr;

 atr*=ATRk;
 if(atr<sens) atr=sens;

 double rup, rdn, h;
 int bs;
 if(b)
 { // начало дня
  double mid=(Input.High[0]+Input.Low[0])/2.0;
  double atr2=atr/2.0;

  rup=mid+atr2;
  rdn=mid-atr2;
  h=atr;
 
  bs=0;
 }
 else
 { // очередной бар дня
  rup=RenkoUp[-1];
  rdn=RenkoDn[-1];
  h=rup-rdn;
  if(h==0.0) h=atr; // если при страте попалось atr=0, за ширину канала возьмем текущее
 
  bs=(int)RenkoBuySell[-1];
 }

 double cl;
 int demap=(int)DEMAperiod;
 if(demap<=1) cl=Input.Close[0]; // просто цена закрытия
 else cl=MY.DEMA(Input.Close, demap)[0]; // цена закрытия, сглаженная EMA с компенсацией запаздывания
 
 int Up, Dn;
 if(h>0.0)
 {
  Up=(int)((cl-rup)/h); if(Up>3) Up=3;
  Dn=(int)((rdn-cl)/h); if(Dn>3) Dn=3;
 }
 else Up=Dn=0;

 Color c;
 if(Up>0)
 {
  c=Color.Lime;

  if(bs<0) bs=0;
  bs+=Up;
 
  rup+=atr*Up;
  rdn=rup-atr;
 } else
 if(Dn>0)
 {
  c=Color.Crimson;
 
  if(bs>0) bs=0;
  bs-=Dn;

  rdn-=atr*Dn;
  rup=rdn+atr;
 }
 else // Up<=0, Dn<=0
 {
  if(bs>0) c=Color.Lime; else
  if(bs<0) c=Color.Crimson;
  else c=Color.Silver;
 }
 
 RenkoUp[0]=rup;
 RenkoDn[0]=rdn;
 RenkoBuySell[0]=bs;

 RenkoDn.DrawChannel(RenkoUp, c, 50);
 RenkoBuySell.DrawHistogram(c);
}
Последний раз редактировалось BugsDigger 08 янв 2022, 11:13, всего редактировалось 1 раз.

BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 30 дек 2021, 11:33

Видимо, последняя вариация на тему.

pRenkoLevels - вариант для "ценового"/"числового" входного ряда (не свечек).
В качестве меры волатильности для счета уровней выступает просто разница между текущим и предыдущим значениями. Поскольку эта разница часто бывает довольно маленькой, визуально результат рисования м.б., к сожалению, не очень нагляден. Но нам же лишь бы работало. ;)

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

function Initialize()
{
 IndicatorName = "pRenkoLevels";
 PriceStudy=true;
 AddInput("Input", Inputs.Price);

 AddParameter("DEMAperiod", 8);
 AddParameter("ATRperiod", 60);
 AddParameter("ATRk", 1.0);
 AddParameter("Sens", 0.0);
 AddParameter("Daily", 0);

 AddSeries("RenkoUp", DrawAs.Custom, Color.Black);
 AddSeries("RenkoDn", DrawAs.Custom, Color.Black);
 AddSeries("RenkoBuySell", DrawAs.Custom, Color.Black, false); // не визуализируется

 AddGlobalVariable("atr_", Types.Double, 0.0);
}

function Evaluate()
{
 double cl=Input[0];

 double atr;
 bool b=(CurrentIndex==0 || (Daily!=0 && BarDate(0)!=BarDate(-1)));
 if(b)
 { // начало дня
  atr=0.0;
 }
 else
 { // очередной бар дня
  double tr=Math.Abs(Input[-1]-cl);
  double atp=ATRperiod;
  atr=((atp-1.0)*atr_+tr)/atp;
 }
 atr_=atr;

 atr*=ATRk;
 double sens=Sens;
 if(atr<sens) atr=sens;

 double rup, rdn, h;
 int bs;
 if(b)
 { // начало дня
  rup=rdn=cl;
  h=atr;
 
  bs=0;
 }
 else
 { // очередной бар дня
  rup=RenkoUp[-1];
  rdn=RenkoDn[-1];
  h=rup-rdn;
  if(h==0.0) h=atr; // против atr=0 в самом начале, иначе счет никогда не начнется
 
  bs=(int)RenkoBuySell[-1];
 }

 int demap=(int)DEMAperiod;
 if(demap>1) cl=MY.DEMA(Input, demap)[0]; // сглаженное EMA с компенсацией запаздывания
 
 int Up, Dn;
 if(h>0.0)
 {
  Up=(int)((cl-rup)/h); if(Up>3) Up=3;
  Dn=(int)((rdn-cl)/h); if(Dn>3) Dn=3;
 }
 else Up=Dn=0;

 Color c;
 if(Up>0)
 {
  c=Color.Lime;

  if(bs<0) bs=0;
  bs+=Up;
 
  rup+=atr*Up;
  rdn=rup-atr;
 } else
 if(Dn>0)
 {
  c=Color.Crimson;
 
  if(bs>0) bs=0;
  bs-=Dn;

  rdn-=atr*Dn;
  rup=rdn+atr;
 }
 else // Up<=0, Dn<=0
 {
  if(bs>0) c=Color.Lime; else
  if(bs<0) c=Color.Crimson;
  else c=Color.Silver;
 }
 
 RenkoUp[0]=rup;
 RenkoDn[0]=rdn;
 RenkoBuySell[0]=bs;

 RenkoDn.DrawChannel(RenkoUp, c, 50);
 // RenkoBuySell.DrawHistogram(c); // не визуализируется
}


pRenko.png

BugsDigger
Сообщения: 518
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 87 раз

Re: Renko Levels

Непрочитанное сообщение BugsDigger » 08 янв 2022, 11:32

Update: во все исходники добавлен еще один параметр (по примеру индикатора NATR).

ATRk - коэффициент, на который множится насчитанный ATR.
При ATRk<1 чувствительность повышается, при >1 - загрубляется.
Т.е., еще одна ручка для оптимизации.

Можно, например, использовать 2 индикатора: один с - бoльшим ATRk - для определения общего тренда, второй - с меньшим - для операций (с учетом общего тренда).

K_R_L
Сообщения: 34
Зарегистрирован: 19 июн 2021, 21:39
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Renko Levels

Непрочитанное сообщение K_R_L » 14 янв 2022, 10:59

Привет всем.

А как изобразить значок "Bay" и "Sell" ?
DrawArrowDown и DrawArrowUp - мелковато получается


P/S/

только так можно ?

B.DrawFigure(Figure.Up,Color.Green,Line.DashBig,3,Color.Green,0);
B.DrawFigure(Figure.Up,Color.Green,Line.Solid,3,Color.Green,0);
S.DrawFigure(Figure.Down,Color.Red,Line.Solid,3,Color.Red,0);
S.DrawFigure(Figure.Up,Color.Red,Line.DashBig,3,Color.Red,0);


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

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

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