Развяжем руки лютым арбитражникам!

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

  1. karuzzo

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

     

    Для реализации необходимо добавить перегрузку конструктора во все типы вкладок. Эта перегрузка должна принимать ConnectorCandles. Пример BotTabSimple 

    Было:

    public BotTabSimple(string name, StartProgram startProgram)
          {
              TabName = name;
                StartProgram = startProgram;

              try
              {
                  _connector = new ConnectorCandles(TabName,startProgram);
                  _connector.OrderChangeEvent += _connector_OrderChangeEvent;
                  _connector.MyTradeEvent += _connector_MyTradeEvent;
                  _connector.BestBidAskChangeEvent += _connector_BestBidAskChangeEvent;
                  _connector.GlassChangeEvent += _connector_GlassChangeEvent;
                  _connector.TimeChangeEvent += StrategOneSecurity_TimeServerChangeEvent;
                  _connector.NewCandlesChangeEvent += LogicToEndCandle;
                  _connector.LastCandlesChangeEvent += LogicToUpdateLastCandle;
                  _connector.TickChangeEvent += _connector_TickChangeEvent;
                  _connector.LogMessageEvent += SetNewLogMessage;
                    _connector.ConnectorStartedReconnectEvent += _connector_ConnectorStartedReconnectEvent;

                  _marketDepthPainter = new MarketDepthPainter(TabName);
                    _marketDepthPainter.LogMessageEvent += SetNewLogMessage;

                  _journal = new Journal.Journal(TabName,startProgram);

                  _journal.PositionStateChangeEvent += _journal_PositionStateChangeEvent;
                  _journal.PositionNetVolumeChangeEvent += _journal_PositionNetVolumeChangeEvent;
                  _journal.UserSelectActionEvent += _journal_UserSelectActionEvent;
                    _journal.LogMessageEvent += SetNewLogMessage;

                  _connector.ComissionType = _journal.ComissionType;
                    _connector.ComissionValue = _journal.ComissionValue;

                 _chartMaster = new ChartCandleMaster(TabName, StartProgram);
                  _chartMaster.LogMessageEvent += SetNewLogMessage;
                  _chartMaster.SetNewSecurity(_connector.NamePaper, _connector.TimeFrameBuilder, _connector.PortfolioName, _connector.ServerType);
                    _chartMaster.SetPosition(_journal.AllPosition);

                  _alerts = new AlertMaster(TabName, _connector, _chartMaster);
                  _alerts.LogMessageEvent += SetNewLogMessage;
                    _dealCreator = new PositionCreator();

                  _manualControl = new BotManualControl(TabName, this,startProgram);
                  _manualControl.LogMessageEvent += SetNewLogMessage;
                    _manualControl.DontOpenOrderDetectedEvent += _dealOpeningWatcher_DontOpenOrderDetectedEvent;

                    _lastTickIndex = 0;

                  _stopsOpener = new List<PositionOpenerToStop>();

                  _acebergMaker = new AcebergMaker();
                  _acebergMaker.NewOrderNeadToExecute += _acebergMaker_NewOrderNeadToExecute;
                  _acebergMaker.NewOrderNeadToCansel += _acebergMaker_NewOrderNeadToCansel;
                }

              catch (Exception error)
              {
                  SetNewLogMessage(error.ToString(), LogMessageType.Error);
              }
    }

    Стало:

    public BotTabSimple(string name, StartProgram startProgram) { TabName = name; StartProgram = startProgram; _connector = new ConnectorCandles(TabName, startProgram); Initialization(TabName, StartProgram); } public BotTabSimple(string name, StartProgram startProgram, ConnectorCandles connector) { TabName = name; StartProgram = startProgram; _connector = connector; Initialization(TabName, StartProgram); } private void Initialization(string TabName, StartProgram startProgram) { try { _journal = new Journal.Journal(TabName, startProgram); _journal.PositionStateChangeEvent += _journal_PositionStateChangeEvent; _journal.PositionNetVolumeChangeEvent += _journal_PositionNetVolumeChangeEvent; _journal.UserSelectActionEvent += _journal_UserSelectActionEvent; _journal.LogMessageEvent += SetNewLogMessage; _connector.ComissionType = _journal.ComissionType; _connector.ComissionValue = _journal.ComissionValue; _chartMaster = new ChartCandleMaster(TabName, StartProgram); _chartMaster.LogMessageEvent += SetNewLogMessage; _chartMaster.SetNewSecurity(_connector.NamePaper, _connector.TimeFrameBuilder, _connector.PortfolioName, _connector.ServerType); _chartMaster.SetPosition(_journal.AllPosition); _alerts = new AlertMaster(TabName, _connector, _chartMaster); _alerts.LogMessageEvent += SetNewLogMessage; _connector.OrderChangeEvent += _connector_OrderChangeEvent; _connector.MyTradeEvent += _connector_MyTradeEvent; _connector.BestBidAskChangeEvent += _connector_BestBidAskChangeEvent; _connector.GlassChangeEvent += _connector_GlassChangeEvent; _connector.TimeChangeEvent += StrategOneSecurity_TimeServerChangeEvent; _connector.NewCandlesChangeEvent += LogicToEndCandle; _connector.LastCandlesChangeEvent += LogicToUpdateLastCandle; _connector.TickChangeEvent += _connector_TickChangeEvent; _connector.LogMessageEvent += SetNewLogMessage; _connector.ConnectorStartedReconnectEvent += _connector_ConnectorStartedReconnectEvent; _marketDepthPainter = new MarketDepthPainter(TabName); _marketDepthPainter.LogMessageEvent += SetNewLogMessage; _dealCreator = new PositionCreator(); _manualControl = new BotManualControl(TabName, this, startProgram); _manualControl.LogMessageEvent += SetNewLogMessage; _manualControl.DontOpenOrderDetectedEvent += _dealOpeningWatcher_DontOpenOrderDetectedEvent; _lastTickIndex = 0; _stopsOpener = new List<PositionOpenerToStop>(); _acebergMaker = new AcebergMaker(); _acebergMaker.NewOrderNeadToExecute += _acebergMaker_NewOrderNeadToExecute; _acebergMaker.NewOrderNeadToCansel += _acebergMaker_NewOrderNeadToCansel; } catch (Exception error) { SetNewLogMessage(error.ToString(), LogMessageType.Error); } }


    Также нужно добавить перегрузку виртуального метода TabCreate() в классе BotPanel

    public virtual void TabCreate(BotTabType tabType, ConnectorCandles connector) { }

    Так же нужно сделать некоторые сопутствующие поля классов ConnectorCandles, BotTabSimple (равно как и поля прочих классов вкладок) публичными,
    а лучше написать для этих полей свойства с сеттером.

    Поскольку нет изменений в функционале, данное дополнение функционала предположительно обратносовместимо.
    karuzzo
    29.05.2020 22:45
    #1
  2. mrmvd

    Регистрация:
    19.03.20
    Сообщения:
    92
    Был на сайте:
    22.09.20

    Классно. А я и не знал, что у неё вкладки есть. То есть, можно в разных вкладках разные аккаунты к коннекторам бирж использовать, чтобы например на первой вкладке был счёт для лонгов, а на второй - для шортов?

    mrmvd
    30.05.2020 20:53
    #2