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

Обсуждение, описание стратегий и роботов, идеи для стратегий
Arteshka
Сообщения: 66
Зарегистрирован: 10 ноя 2017, 12:43
Поблагодарили: 2 раза

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

Непрочитанное сообщение Arteshka » 20 янв 2018, 16:14

Можно ли, если можно то как передать значение из робота в индикатор?

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

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

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

Добавить доп. параметры в индикаторе и передавать их из стратегии.
Если индикатор встроенный, сделать ещё один пользовательский с нужными доп. параметрами.
никогда такого не было и вот опять

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

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

Непрочитанное сообщение oxi » 20 янв 2018, 22:14

Посмотрите стратегию Invest_Grid из Библиотеки, там индикатор рисует уровни покупки и продажи для стратегии

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

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

Непрочитанное сообщение Arteshka » 21 янв 2018, 23:58

Спасибо ребят за подсказки.Но въехать я чего-то не могу.
Если есть у Вас минутка и желание, можете накидать коротенький код с пояснениями, если нет, то нет.
На всякий случай напишу легенду. Робот получает значение от линии индикатора. Затем сверяет его со вчерашней свечей и если вчерашний High больше значения индикатора, тогда передает индикатору новое значение( вчерашний High). Индикатор рисует линию ( вчерашний High).

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

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

Непрочитанное сообщение oxi » 22 янв 2018, 19:49

Пример уже написан в стратегии Invest_Grid

Создаете индикатор PlotLine с входным параметром Price, который указывает, где рисовать линию
PlotLine(Price)

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

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;
}

Далее создаете стратегию и указываете в инициализации

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

AddGlobalVariable("MinPrice", Types.Double, 0);
AddChartIndicator("MY.PlotLine", new Dictionary <string, string>{ {"Price", "Price"} });


И в OnUpdete()
Меняете значение Price

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

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

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

Зависит всё от того, что подразумевалось под вопросом передать значение в "Индикатор" из робота, т.к. для какой цели не указано, а это может быть:

Передача в индикаторы доп. параметров для каких-то расчетов в самом индикаторе и возврате сери(и,й) из индикатора для дальнейшего анализа и выполнения действий в стратегии.

или

Передача параметров в индикаторы, которые нужно отрисовать из стратегии на графиках через AddChartIndicator().

или

и то и другое :)
никогда такого не было и вот опять

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

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

Непрочитанное сообщение Arteshka » 23 янв 2018, 14:57

Никак.
Код индикатора( взят выше ) работает и показывает значение которые ему задаю:

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

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;
}


код робота который вызывает индикатор для отрисовки:

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

function Initialize()
{
   StrategyName = "Robot";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;
   
   
   AddGlobalVariable("Price", Types.Double, 0);
    AddChartIndicator("MY.PlotLine", new Dictionary <string, string>{ {"Price", "Price"} });}

function OnUpdate()
{   
  Price=GetAsk();
  ShowMessage("!!!!!!!!");
}

Что не так не мойму?

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

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

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

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

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

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

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

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

Непрочитанное сообщение Arteshka » 23 янв 2018, 16:28

Спасибо Вам большое oxi, evge! Без Вашей помощи разбирался бы наверное годы:).
Сделал привязку-связь у диспетчера роботов все пошло!
Еще вопрос тоже в тему.
Можно вторым роботом получать значения передаваемые в этот индикатор первым роботом? То есть как бы связь между роботами через индикатор.

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

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

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

Учтите ещё то, что в зависимости от таймфрейма вашего робота будет и меняться в индикаторе уровень.

Т.к. OnUpdate() вызывается по таймфрейму робота.

Я ставил 5 сек у робота.

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


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

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

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