Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

How to include the Short Logic to a Long only Trailing Stop Strategy Builder code?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #31
    Hi Cormick, thanks for your reply.

    It's better to have one strategy running on one instrument because two strategies running on the same instruments can get each other out of sync with the account (one goes long as the other goes short, leaving the account flat).

    Another debugging tool to use is the Trace Orders feature where ignored and rejected orders will be logged in the output window:
    https://ninjatrader.com/support/help...aceorders2.htm

    An example strategy that reverses is the SampleMACrossover strategy.

    Best regards,
    -ChrisL

    Comment


      #32
      Hi Chris,

      Thanks to NT-Roland observation here:
      The issue was wrong limitPrice understanding:

      The solution.
      http://https://ninjatrader.com/de/su...r_handling.htm

      Code:
      EnterLongLimit(int quantity, double limitPrice, string signalName)
      Example:

      Code:
      EnterLongLimit([B]GetCurrentBid()[/B], "SMA Cross Entry");
      GetCurrentBid() method instead of the original zero 0.


      The Multi-Steps Breakeven working code for both Long and Short:
      Code:
      #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 MultiStepBreakeven : Strategy
      {
      private int StopLossModeLong;
      private int StopLossModeShort;
      
      
      protected override void OnStateChange()
      {
      if (State == State.SetDefaults)
      {
      Description = @"Enter the description for your new custom Strategy here.";
      Name = "MultiStepBreakeven";
      Calculate = Calculate.OnEachTick;
      EntriesPerDirection = 1;
      EntryHandling = EntryHandling.AllEntries;
      IsExitOnSessionCloseStrategy = true;
      ExitOnSessionCloseSeconds = 30;
      IsFillLimitOnTouch = false;
      MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
      OrderFillResolution = OrderFillResolution.Standard;
      Slippage = 0;
      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;
      StopLossModeLong = 0;
      StopLossModeShort = 0;
      }
      else if (State == State.Configure)
      {
      }
      }
      
      protected override void OnBarUpdate()
      {
      if (BarsInProgress != 0)
      return;
      
      // Set 1
      if ((Position.MarketPosition == MarketPosition.Flat)
      && (Close[0] > Open[0]))
      {
      EnterLongLimit(Convert.ToInt32(DefaultQuantity), GetCurrentBid(), "");
      StopLossModeLong = 0;
      }
      
      if (CurrentBars[0] < 1)
      return;
      
      
      // Set 2
      if ((Position.MarketPosition == MarketPosition.Long)
      && (StopLossModeLong == 0))
      {
      ExitLongStopMarket(Convert.ToInt32(DefaultQuantity ), (Position.AveragePrice + (-10 * TickSize)) , "", "");
      }
      
      // Set 3
      if ((Position.MarketPosition == MarketPosition.Long)
      && (Close[0] >= (Position.AveragePrice + (10 * TickSize)) )
      && (StopLossModeLong == 0))
      {
      StopLossModeLong = 1;
      }
      
      // Set 4
      if ((Position.MarketPosition == MarketPosition.Long)
      && (StopLossModeLong == 1))
      {
      ExitLongStopMarket(Convert.ToInt32(DefaultQuantity ), Position.AveragePrice, "", "");
      }
      
      // Set 5
      if ((Position.MarketPosition == MarketPosition.Long)
      && (Close[0] >= (Position.AveragePrice + (20 * TickSize)) )
      && (StopLossModeLong == 1))
      {
      StopLossModeLong = 2;
      }
      
      // Set 6
      if ((Position.MarketPosition == MarketPosition.Long)
      && (StopLossModeLong == 2))
      {
      ExitLongStopMarket(Convert.ToInt32(DefaultQuantity ), (Position.AveragePrice + (10 * TickSize)) , "", "");
      }
      
      
      // Set 7
      if ((Position.MarketPosition == MarketPosition.Flat)
      && (Close[0] < Open[0]))
      {
      EnterShortLimit(Convert.ToInt32(DefaultQuantity), GetCurrentAsk(), "");
      StopLossModeShort = 0;
      }
      
      if (CurrentBars[0] < 1)
      return;
      
      
      // Set 8
      if ((Position.MarketPosition == MarketPosition.Short)
      && (StopLossModeShort == 0))
      {
      ExitShortStopMarket(Convert.ToInt32(DefaultQuantit y), (Position.AveragePrice + (10 * TickSize)) , "", "");
      }
      
      // Set 9
      if ((Position.MarketPosition == MarketPosition.Short)
      && (Close[0] <= (Position.AveragePrice + (-10 * TickSize)) )
      && (StopLossModeShort == 0))
      {
      StopLossModeShort = 1;
      }
      
      // Set 10
      if ((Position.MarketPosition == MarketPosition.Short)
      && (StopLossModeShort == 1))
      {
      ExitShortStopMarket(Convert.ToInt32(DefaultQuantit y), Position.AveragePrice, "", "");
      }
      
      // Set 11
      if ((Position.MarketPosition == MarketPosition.Short)
      && (Close[0] <= (Position.AveragePrice + (-20 * TickSize)) )
      && (StopLossModeShort == 1))
      {
      StopLossModeShort = 2;
      }
      
      // Set 12
      if ((Position.MarketPosition == MarketPosition.Short)
      && (StopLossModeShort == 2))
      {
      ExitShortStopMarket(Convert.ToInt32(DefaultQuantit y), (Position.AveragePrice + (-10 * TickSize)) , "", "");
      }
      
      }
      }
      }


      Last edited by Cormick; 05-31-2021, 01:42 PM.

      Comment

      Latest Posts

      Collapse

      Topics Statistics Last Post
      Started by NullPointStrategies, Today, 05:17 AM
      0 responses
      53 views
      0 likes
      Last Post NullPointStrategies  
      Started by argusthome, 03-08-2026, 10:06 AM
      0 responses
      130 views
      0 likes
      Last Post argusthome  
      Started by NabilKhattabi, 03-06-2026, 11:18 AM
      0 responses
      70 views
      0 likes
      Last Post NabilKhattabi  
      Started by Deep42, 03-06-2026, 12:28 AM
      0 responses
      44 views
      0 likes
      Last Post Deep42
      by Deep42
       
      Started by TheRealMorford, 03-05-2026, 06:15 PM
      0 responses
      49 views
      0 likes
      Last Post TheRealMorford  
      Working...
      X