But on this BEAR script, it tries to update every tick.
IDK what I'm doing wrong?
I put BOLD on the important relevant parts so it would be easier for you. thanks
#region Using declarations using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Xml.Serialization; using NinjaTrader.Cbi; using NinjaTrader.Gui; using NinjaTrader.Gui.Chart; using NinjaTrader.Gui.SuperDom; using NinjaTrader.Gui.Tools; using NinjaTrader.Data; using NinjaTrader.NinjaScript; using NinjaTrader.Core.FloatingPoint; using NinjaTrader.NinjaScript.Indicators; using NinjaTrader.NinjaScript.DrawingTools; #endregion //This namespace holds Strategies in this folder and is required. Do not change it. namespace NinjaTrader.NinjaScript.Strategies { public class BEARcrossWTrailer : Strategy { private int EntryBar; private double CurrentTriggerPrice; private double CurrentStopPrice; private EMA EMA1; private EMA EMA2; private Indicators.RegressionChannel RegressionChannel1; private EMA EMA3; private EMA EMA4; protected override void OnStateChange() { if (State == State.SetDefaults) { Description = @""; Name = "BEARcrossWTrailer"; Calculate = Calculate.OnEachTick; EntriesPerDirection = 1; EntryHandling = EntryHandling.AllEntries; IsExitOnSessionCloseStrategy = true; ExitOnSessionCloseSeconds = 30; IsFillLimitOnTouch = false; MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix; OrderFillResolution = OrderFillResolution.Standard; Slippage = 5; StartBehavior = StartBehavior.WaitUntilFlat; TimeInForce = TimeInForce.Gtc; TraceOrders = false; RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose; StopTargetHandling = StopTargetHandling.PerEntryExecution; BarsRequiredToTrade = 20; // Disable this property for performance gains in Strategy Analyzer optimizations // See the Help Guide for additional information IsInstantiatedOnEachOptimizationIteration = true; [B]TrailFrequency = 100; TrailStopDistance = 100;[/B] EntryBar = 1; CurrentTriggerPrice = 0; CurrentStopPrice = 0; } else if (State == State.Configure) { } else if (State == State.DataLoaded) { EMA1 = EMA(Close, 8); EMA2 = EMA(Close, 34); RegressionChannel1 = RegressionChannel(Close, 100, 2); EMA3 = EMA(Close, 8); EMA4 = EMA(Close, 34); EMA1.Plots[0].Brush = Brushes.LimeGreen; EMA2.Plots[0].Brush = Brushes.Red; AddChartIndicator(EMA1); AddChartIndicator(EMA2); } } protected override void OnBarUpdate() { if (BarsInProgress != 0) return; // Set 1 if (Position.MarketPosition == MarketPosition.Flat) { CurrentStopPrice = 0; } if (CurrentBars[0] < 30) return; // Set 2 if ((CurrentBars[0] != EntryBar) && (State == State.Realtime) && (Position.MarketPosition == MarketPosition.Flat) // Bar delay && ((BarsSinceExitExecution(0, "", 0) > 0) || (BarsSinceExitExecution(0, "", 0) == -1)) && ([B]CrossBelow[/B](EMA1, EMA2, 1)) && (Slope(RegressionChannel1.Middle, 30, 0) > -0.4)) { [B]EnterShortLimit[/B](Convert.ToInt32(DefaultQuantity), GetCurrentAsk(0), @"Short"); BarBrush = Brushes.Blue; EntryBar = Convert.ToInt32(CurrentBars[0]); [B]CurrentTriggerPrice = (Close[0] + (TrailFrequency * TickSize)) ; CurrentStopPrice = (Close[0] + (TrailStopDistance * TickSize)) ;[/B] Print(Convert.ToString(Slope(RegressionChannel1.Mi ddle, 30, 0))); } // Set 3 if ((Position.MarketPosition == MarketPosition.Short) [B]&& (Close[0] < CurrentTriggerPrice))[/B] { [B]CurrentTriggerPrice = (Close[0] + (TrailFrequency * TickSize)) ; CurrentStopPrice = (Close[0] + (TrailStopDistance * TickSize)) ;[/B] } // Set 4 if ((CurrentStopPrice != 0) && (Position.MarketPosition == MarketPosition.Short)) { ExitShortStopMarket(Convert.ToInt32(DefaultQuantit y), CurrentStopPrice, "", ""); Print(@"stop price"); } // Set 5 if ((Position.GetUnrealizedProfitLoss(PerformanceUnit .Currency, Close[0]) < -30) && (Position.MarketPosition == MarketPosition.Short)) { ExitShort(Convert.ToInt32(DefaultQuantity), @"-$30", ""); Print(@"-$30"); } // Set 6 if ((CrossAbove(EMA3, EMA4, 1)) && (Position.MarketPosition == MarketPosition.Short)) { ExitShort(Convert.ToInt32(DefaultQuantity), @"34 > 8", ""); } } #region Properties [NinjaScriptProperty] [Range(1, int.MaxValue)] [Display(Name="TrailFrequency", Order=1, GroupName="Parameters")] public int TrailFrequency { get; set; } [NinjaScriptProperty] [Range(-9999, int.MaxValue)] [Display(Name="TrailStopDistance", Order=2, GroupName="Parameters")] public int TrailStopDistance { get; set; } #endregion } }
Comment