Пользовательские индикаторы > SixLevels - автоматическое формирование уровней

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

Re: SixLevels - автоматическое формирование уровней

Непрочитанное сообщение evge » 03 апр 2017, 06:24

"для каждого бара", где я описывал выше про увеличение скорости работы, означает только одно - увеличение скорости работы индикатора. Результат на графике от этого не менялся. Конечно для каждого бара расчет нужен в случае если необходимо использование индикатора в стратегиях \ роботах, т.к. однажды посчитанный уровни для последнего бара будут учитываться на всей истории, что некорректно и стратегии и роботы будут врать.

Чтобы считало "для каждого бара" необходимо просто закомментировать строку проверки на последний бар графика.

изменить

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

if (CurrentIndex == MaxIndex)


на

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

//if (CurrentIndex == MaxIndex)


итоговый код

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

function Initialize()
{
   IndicatorName = "SixLevels";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("H", DrawAs.Custom, Color.Green);   
   AddSeries("L", DrawAs.Custom, Color.Red);

   AddSeries("H1", DrawAs.Custom, Color.Green);     
   AddSeries("L1", DrawAs.Custom, Color.Red);     
   AddSeries("H2", DrawAs.Custom, Color.Green);     
   AddSeries("L2", DrawAs.Custom, Color.Red);     
   AddSeries("H3", DrawAs.Custom, Color.Green);     
   AddSeries("L3", DrawAs.Custom, Color.Red);     

    AddLevel(0, Color.Red, LineStyles.DashSmall, 1, "L1");
    AddLevel(0, Color.Red, LineStyles.DashSmall, 1, "L2");
    AddLevel(0, Color.Red, LineStyles.DashSmall, 1, "L3");
    AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "H1");
    AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "H2");
    AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "H3");

   AddParameter("Width", 1);
   AddParameter("Period", 15);
   AddParameter("Scan", 300, 1);
   AddParameter("SkipBars", 30);
}

function Evaluate()
{
// evge 21.03.2016, http://alfadirect4.ru

var High = Input.High[Period];
var Low = Input.Low[Period];

var HC = true;
var LC = true;

for (var x = 0; x < Period; x++) {

if (HC) if (Input.High[Period * 2 - x] > High || Input.High[x] > High) HC = false;
if (LC) if (Input.Low[Period * 2 - x] < Low || Input.Low[x] < Low) LC = false;

if (!LC && !HC) break;

} //x

if (HC) H[Period] = Input.High[Period];
if (LC) L[Period] = Input.Low[Period];

H.DrawCircle();
L.DrawCircle();

if (CurrentIndex < 1) {
Levels[0].Level = 0; Levels[1].Level = 0; Levels[2].Level = 0;
Levels[3].Level = 0; Levels[4].Level = 0; Levels[5].Level = 0;
Levels[0].Width = (int)Width; Levels[1].Width = (int)Width;
Levels[2].Width = (int)Width; Levels[3].Width = (int)Width;
Levels[4].Width = (int)Width; Levels[5].Width = (int)Width;
}

//if (CurrentIndex == MaxIndex)

for (var x = 0 + SkipBars; x < Scan; x++) {
   if (L[x] > 0 && L1[0] == 0) { L1[0]= L[x]; Levels[0].Level = L[x]; } else
   if (L[x] > 0 && L2[0] == 0) { L2[0]= L[x]; Levels[1].Level = L[x]; } else
   if (L[x] > 0 && L3[0] == 0) { L3[0]= L[x]; Levels[2].Level = L[x]; }

   if (H[x] > 0 && H1[0] == 0) { H1[0]= H[x]; Levels[3].Level = H[x]; } else
   if (H[x] > 0 && H2[0] == 0) { H2[0]= H[x]; Levels[4].Level = H[x]; } else
   if (H[x] > 0 && H3[0] == 0) { H3[0]= H[x]; Levels[5].Level = H[x]; }

   if (L3[0] > 0 && H3[0] > 0) break;
}

}


результат работы на графике будет идентичный, но зато появится возможность использовать серии L1, L2, L3, H1, H2, H3 в стратегиях.
никогда такого не было и вот опять

A.Lemzhin
Сообщения: 9
Зарегистрирован: 31 янв 2017, 12:07

Re: SixLevels - автоматическое формирование уровней

Непрочитанное сообщение A.Lemzhin » 03 апр 2017, 11:56

Большое спасибо! Это то что надо!!!

Rabl
Сообщения: 30
Зарегистрирован: 07 май 2016, 21:08
Благодарил (а): 1 раз

Re: SixLevels - автоматическое формирование уровней

Непрочитанное сообщение Rabl » 27 июл 2017, 20:37

Не получается данный индикатор отобразить в стратегии, не хочет Lx и Hx признавать, пишет что отсутствует в контексте. Как правильно сделать?

AddParameter("Width", 1);
AddParameter("Period", 15);
AddParameter("Scan", 300, 1);
AddParameter("SkipBars", 30);...........

AddChartIndicator("MY.SixLevels", new Dictionary <string, string> {{"Width", "Width"}, {"Period", "Period"}, {"Scan", "Scan"}, {"SkipBars", "SkipBars"}} );
AddInput("Input1", Inputs.Candle, 60, true, "");


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

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

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