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