Jump to content
Elliott Wave Forum

Индикатор Supertrend


Recommended Posts

Всем привет.

Наткнулся на описание этого индикатора на сайте и там написано.

Расчет значения линии индикатора, происходит очень просто, если тренд восходящий(CCI(50)>0), то к максимуму свечи, прибавляется значение ATR(5), результат суммирования и есть значение индикатора. Если же тренд нисходящий(CCI(50)<0), то значение получается, путем вычитания ATR(5) из минимума свечи.

У меня получился такой код

protected override void Execute()
	{
		ATR atr = ATR.Series(Bars, 5);
		CCI cci = CCI.Series(Bars, 50);
		DataSeries superTrend = new DataSeries(Bars, "Super Trend");
		for (int bar = 50; bar < Bars.Count; bar++)
		{
			if(cci[bar] > 0)
			{
				superTrend[bar] = High[bar] + atr[bar];
			}
			else if(cci[bar] < 0)
			{
				superTrend[bar] = Low[bar] - atr[bar];
			}
		}
		PlotSeries(PricePane, superTrend, Color.Blue, WealthLab.LineStyle.Solid, 1);
	} 

11999362.jpg

Но по моему это не совсем то что показывают на скринах с описанием супертренда.

Может у кого то есть идеи где я накосячил?

Link to comment
Share on other sites

Привет! Просто описание неверно.

А если не секрет где можно найти описание? А то не чего внятного нагуглить так и не получилось.

Link to comment
Share on other sites

А зачем Вам описание. :dntknw:

В wealth-lab developer среди встроенных индикаторов его нет. Так что остаётся писать самому. А без нормального описания это проблематично.

Link to comment
Share on other sites

В wealth-lab developer среди встроенных индикаторов его нет. Так что остаётся писать самому. А без нормального описания это проблематично.

можно же посмотреть код супертренда.

Вот тут можно спросить

Link to comment
Share on other sites

можно же посмотреть код супертренда.

Вот тут можно спросить

На сколько я понял у них получилось тоже самое что и у меня вот их код

namespace SuperTrend
{
public class SuperTrend:IBar2DoubleHandler, IContextUses
   {
   	[HandlerParameter(true, "50", Min = "5", Max = "100", Step = "1")]
       public int PeriodCCI { get; set; }

       [HandlerParameter(true, "1", Min = "1", Max = "30", Step = "1")]
       public int PeriodATR { get; set; }  

       public IList<double> Execute(ISecurity source)
       {

           var h = source.HighPrices;
           var l = source.LowPrices;
           var c = source.ClosePrices;

           var atr = Series.EMA(Series.TrueRange(source.Bars), PeriodATR);// получаем atr 

           var cci = Series.CCI(source.Bars, PeriodCCI); // получаем cci 
           IList<double> list = new List<double>(c.Count); // делаем SuperTrend нужного размера 


           for (int i = 0; i <  c.Count; i++)// приходимся по барам
           {
               var cm = h[i] + atr[i];// считаем значение SuperTrend для нужного бара при cci[i]> 0
               var cb = l[i] - atr[i];// считаем значение SuperTrend для нужного бара при cci[i]< 0

               var st = cci[i]> 0 ? cb : cm; //смотрим какое сейчас значение  cci
            list.Add(st);//сохраняем значение SuperTrend для бара
	    }

	    return list;//возвращаем готовенький SuperTrend
	}	
   public IContext Context { get; set; }
   }}

Но как я понял это не правильный код по тому что он будет скажем так пилообразный, а на скринах сепер тренда в инете он по большей части плоский

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...