Пользовательские индикаторы > Инд. PinBar почему отображается с нуля ?

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
tormovies
Сообщения: 6
Зарегистрирован: 18 июн 2016, 18:59
Благодарил (а): 2 раза

Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение tormovies » 15 апр 2020, 20:17

Сделал индикатор pinBar
но почему то при нанесении индикатора - свечной график начинает отображаться с нуля (а не масштабируется внутри графика ), в итоге свечной график сужается в горизонтальную полоску
возможно я что то недопонимаю , гляньте, у кого какие идеи

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

function Initialize()
{
// Обязательные параметры:
    IndicatorName = "pinBar";
    AddInput("Input", Inputs.Candle);
    PriceStudy = true;
    AddSeries("Buy", DrawAs.Custom, Color.Blue);
    AddSeries("Sell", DrawAs.Custom, Color.Red);
    AddSeries("Body");
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Delat (Дельта) - разница между объемом сделок покупателей  и продавцов
    Buy = 0; Sell = 0;
    Body = Math.Abs(Input.Open[0] - Input.Close[0]);
    var Upshadow = 0.0; var Downshadow = 0.0;
    var Pinbar_h = 0.0; var Pinbar_l = 0.0;
   
    if(Input.Open[0]>Input.Close[0])
        Upshadow = Input.High[0] - Input.Open[0];
    else
        Upshadow = Input.High[0] - Input.Close[0];
   
    if(Input.Open[0]>Input.Close[0])
        Downshadow = Input.Close[0] - Input.Low[0];
    else
        Downshadow = Input.Open[0] - Input.Low[0];
   
    if(Input.Close[-1]>Input.Open[-1]){
        if(Body[-1]>Body){
            if(Upshadow>0.5*Body){
                if(Upshadow>2*Downshadow){
                    Pinbar_h = 1;
                }
            }
        }
    }
   
    if(Input.Open[-1]>Input.Close[-1]){
        if(Body[-1]>Body){
            if(Downshadow>0.5*Body){
                if(Downshadow>2*Upshadow){
                    Pinbar_l = 1;
                }
            }
        }
    }
   
    if(Pinbar_l>0){ Buy = Input.Low[0]-Body;   Buy.DrawFigure(Figure.Up,Color.Blue,Line.Solid,5,Color.Orange,0);   }
    if(Pinbar_h>0){ Sell = Input.High[0]+Body; Sell.DrawFigure(Figure.Down,Color.Red,Line.Solid,5,Color.Orange,0); }
   
}
Вложения
5a16s5d1a65s1.png
pinBar.script
(1.87 КБ) 1025 скачиваний

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

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение evge » 16 апр 2020, 07:09

Приветствую!

Проблемы 2, однотипные.

Для серии Body отключаем отображение.

AddSeries(Name, Type, Color, Visible)

ставим Visible = false

Но это первая часть проблемы.

Вторая, это задание значение по умолчанию в 0 для Buy, Sell
Хоть они и при 0 и не отрисовываются, но график автоматически масштабирует до отображения значений 0.
Не задаем 0 по умолчанию и всё будет хорошо (в коде ниже закомментировал).

Исправленный вариант:

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

function Initialize()
{
    IndicatorName = "pinBar";
    AddInput("Input", Inputs.Candle);
    PriceStudy = true;
    AddSeries("Buy", DrawAs.Custom, Color.Blue);
    AddSeries("Sell", DrawAs.Custom, Color.Red);
    AddSeries("Body", DrawAs.Custom, Color.Black, false);
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Delat (Дельта) - разница между объемом сделок покупателей  и продавцов

    //Buy = 0; Sell = 0;
    Body = Math.Abs(Input.Open[0] - Input.Close[0]);
    var Upshadow = 0.0; var Downshadow = 0.0;
    var Pinbar_h = 0.0; var Pinbar_l = 0.0;
   
    if(Input.Open[0]>Input.Close[0])
        Upshadow = Input.High[0] - Input.Open[0];
    else
        Upshadow = Input.High[0] - Input.Close[0];
   
    if(Input.Open[0]>Input.Close[0])
        Downshadow = Input.Close[0] - Input.Low[0];
    else
        Downshadow = Input.Open[0] - Input.Low[0];
   
    if(Input.Close[1]>Input.Open[1]){
        if(Body[1]>Body[0]){
            if(Upshadow>0.5*Body){
                if(Upshadow>2*Downshadow){
                    Pinbar_h = 1;
                }
            }
        }
    }
   
    if(Input.Open[1]>Input.Close[1]){
        if(Body[1]>Body[0]){
            if(Downshadow>0.5*Body){
                if(Downshadow>2*Upshadow){
                    Pinbar_l = 1;
                }
            }
        }
    }
   
    if(Pinbar_l>0){ Buy = Input.Low[0]-Body;   Buy.DrawFigure(Figure.Up,Color.Blue,Line.Solid,5,Color.Orange,0); }
    if(Pinbar_h>0){ Sell = Input.High[0]+Body; Sell.DrawFigure(Figure.Down,Color.Red,Line.Solid,5,Color.Orange,0); }
}
никогда такого не было и вот опять

Gman_cpt
Сообщения: 3
Зарегистрирован: 28 апр 2020, 16:31

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение Gman_cpt » 28 апр 2020, 16:36

Добрый день!
Скажите возможно привязать фильтр объема к этому индикатору. Чтобы отображал только те пинбары по которым высокий и крайне высокий объемы проходят.

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

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение evge » 28 апр 2020, 17:04

Здравствуйте!
Возможно.

В чем объем задавать? Считать средний за период и при отклонении от среднего на > указанного % рисуем ?

Или просто задаем нужный объем выше больше которого рисуем?

Второе менее универсально.
никогда такого не было и вот опять

Gman_cpt
Сообщения: 3
Зарегистрирован: 28 апр 2020, 16:31

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение Gman_cpt » 28 апр 2020, 17:18

Да по первому варианту будет правильнее. "Считать средний за период и при отклонении от среднего на > указанного % рисуем"

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

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение evge » 28 апр 2020, 17:40

В переменной "O" считается отклонение в % от среднего объема за период PeriodV до текущего бара (не включая его объем).
Оно может быть и минусовым в %.

Добавлены параметры:

PeriodV - за какой период считаем средний объем
Perc - фильтр в % на сколько от среднего должен быть больше объем

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

function Initialize()
{
    IndicatorName = "pinBarVol";
    AddInput("Input", Inputs.Candle);
    PriceStudy = true;
    AddSeries("Buy", DrawAs.Custom, Color.Blue);
    AddSeries("Sell", DrawAs.Custom, Color.Red);
    AddSeries("Body", DrawAs.Custom, Color.Black, false);
    AddParameter("PeriodV", 20);
    AddParameter("Perc", 100);
    AddGlobalVariable("sumV", Types.Double, 0);
    AddGlobalVariable("VA", Types.Double, 0);
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Delat (Дельта) - разница между объемом сделок покупателей  и продавцов

// pinBarVol
// evge 28.04.2020 https://alfadirect4.ru

   double O = 0;
   if (VA != 0) O = Input.Volume[0] / VA * 100 - 100;
   
   sumV += Input.Volume[0];
   if (CurrentIndex > PeriodV) sumV -= Input.Volume[PeriodV];
   VA = sumV / PeriodV;

    //Buy = 0; Sell = 0;
    Body = Math.Abs(Input.Open[0] - Input.Close[0]);
    var Upshadow = 0.0; var Downshadow = 0.0;
    var Pinbar_h = 0.0; var Pinbar_l = 0.0;
   
    if(Input.Open[0]>Input.Close[0])
        Upshadow = Input.High[0] - Input.Open[0];
    else
        Upshadow = Input.High[0] - Input.Close[0];
   
    if(Input.Open[0]>Input.Close[0])
        Downshadow = Input.Close[0] - Input.Low[0];
    else
        Downshadow = Input.Open[0] - Input.Low[0];
   
    if(Input.Close[1]>Input.Open[1]){
        if(Body[1]>Body[0]){
            if(Upshadow>0.5*Body){
                if(Upshadow>2*Downshadow){
                    Pinbar_h = 1;
                }
            }
        }
    }
   
    if(Input.Open[1]>Input.Close[1]){
        if(Body[1]>Body[0]){
            if(Downshadow>0.5*Body){
                if(Downshadow>2*Upshadow){
                    Pinbar_l = 1;
                }
            }
        }
    }
   
    if(Pinbar_l>0 && O >= Perc){ Buy = Input.Low[0]-Body;   Buy.DrawFigure(Figure.Up,Color.Blue,Line.Solid,5,Color.Orange,0); }
    if(Pinbar_h>0 && O >= Perc){ Sell = Input.High[0]+Body; Sell.DrawFigure(Figure.Down,Color.Red,Line.Solid,5,Color.Orange,0); }
}
никогда такого не было и вот опять

Gman_cpt
Сообщения: 3
Зарегистрирован: 28 апр 2020, 16:31

Re: Инд. PinBar почему отображается с нуля ?

Непрочитанное сообщение Gman_cpt » 28 апр 2020, 20:07

Большое спасибо!


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

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

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