Trying to develop 2 time period strategy using build-in functions for profit and loss.
else if (State == State.Configure)
{
AddDataSeries(Data.BarsPeriodType.Tick, 1);
SetProfitTarget("Long Entry", CalculationMode.Currency, MaxProfitLong);
SetProfitTarget("Short Entry", CalculationMode.Currency, MaxProfitShort);
SetStopLoss("Long Entry", CalculationMode.Currency, maxWinLossLong, false);
SetStopLoss("Short Entry", CalculationMode.Currency, maxWinLossShort, false);
}
I'm working with previous hour Hi Low, something like that:
if (Close[0] >= HLTR1530.HighestHigh[0] &&
Close[0] < HLTR1530.HighestHigh[0])
{
if (myEntryOrder == null)
{
EnterLongStopLimit(1, true, 1, HLTR1530.HighestHigh[0] + SizeAboveLong, HLTR1530.HighestHigh[0], "Long Entry");
barNumberOfOrder = CurrentBars[0];
Print("LONG HLTR1530.HighestHigh[0] :: " + HLTR1530.HighestHigh[0] + " TS:: " + Time[0].AddMinutes(BarsPeriod.Value).ToString("hh.mm.ss.ffffff"));
if (myEntryOrder != null )
Print("Order State :: " +myEntryOrder.OrderState.ToString());
}
}
Based on the documentation I'm using this:
protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled,
double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string nativeError)
{
// Assign entryOrder in OnOrderUpdate() to ensure the assignment occurs when expected.
// This is more reliable than assigning Order objects in OnBarUpdate, as the assignment is not gauranteed to be complete if it is referenced immediately after submitting
if ((order.Name == "Long Entry") || (order.Name == "Short Entry"))
myEntryOrder = order;
// Evaluates for all updates to myEntryOrder.
if (myEntryOrder != null && myEntryOrder == order)
{
//Time[0].ToString("hh.mm.ss.ffffff");
Print("OnOrderUpdate:: State :: " + myEntryOrder.OrderState.ToString() + " TS:: " + Time[0].AddMinutes(BarsPeriod.Value).ToString("hh.mm.ss.ffffff"));
// Check if myEntryOrder
if ((myEntryOrder.OrderState == OrderState.Cancelled) ||
(myEntryOrder.OrderState == OrderState.Filled) ||
(myEntryOrder.OrderState == OrderState.Rejected)
)
{
// Reset myEntryOrder back to null
myEntryOrder = null;
}
}
}
I have 2 questions:
#1: Log is saying the following:
OnOrderUpdate:: State :: Submitted TS:: 03.33.00.000000 <-- Seems it shows the order that was submitted before the code submits it: there is 2 minutes difference.
SHORT HLTR1530.LowestLow[0] :: 2995 TS:: 03.35.43.718000
Order State :: Submitted
OnOrderUpdate:: State :: Accepted TS:: 03.33.00.000000
OnOrderUpdate:: State :: Working TS:: 03.33.00.000000
OnOrderUpdate:: State :: Filled TS:: 03.33.00.000000
#2 I can not figure out why the system generates this error (see attached)
Appreciate any help.
--PNF
Comment