Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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 MultiStepBreakEvenLongTest : Strategy
- {
- private int StopLossModeLong;
- private int StopLossModeShort;
- private Order entryOrder = null;
- private Order initialExitOrderLong = null;
- private string oco;
- //private Order firstMoveExitOrderLong = null;
- // private Order initialExitOrderShort = null;
- // private Order firstMoveExitOrderShort = null;
- protected override void OnStateChange()
- {
- if (State == State.SetDefaults)
- {
- Description = @"Enter the description for your new custom Strategy here.";
- Name = "MultiStepBreakEvenLongTest";
- 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;
- IsAdoptAccountPositionAware = true;
- StartBehavior = StartBehavior.AdoptAccountPosition;
- IsUnmanaged = true;
- StopLossModeLong = 0;
- // StopLossModeShort = 0;
- }
- else if (State == State.Configure)
- {
- }
- else if (State == State.Realtime)
- {
- if (initialExitOrderLong != null)
- initialExitOrderLong = GetRealtimeOrder(initialExitOrderLong);
- // if (initialExitOrderShort != null)
- // initialExitOrderShort = GetRealtimeOrder(initialExitOrderShort);
- }
- }
- protected override void OnBarUpdate()
- {
- if (CurrentBar < BarsRequiredToTrade)
- return;
- if (State == State.Historical)
- return;
- if (BarsInProgress != 0)
- return;
- if (Position.MarketPosition == MarketPosition.Flat && entryOrder == null)
- {
- oco = GetAtmStrategyUniqueId() + "entry";
- SubmitOrderUnmanaged(0, OrderAction.Buy, OrderType.Market, 1, 0, 0, oco, "EntryOrder");
- }
- if (PositionAccount.MarketPosition == MarketPosition.Long)
- {
- StopLossModeLong = 0;
- }
- if ((PositionAccount.MarketPosition == MarketPosition.Long)
- && (initialExitOrderLong == null)
- && (StopLossModeLong == 0))
- {
- initialExitOrderLong = SubmitOrderUnmanaged(0, OrderAction.Sell, OrderType.StopMarket, 1, 0, Position.AveragePrice - 30*TickSize, "", @"Exit Long FULL STOP" );
- }
- // Set 3
- if ((PositionAccount.MarketPosition == MarketPosition.Long)
- && (initialExitOrderLong != null)
- && (StopLossModeLong == 1))
- {
- ChangeOrder(initialExitOrderLong, initialExitOrderLong.Quantity, 0, Position.AveragePrice + 10*TickSize);
- }
- // Set 4
- if ((PositionAccount.MarketPosition == MarketPosition.Long)
- && (initialExitOrderLong != null)
- && (StopLossModeLong == 0)
- && (Close[0] >= (Position.AveragePrice + (5 * TickSize / 2)) ))
- {
- StopLossModeLong = 1;
- }
- }
- protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string nativeError)
- {
- if (order.Name == "EntryOrder")
- {
- entryOrder = order;
- }
- if (order.Name == "Exit Long FULL STOP")
- {
- initialExitOrderLong = order;
- }
- if (entryOrder != null && entryOrder == order)
- {
- if (entryOrder.OrderState == OrderState.Cancelled || entryOrder.OrderState == OrderState.Filled)
- {
- entryOrder = null;
- }
- }
- if (initialExitOrderLong != null && initialExitOrderLong == order)
- {
- if (initialExitOrderLong.OrderState == OrderState.Cancelled || initialExitOrderLong.OrderState == OrderState.Filled)
- {
- initialExitOrderLong = null;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement