Получаем из кода робота данные о других роботах

Собственно сабж

  1. karuzzo

    Регистрация:
    16.08.19
    Сообщения:
    99
    Был на сайте:
    05.01.23

    Для некоторых стратегий есть необходимость иметь данные о других запущенных стратегиях, например для расчета размера позиций по используемуму инструменту, для других же стратегий, необходимо и вовсе управлять настройками остальных роботов, например для робота управляющего торговлей через телеграм. В обооих случаях это реализуется через глобальную переменную OsTraderMaster.Master._panelsArray

    Рассмотрим несколько примеров, и начнем с количества роботов торгующих тем же инструментом

    private int CheckOpenPos()
          {
              if (_tab.Connector.MyServer.ServerType != Market.ServerType.Tester)
              {
                  int result = 0;
                  for (int i = 0; i < OsTraderMaster.Master._panelsArray.Count; i++)
                  {
                      if (OsTraderMaster.Master._panelsArray[i].TabsSimple == null || OsTraderMaster.Master._panelsArray[i].TabsSimple.Count == 0)
                          continue;

                      BotTabSimple tab = OsTraderMaster.Master._panelsArray[i].TabsSimple[0];
                      List<Position> positions = tab.PositionsOpenAll;
                      if (positions.Count() > 0)
                      {
                          result += 1;
                      }
                  }
                  return result;
              }
              return 0;
            }

    Далее получим имена подключенных роботов, а по количеству имен определим количество самих роботов

            public class RobotState
          {
              public string Name;
              public string State;
            }

          private List<RobotState> GetRobotsStates()
          {
              List<RobotState> result = new List<RobotState>();
              foreach (var bot_item in OsTraderMaster.Master._panelsArray)
              {
                  if (bot_item.NameStrategyUniq == this.NameStrategyUniq)
                        continue;

                  Type myType = bot_item.GetType();
                  var state = myType.GetField("Regime").GetValue(bot_item);
                  result.Add(new RobotState() {  Name = bot_item.NameStrategyUniq , State = ((StrategyParameterString)state).ValueString});
              }
              return result;
            }

    А в завершении выключим/включим искомый робот переопределяя значение настройки Regime

    private void SetRobotState(string robot_name, string state)
          {
              foreach (var bot_item in OsTraderMaster.Master._panelsArray)
              {
                  if (bot_item.NameStrategyUniq != robot_name)
                        continue;

                  Type myType = bot_item.GetType();
                  myType.GetField("Regime").SetValue(bot_item, new StrategyParameterString("Regime", state, new List<string>() { "Вкл", "Выкл" }));
              }
            }

     

     

     

    karuzzo
    07.09.2020 11:40
    #1
  2. Tumbler

    Регистрация:
    16.07.18
    Сообщения:
    39
    Был на сайте:
    08.08.21

    Вот это то что мне надо, спасибо!

    Tumbler
    07.09.2020 14:49
    #2