Страница 2 из 2

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 07:52
evge
Arteshka писал(а):Можно вторым роботом получать значения передаваемые в этот индикатор первым роботом? То есть как бы связь между роботами через индикатор.


Так не получится. Будет вызываться в каждом случае свой индикатор и связи между ними никакой.

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 09:26
Arteshka
Evge, еще тогда заключительный вопрос для закрепления материала :D . Как получить данные из индикатора( в данном случае "PlotLine" ) роботу который его вызвал.

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

WriteData(     fileName, MY.PlotLine(Input, 0).GetValue("PlotLine", 0)       );?

Не получается, чего я опять не так сделал?
Спасибо!

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 10:43
evge
Конкретно в этом индикаторе в параметре передается значение которое он и задаст только для уровня.
Серию ничем не заполняет, поэтому попытка получить через GetValue серию PlotLine ничего и не должна возвращать.

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 10:56
Arteshka
А как тогда переделать этот индикатор, как заполнить серию и как из нее данные(любые для примера) вынимать? Можете пример показать. Для понимания процесса. Спасибо.

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 11:11
evge

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

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

    AddParameter("Price", 20);
    AddLevel(0, Color.Red,  "PlotLine");

}

function Evaluate()
{
        Levels[0].Level = Price;
}


если здесь посмотреть в инициализацию, то видно что добавлена серия PlotLine

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

    AddSeries("PlotLine", DrawAs.Line, Color.Red); 


но в функции Evaluate() изменяется только добавленные уровни (1 уровень) и всё.

Т.е. сама серия индикатора ничем не заполняется.

Глубокого смысла не вижу в заполнении серии тем же параметром, что передаете в индикатор. Индикатор должен на основании переданных ему параметров произвести какие-то расчеты и записать их в серию.

Вот именно серию мы и будем читать в стратегии.

Для примера изменим код индикатора:

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

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

    AddParameter("Price", 20);
    AddLevel(0, Color.Red,  "PlotLine");

}

function Evaluate()
{
        Levels[0].Level = Price;       
        PlotLine = (Input.Close + Input.Open) * 0.5;
}


Здесь мы хотя бы какое-то полезное действие выполняем :)

PlotLine = (Input.Close + Input.Open) * 0.5;

Тут мы вычислили среднюю цену по бару из суммы цен открытия и закрытия и поместили это добро в последнее значение серии PlotLine

теперь мы можем вызывая индикатор из стратегии получать эту среднюю цену из серии PlotLine

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

MY.PlotLine(Input1, 0).GetValue("PlotLine", 0);


ну или как я привык и что тоже самое (аналог)

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

MY.PlotLine(Input1, 0)["PlotLine"][0];

Re: Как передать значение из робота в индикатор?

Добавлено: 24 янв 2018, 12:32
Arteshka
Evge, спасибо огромное!!! :)
Разложили все по полочкам. Теперь вопрос снят.
Еще раз Вам спасибо!

Re: Как передать значение из робота в индикатор?

Добавлено: 03 дек 2022, 22:37
Dmitry
Добрый день!

У меня при изменении Price, на графике прямая линия, что я не так делаю? Как будто что-то сломано.


evge писал(а):Проверил, ничего в коде не менял.
Работает. На графике привязанном к роботам отобразился PlotLine индикатор и уровень бегает за ценой Ask.

Может вы ждете что он будет бегать в отдельном графике никак не связанном с вашим роботом?

Нажмите кнопку "График" в диспетчере роботов у запущенного робота, или свяжите график с диспетчером через группу (одинаковый значек слева окна (кроме кружка))