namespace NinjaTrader.NinjaScript.Strategies
{
public class : Strategy
{
private List<Order> stopLossOrders;
private List<Order> profitTargetOrders;
private bool doneForSession = false;
private Account myAccount;
private Order firstOrder = null;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Name = "Bwebmedia";
Calculate = Calculate.OnBarClose;
EntriesPerDirection = 1;
EntryHandling = EntryHandling.UniqueEntries;
IsExitOnSessionCloseStrategy = true;
ExitOnSessionCloseSeconds = 0;
MaximumBarsLookBack = MaximumBarsLookBack.Infinite;
OrderFillResolution = OrderFillResolution.Standard;
Slippage = 0;
StartBehavior = StartBehavior.AdoptAccountPosition;
TimeInForce = TimeInForce.Gtc;
TraceOrders = true;
RealtimeErrorHandling = RealtimeErrorHandling.IgnoreAllErrors;
StopTargetHandling = StopTargetHandling.ByStrategyPosition;
BarsRequiredToTrade = 1;
IsInstantiatedOnEachOptimizationIteration = true;
lock (Account.All)
myAccount = Account.All.FirstOrDefault(a => a.Name == "Sim101");
}
else if (State == State.Configure)
{
profitTargetOrders = new List<Order>();
stopLossOrders = new List<Order>();
SetProfitTarget("", CalculationMode.Ticks, 1);
SetStopLoss("", CalculationMode.Ticks, 2, false);
}
}
protected override void OnBarUpdate()
{
if (State == State.Historical) return;
if (Bars.IsFirstBarOfSession && IsFirstTickOfBar)
doneForSession = false;
if (doneForSession)
return;
if (Close[0] > Open[0])
{
firstOrder = myAccount.CreateOrder(Instrument, OrderAction.Buy, OrderType.StopMarket, TimeInForce.Day, 1, 0, 1400, "", "", null);
myAccount.Submit(new[] { firstOrder });
EnterLong(1, "");
}
if (Position.Quantity == 1)
EnterLong(1, "");
else if (Position.Quantity == 2)
doneForSession = true;
}
protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string nativeError)
{
if (order.OrderState == OrderState.Submitted)
{
if (order.Name == "Stop loss")
stopLossOrders.Add(order);
else if (order.Name == "Profit target")
profitTargetOrders.Add(order);
}
if (stopLossOrders.Contains(order))
{
if (order.OrderState == OrderState.Cancelled || order.OrderState == OrderState.Filled || order.OrderState == OrderState.Rejected)
{
Print(order);
stopLossOrders.Remove(order);
}
else
{
Print("The order name " + order.Name + " stop price is currently " + stopPrice);
}
}
if (profitTargetOrders.Contains(order))
{
if (order.OrderState == OrderState.Cancelled || order.OrderState == OrderState.Filled || order.OrderState == OrderState.Rejected)
{
Print(order);
profitTargetOrders.Remove(order);
}
else
{
Print("The order name " + order.Name + " limit price is currently " + limitPrice);
}
}
}
#region Properties
#endregion
}
}
Comment