Sorry to bother you (again), but I have a condition in an autostrategy that calls an ATM that I just can't figure out. I'm using 10 Minute bars.
If a position enters and exits in the SAME bar, another full bar prints, and then another bar prints before the strategy places another order.
BUT, if a position enters on one bar, then exits one or more bars later, the following bar initiates the next order (does not wait as in the first situation) like it should.
I suspect it's an orderId issue. Shouldn't the orderId be reset to Empty once the bar closes, even though both entry and exit were in the same bar?
I'm sure you will want to see the code so here it is (a version):
if (ToTime(Time[0]) >= ToTime(7, 50, 0)
&& ToTime(Time[0]) <= ToTime(14, 0, 0)
&& orderId.Length == 0
&& atmStrategyId.Length == 0
&& Close[0] < Open[0])
{
atmStrategyId = GetAtmStrategyUniqueId();
orderId = GetAtmStrategyUniqueId();
AtmStrategyCreate(Action.Sell, OrderType.Limit, Close[0], 0,
TimeInForce.Day,orderId , "ATM Name",
atmStrategyId);
}
// Check for a pending entry order
if (orderId.Length > 0)
{
string[] status = GetAtmStrategyEntryOrderStatus(orderId);
// If the status call can't find the order specified, the return
array length will be zero otherwise it will hold elements
if (status.GetLength(0) > 0)
{
// If the order state is terminal, reset the order id value
if (status[2] == "Filled" || status[2] == "Cancelled" ||
status[2] == "Rejected")
orderId = string.Empty;
}
} // If the strategy has terminated reset the strategy id
else if (atmStrategyId.Length > 0 && GetAtmStrategyMarketPosition(atmStrategyId) == Cbi.MarketPosition.Flat)
{
atmStrategyId = string.Empty;
}
Thanks,
Joe
Comment