Работа с торговыми сущностями(ордера, позиции, сделки)

Для получения данных о торговых сущностях необходимо обратиться к свойству TradingManager.

Данное свойство включает:

  • Security - выбранный инструмент
  • Portfolio - выбранный портфель
  • Position - текущая позиция
  • MyTrades - совершенные сделки
  • Orders - выставленные ордера

Кроме того, можно переопределить следующие методы для получения обновлений:

  • void OnNewOrders(IEnumerable orders) - новые ордера
  • void OnOrderChanged(Order order) - изменение ордеров
  • void OnNewMyTrades(IEnumerable myTrades) - новые сделки
  • void OnPortfolioChanged(Portfolio portfolio) - изменение портфеля
  • void OnPositionChanged(Position position) - изменение позиции

Ниже приведен пример индикатора, выводящего данные о портфеле, позиции, ордерах и сделках. Также индикатор добавляет записи в логи при получении новых ордеров, новых сделок, при изменении портфеля или позиции. 

public class SampleTradingInfo : Indicator
    {
        public SampleTradingInfo()
        {
            EnableCustomDrawing = true;
            SubscribeToDrawingEvents(DrawingLayouts.Final);
        }

        #region Overrides of BaseIndicator

        protected override void OnCalculate(int bar, decimal value)
        {

        }

        #endregion

        protected override void OnNewOrder(Order orders)
        {
            this.LogWarn(order.ToString());
        }

        protected override void OnOrderChanged(Order order)
        {
            this.LogWarn(order.ToString());
        }

        protected override void OnNewMyTrade(MyTrade myTrade)
        {
            this.LogWarn(myTrade.ToString());
        }

        protected override void OnPortfolioChanged(Portfolio portfolio)
        {
            this.LogWarn(portfolio.ToString());
        }

        protected override void OnPositionChanged(Position position)
        {
            this.LogWarn(position.ToString());
        }

        protected override void OnRender(RenderContext context, DrawingLayouts layout)
        {
            var label = "";

            if (TradingManager.Security != null)
                label += $"Security: {TradingManager.Security}{Environment.NewLine}";

            if (TradingManager.Portfolio != null)
                label += $"Portfolio: {TradingManager.Portfolio}{Environment.NewLine}";

            if (TradingManager.Position != null)
                label += $"Position: {TradingManager.Position}{Environment.NewLine}";

            var orders = TradingManager.Orders.Where(t => t.State == OrderStates.Active);

            if (orders.Any())
            {
                label += $"{Environment.NewLine}---------------------Active orders:------------------------{Environment.NewLine}";

                foreach (var order in orders)
                {
                    label += $"{order}{Environment.NewLine}";
                }
            }

            var myTrades = TradingManager.MyTrades;

            if (myTrades.Any())
            {
                label += $"{Environment.NewLine}---------------------MyTrades:------------------------{Environment.NewLine}";

                foreach (var myTrade in myTrades)
                {
                    label += $"{myTrade}{Environment.NewLine}";
                }
            }

            var font = new RenderFont("Arial", 10);
            var size = context.MeasureString(label, font);

            context.FillRectangle(Color.DarkRed, new Rectangle(25, 25, (int)size.Width + 50, (int)size.Height + 50));
            context.DrawString(label, font, Color.Azure, 50, 50);
        }
    }