Here is what I assume and find:
- Looking at the GoLong(), I would expect the strategy to create 3 orders (target1, target2, target3), but looking at the chart I see only 1.
- I using teh ES 5min chart and target1=4, target2=4, target3=4, I would expect the Sell order of 19:05 to have a traget of 1pt, which is achieved at 20:55, but the instead the order goes all the way up and exit at 1754.0, which is not the stop (12t its 1756.5).
Can you help to explain.
Attached are the chart, and orders, trades & Excutions.
private void GoLong() { SetStopLoss("target1", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetStopLoss("target2", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetStopLoss("target3", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetProfitTarget("target1", CalculationMode.Price, Close[0] + ((Target1)*TickSize)); SetProfitTarget("target2", CalculationMode.Price, Close[0] + ((Target1+Target2)*TickSize)); SetProfitTarget("target3", CalculationMode.Price, Close[0] + ((Target1+Target2+Target3)*TickSize)); EnterLong("target1"); EnterLong("target2"); EnterLong("target3"); }
#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> /// Big Mike - 1/26/10 - https://www.bigmiketrading.com/beginners-introductions-tutorials/2512-video-tutorial-how-create-advanced-ninjatrader-strategy.html /// </summary> [Description("Make me millions Jan 27 2010")] public class TargetCCI : Strategy { #region Variables private bool useRealData = false; private int target1 = 12; private int target2 = 10; private int target3 = 24; private int stop = 12; private bool be2 = true; private bool be3 = true; private int cciLength = 14; private int cciLevelH = 250; private int cciLevelL = -250; private int cciLookBackBars = 1; #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() { CalculateOnBarClose = true; EntryHandling = EntryHandling.UniqueEntries; } private void GoLong() { SetStopLoss("target1", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetStopLoss("target2", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetStopLoss("target3", CalculationMode.Price, Close[0] - (Stop*TickSize), false); SetProfitTarget("target1", CalculationMode.Price, Close[0] + ((Target1)*TickSize)); SetProfitTarget("target2", CalculationMode.Price, Close[0] + ((Target1+Target2)*TickSize)); SetProfitTarget("target3", CalculationMode.Price, Close[0] + ((Target1+Target2+Target3)*TickSize)); EnterLong("target1"); EnterLong("target2"); EnterLong("target3"); } private void GoShort() { SetStopLoss("target1", CalculationMode.Price, Close[0] + (Stop*TickSize), false); SetStopLoss("target2", CalculationMode.Price, Close[0] + (Stop*TickSize), false); SetStopLoss("target3", CalculationMode.Price, Close[0] + (Stop*TickSize), false); SetProfitTarget("target1", CalculationMode.Price, Close[0] - ((Target1)*TickSize)); SetProfitTarget("target2", CalculationMode.Price, Close[0] - ((Target1+Target2)*TickSize)); SetProfitTarget("target3", CalculationMode.Price, Close[0] - ((Target1+Target2+Target3)*TickSize)); EnterShort("target1"); EnterShort("target2"); EnterShort("target3"); } private void ManageOrders() { if (Position.MarketPosition == MarketPosition.Long) { if (BE2 && High[0] > Position.AvgPrice + ((Target1)*TickSize)) SetStopLoss("target2", CalculationMode.Price, Position.AvgPrice, false); if (BE3 && High[0] > Position.AvgPrice + ((Target1+Target2)*TickSize)) SetStopLoss("target2", CalculationMode.Price, Position.AvgPrice, false); } if (Position.MarketPosition == MarketPosition.Short) { if (BE2 && Low[0] < Position.AvgPrice - ((Target1)*TickSize)) SetStopLoss("target2", CalculationMode.Price, Position.AvgPrice, false); if (BE3 && Low[0] < Position.AvgPrice - ((Target1+Target2)*TickSize)) SetStopLoss("target2", CalculationMode.Price, Position.AvgPrice, false); } } /// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { if (useRealData && Historical) return; EntryHandling = EntryHandling.UniqueEntries; ManageOrders(); if (CrossBelow(CCI(cciLength), cciLevelH, cciLookBackBars)) EnterLong(); if (CrossAbove(CCI(cciLength), cciLevelL, cciLookBackBars)) EnterShort(); } #region Properties [Description("")] [Category("Parameters")] public int CciLength { get { return cciLength; } set { cciLength = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public int CciLookBackBars { get { return cciLookBackBars; } set { cciLookBackBars = Math.Max(0, value); } } [Description("")] [Category("Parameters")] public int CciLevelH { get { return cciLevelH; } set { cciLevelH = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public int CciLevelL { get { return cciLevelL; } set { cciLevelL = Math.Min(-1, value); } } [Description("")] [Category("Parameters")] public int Target1 { get { return target1; } set { target1 = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public int Target2 { get { return target2; } set { target2 = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public int Target3 { get { return target3; } set { target3 = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public int Stop { get { return stop; } set { stop = Math.Max(1, value); } } [Description("")] [Category("Parameters")] public bool BE2 { get { return be2; } set { be2 = value; } } [Description("")] [Category("Parameters")] public bool BE3 { get { return be3; } set { be3 = value; } } [Description("")] [Category("Parameters")] public bool UseRealData { get { return useRealData; } set { useRealData = value; } } #endregion } }
Comment