I am using a simple strategy and would like it to run on each tick
the problem is that when there is a position enter signal and the position filled, the strategy continue sending position enter signal although i check :
if (Position.MarketPosition != MarketPosition.Flat || _pendingPosition == true)
Here is the simplified code, can you see any problems in the design/code ?
namespace NinjaTrader.NinjaScript.Strategies { public class Test : Strategy { private const string EnterShortName = "Open Short"; private const string ProfitShort = "Profit Short"; private const string StopShort = "Stop Short"; private bool _pendingPosition; private bool _enterShort; private double _stopPrice; private double _profitPrice; protected override void OnBarUpdate() { _enterShort = false; if (Position.MarketPosition != MarketPosition.Flat || _pendingPosition == true) return; _enterShort = SomeCondition... if (_enterShort) { _stopPrice = Close[0] + (8 * TickSize); EnterShortLimit(1, Close[0] - TickSize, EnterShortName); } } protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string comment) { _pendingPosition = orderState == OrderState.Accepted || orderState == OrderState.Working || orderState == OrderState.Submitted; } protected override void OnExecutionUpdate(Execution execution, string executionId, double price, int quantity, MarketPosition marketPosition, string orderId, DateTime time) { if (execution.Order.OrderState == OrderState.Filled) { if (exec.Order.Name == EnterShortName) SetStopProfit(execution); } } private void SetStopProfit(Execution execution) { double entryPrice = execution.Order.AverageFillPrice; if (Position.MarketPosition == MarketPosition.Short) { _profitPrice = entryPrice - (TickSize * 6); ExitShortStopMarket(0, true, 1, _stopPrice, StopShort, EnterShortName); ExitShortLimit(0, true, 1, _profitPrice, ProfitShort, EnterShortName); } } } }
Thanks
Comment