using System; using System.Collections.Generic; using System.Linq; using System.Text; using StockSharp.Algo.Logging; using StockSharp.Algo.Strategies; using StockSharp.BusinessEntities; using Ci = System.Globalization.CultureInfo; namespace Sample { class PlaceOrdersStrategy : Strategy { private DateTime _nextTime = new DateTime(0); private Order _order = null; public PlaceOrdersStrategy() { this.Name = "POStrategy"; } protected override void OnStarting() { Trader.NewTrades += NewTradesHandler; base.OnStarting(); } protected override void OnStopping() { Trader.NewTrades -= NewTradesHandler; this.CancelActiveOrders(); this.ClosePosition(); base.OnStopping(); } protected override void OnOrderChanged(Order order) { if(order==null) this.AddInfoLog("OnOrderChanged: order==null"); else { this.AddInfoLog("OnOrderChanged: {0}", OrderToString(order)); if (order != _order) { this.AddInfoLog("OnOrderChanged: order != _order; {0}", OrderToString(_order)); } else { if (order.State == OrderStates.Active) { this.AddInfoLog("OnOrderChanged: cancel"); Trader.CancelOrder(order); } } } base.OnOrderChanged(order); } void NewTradesHandler(IEnumerable trades) { var lastTrade = trades.Where(e=>e.Security==Security).LastOrDefault(); if(lastTrade==null || (this.Trader.MarketTime-lastTrade.Time).TotalSeconds>1 || (lastTrade.Time<_nextTime)) return; _nextTime = lastTrade.Time.AddSeconds(5); if(_order!=null && (_order.State==OrderStates.Done||_order.State==OrderStates.Failed)) _order = null; if(_order==null) { decimal price = lastTrade.Price - 1000; if(price