Работа с торговыми сущностями(ордера, позиции, сделки)
Для получения данных о торговых сущностях необходимо обратиться к свойству 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); } }
Customer support service by UserEcho