Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 22 апр 2020, 20:56

Тема: Re: SuperTrendEMA - трендовый индикатор, созданный на основе ATR и EMA

Текст сообщения:

ATRH ниже в коде (тоже с запаздыванием до 1 часа), не оформил его пока отдельным постом

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

function Initialize()
{
IndicatorName = "ATRH";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("ATRDay", DrawAs.Line, Color.Red);

AddParameter("Period", 14, 60);
 
// для сохранения списков значений OHLC
AddGlobalVariable("O", Types.DoubleList);
AddGlobalVariable("H", Types.DoubleList);
AddGlobalVariable("L", Types.DoubleList);
AddGlobalVariable("C", Types.DoubleList);
AddGlobalVariable("A", Types.DoubleList); //ATR
}

function Evaluate()
{

// evge 22.04.2020 http://alfadirect4.ru

ATRDay[0] = ATRDay[1];

// новый час
if (BarTime(0).Hours != BarTime(1).Hours)
{
   // новый бар дня
   O.Insert(0, Input.Open[0]); H.Insert(0, Input.High[0]); L.Insert(0, Input.Low[0]); C.Insert(0, Input.Close[0]);   
   if (O.Count > 1)
   {
    A.Insert(0, H[1] - L[1]);
   }   
   // лишнее удаляем
   var CN = O.Count;
   if (CN > Period * 2) { O.RemoveAt(CN - 1); H.RemoveAt(CN - 1); L.RemoveAt(CN - 1); C.RemoveAt(CN - 1); }
}
if (O.Count > 0)
{
   if (Input.Low[0] < L[0]) L[0] = Input.Low[0];
   if (Input.High[0] > H[0]) H[0] = Input.High[0];
   C[0] = Input.Close[0];
}
if (A.Count > 1)
{
   if (C.Count > 2)
   {
      var TR = Math.Max(H[1] , C[2]) - Math.Min(L[1], C[2]);
       A[0] = ((Period - 1.0) * A[1] + TR) / Period;
   }
}

if (A.Count > 0) ATRDay[0] = A[0];

}


Компилируем EMAH, ATRH,

а далее компилируем модифицированный SuperTrendEMAH, который использует в работе пользовательские индикаторы EMAH и ATRH

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

function Initialize()
{
IndicatorName = "SuperTrendEMAH";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("Trend", DrawAs.Line, Color.Black, false);
AddSeries("U", DrawAs.Custom, Color.Green, true);
AddSeries("D", DrawAs.Custom, Color.Red, true);

AddParameter("EmaPer", 4);
AddParameter("TrPer", 7);
AddParameter("factor", 1.7);
}

function Evaluate()
{

// evge 22.04.2020 https://alfadirect4.ru

var I = Input;
var E = MY.EMAH(I, EmaPer);
var A = MY.ATRH(I, TrPer);
var up = E[0] - (factor * A[0]);
var down = E[0] + (factor * A[0]);
U = E[1] > U[1] ? Math.Max(up, U[1]) : up;
D = E[1] < D[1] ? Math.Min(down, D[1]) : down;
Trend = E[0] > D[1] ? 1 : E[0] <U[1] ? -1 : Trend[1];

if (Trend == 1) U.DrawLine(); else D.DrawLine();

}


что получим на выходе:

SuperTrendEMAH-01.png
SuperTrendEMAH индикатор
SuperTrendEMAH-01.png (28.68 КБ) 16756 просмотров