Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

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
    Chris L.NinjaTrader Customer Service

    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 bortz, 11-06-2023, 08:04 AM
      47 responses
      1,606 views
      0 likes
      Last Post aligator  
      Started by jaybedreamin, Today, 05:56 PM
      0 responses
      8 views
      0 likes
      Last Post jaybedreamin  
      Started by DJ888, 04-16-2024, 06:09 PM
      6 responses
      18 views
      0 likes
      Last Post DJ888
      by DJ888
       
      Started by Jon17, Today, 04:33 PM
      0 responses
      4 views
      0 likes
      Last Post Jon17
      by Jon17
       
      Started by Javierw.ok, Today, 04:12 PM
      0 responses
      13 views
      0 likes
      Last Post Javierw.ok  
      Working...
      X