Long time lurker, first time poster. I am developing a NT strategy using an AtmStrategy but it is not acting the way I want it to. I have attached the script. I want it to basically:
A) Kill the AtmEntryOrder after 1 bar if it does not fill - currently it does not
B) Kill any open AtmStrategies and positions after 3PM - currently it does not
C) When I specify to reverse positions, it does not.
Thanks for your help.
#region Using declarations using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Xml.Serialization; using NinjaTrader.Cbi; using NinjaTrader.Data; using NinjaTrader.Indicator; using NinjaTrader.Gui.Chart; using NinjaTrader.Strategy; #endregion // This namespace holds all strategies and is required. Do not change it. namespace NinjaTrader.Strategy { /// <summary> /// Enter the description of your strategy here /// </summary> [Description("Enter the description of your strategy here")] public class StochScalpRANGE12 : Strategy { #region Variables // Wizard generated variables private string orderId = string.Empty; private string atmStrategyId = string.Empty; private int BarsPast_OE = 1; private DataSeries barcount; #endregion /// <summary> /// This method is used to configure the strategy and is called once before any strategy method is called. /// </summary> protected override void Initialize() { barcount = new DataSeries (this) ; } private void GoLong() { if (orderId != null) { string[] entryOrder = GetAtmStrategyEntryOrderStatus(orderId); if (GetAtmStrategyMarketPosition(orderId) != MarketPosition.Flat) return; if (entryOrder.Length > 0) { if (entryOrder[2].ToString() != "Filled") return; } } orderId = GetAtmStrategyUniqueId(); atmStrategyId = GetAtmStrategyUniqueId(); AtmStrategyCreate(Cbi.OrderAction.Buy, OrderType.Limit, Low[0], 0, TimeInForce.Day, orderId, "CL-Ichi", atmStrategyId); barcount.Set(CurrentBars[0]); } private void GoShort() { if (orderId != null) { string[] entryOrder = GetAtmStrategyEntryOrderStatus(orderId); if (GetAtmStrategyMarketPosition(orderId) != MarketPosition.Flat) return; if (entryOrder.Length > 0) { if (entryOrder[2].ToString() != "Filled") return; } } orderId = GetAtmStrategyUniqueId(); atmStrategyId = GetAtmStrategyUniqueId(); AtmStrategyCreate(Cbi.OrderAction.SellShort, OrderType.Limit, High[0], 0, TimeInForce.Day, orderId, "CL-Ichi", atmStrategyId); barcount.Set(CurrentBars[0]); } private void ExitLong() { // check to see if not flat, close all open orders AtmStrategyClose(orderId); } private void ExitShort() { // check to see if not flat, close all open orders AtmStrategyClose(orderId); } /// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { if (ToTime(Time[0]) >= ToTime(15, 0, 0)) { AtmStrategyClose(orderId); } // Cancels Limit order LONG if ((CurrentBars[0] + BarsPast_OE) > barcount[0] && GetAtmStrategyMarketPosition(orderId) == MarketPosition.Long) { AtmStrategyCancelEntryOrder(orderId); orderId = string.Empty; Print("Cancelled LONG ENTRY Order from strategy"); } // Cancels Limit order SHORT if ((CurrentBars[0] + BarsPast_OE) > barcount[0] && GetAtmStrategyMarketPosition(orderId) == MarketPosition.Short) { AtmStrategyCancelEntryOrder(orderId); orderId = string.Empty; Print("Cancelled SHORT ENTRY Order from strategy"); } if ((ToTime(Time[0]) > ToTime(5, 30, 0)) && (ToTime(Time[0]) < ToTime(15, 0, 0))) { // Condition set 1 if (CrossAbove(MACD(10, 22, 5), MACD(10, 22, 5).Avg, 1)) { if (Position.MarketPosition == MarketPosition.Flat) { GoLong(); } if (Position.MarketPosition == MarketPosition.Short) { ExitShort(); GoLong(); } } // Condition set 2 if (CrossBelow(MACD(10, 22, 5), MACD(10, 22, 5).Avg, 1)) { if (Position.MarketPosition == MarketPosition.Flat) { GoShort(); } if (Position.MarketPosition == MarketPosition.Long) { ExitLong(); GoShort(); } } } } #region Properties #endregion } }
Comment