Учебная тема

Вот индикатор, написанный самостоятельно:
Код:
//Индикатор в том же окне
#samewindow
//Стиль линий индикатора
#line 0 solid blue
#line 1 solid red

//Внешняя переменная - период
extern period = 10;

//Внутренняя - тренд
var trend = 0;

//Перед запуском calc()
function init() {
//Не рассчитывать индикатор для первой свечки
  setInitCandles(1);
}


//Пользовательская функция
function defineTrend() {
//Если закрытие предыдущей свечи выше линии 0, тренд = 1
  if (close[-1] > line[0]) {
    trend = 1;
//Если закрытие предыдущей свечи ниже линии 1, тренд = -1
  } else if (close[-1] < line[1]) {
    trend = -1;
  }
}



//Основная функция
function calc() {
//Линия 0 = Скользящей средней(тип средней, период, макс.цена)
  line[0] = MovAvg(ind_sma, period, pt_high);
//Линия 1 = Скользящей средней(тип средней, период, мин.цена)
  line[1] = MovAvg(ind_sma, period, pt_low);

//Определить тренд
  defineTrend();

//Срабатывание алертов
  if (trend ==1) {
    signal::alert("Тренд вверх");
  } else if (trend == -1) {
    signal::alert("Тренд вниз");
  }
}
 
Вчерашний индикатор с комментариями:
JavaScript:
//Стиль индикатора
#samewindow
#line 0 dot maroon

//Внешние переменные
extern step = 0.02;                //Шаг индикатора
extern init_step = 0.02;  //Начальный шаг
extern max_step = 0.20;        //Максимальный шаг

//Локальные переменные
var ac;            //Ускорение
var trend;    //Тренд
var ep;            //Точка экстремума (пика)

//Перед calc()
function init()
{
    //Не расчитывать для первой свечи
    setInitCandles(1);
    //Если мин. предыдущей свечи меньше мин.последующей
    if (low < low[1]) {
        //Тренд вверх
        trend = 1;
        //Пик = высшему из двух свечей
        ep = high[0, 1];
        //Линия индикатора = минимуму первой свечи
        line[0] = low;
    }
    //Иначе
    else {
        //Тренд вниз
        trend = -1;
        //Пик = мин из двух
        ep = low[0, 1];
        //Индикатор = максимуму первой
        line[0] = high;
    }
    //Ускорение = нач.шагу
    ac = init_step;
}


//Рассчет
function calc()
{
  //Тренд вверх
    if (trend == 1) {
        //Если макс.свечи > пика
        if (high > ep) {
            //Пик = макс.
            ep = high;
            //Ускорение = ускорение + шаг
            ac += step;
            //если уск больше макс.шага, то вернуть к макс. шагу
            if (ac > max_step) {ac = max_step;}
        }
        //Линия индикаора = предыдущей линии + ускорение * (пик - индикатор предыдущей)
        line[0] = line[0][-1] + ac * (ep - line[0][-1]);
        //Если минимум пересекает линию
        if (low < line[0]) {
            //Смена тренда
            trend = -1;
            //Индикатор = Пику (макс)
            line[0] = ep;
            //Пик становится минимумом
            ep = low;
            //Ускорение = начальному шагу
            ac = init_step;
        }
    }
    //Если тренд вниз
    else {
        //Если минимум меньше пика
        if (low < ep) {
            //Пик = минимум
            ep = low;
            //Ускорение + шаг
            ac += step;
            //Если ускорение больше макс.шага, то приравнять к макс.шагу
            if (ac > max_step) {ac = max_step;}
        }
        //Линия индикаора = предыдущей линии + ускорение * (пик - индикатор предыдущей)
        line[0] = line[0][-1] + ac * (ep - line[0][-1]);
        //Если максимум пересекает линию
        if (high > line[0]) {
            //Тренд вверх
            trend = 1;
            //Индикатор = пику
            line[0] = ep;
            //Пик = максимуму
            ep = high;
            //Ускорение = нач.шагу
            ac = init_step;
        }
    }
}
 
Вот сравнение индикатора по формуле с сайта (синие точки) и установленного в терминале (красные точки).1080
 
Где-то накладывается идеально, где-то нет.
Притом, я вчера сравнивал его с индикатором в другом терминале и он оказался идентичен ему. Т.е может что в родном не так.
 
В общем, Док. С параболиками там ерунда серьезная . Все три рисуют по-разному:). Хотя и похожи.
Попробую написать его на данных средней цены. Потом сравню.
 
Я ещё не разбирался, только приехал из гостей и пока поработать надо. Хотя интересно :)
Вообще логично поиграть параметрами и понять зависимости. Согласен с подходом :))
 
Вообще логично поиграть параметрами и понять зависимости. Согласен с подходом
Я попробовал и параметры, и менять очередность блоков if...else. Получается что нарисовать можно все что угодно, лишь бы тебе было удобно)))
В принципе, оно так и должно быть. Все равно разные бумаги торгуются с разными параметрами.
 
По идее по описанию все понятно и просто...хм, я к сожалению суть не знаю, арифметику так сказать, с алфавитом.
Комповое более-менее. А вот зачем это и то, что это означает...пока туповат я. На выходных или после них попробую выделить время для понимания. Сейчас отдыхать решил. Принудительно :)
 

Новые комментарии

LGBT*

В связи с решением Верховного суда Российской Федерации (далее РФ) от 30 ноября 2023 года), движение ЛГБТ* признано экстремистским и запрещена его деятельность на территории РФ. Данное решение суда подлежит немедленному исполнению, исходя из чего на форуме будут приняты следующие меры - аббривеатура ЛГБТ* должна и будет применяться только со звездочкой (она означает иноагента или связанное с экстремизмом движение, которое запрещено в РФ), все ради того чтобы посетители и пользователи этого форума могли ознакомиться с данным запретом. Символика, картинки и атрибутика что связана с ныне запрещенным движением ЛГБТ* запрещены на этом форуме - исходя из решения Верховного суда, о котором было написано ранее - этот пункт внесен как экстренное дополнение к правилам форума части 4 параграфа 12 в настоящее время.

Назад
Сверху