Стратегии и роботы > Как передать значение из робота в индикатор?

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

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

Непрочитанное сообщение evge » 24 янв 2018, 07:52

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


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

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Непрочитанное сообщение Arteshka » 24 янв 2018, 09:26

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

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

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

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

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

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

Непрочитанное сообщение evge » 24 янв 2018, 10:43

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

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Непрочитанное сообщение Arteshka » 24 янв 2018, 10:56

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

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

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

Непрочитанное сообщение evge » 24 янв 2018, 11:11

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

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];
никогда такого не было и вот опять

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Непрочитанное сообщение Arteshka » 24 янв 2018, 12:32

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

Dmitry
Сообщения: 3
Зарегистрирован: 26 фев 2022, 20:16

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

Непрочитанное сообщение Dmitry » 03 дек 2022, 22:37

Добрый день!

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


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

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

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


Вернуться в «Стратегии и роботы»

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

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