Long time lurker, first time poster. I am developing a NT strategy using an AtmStrategy but it is not acting the way I want it to. I have attached the script. I want it to basically:
A) Kill the AtmEntryOrder after 1 bar if it does not fill - currently it does not
B) Kill any open AtmStrategies and positions after 3PM - currently it does not
C) When I specify to reverse positions, it does not.
Thanks for your help.
#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>
/// Enter the description of your strategy here
/// </summary>
[Description("Enter the description of your strategy here")]
public class StochScalpRANGE12 : Strategy
{
#region Variables
// Wizard generated variables
private string orderId = string.Empty;
private string atmStrategyId = string.Empty;
private int BarsPast_OE = 1;
private DataSeries barcount;
#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()
{
barcount = new DataSeries (this) ;
}
private void GoLong()
{
if (orderId != null)
{
string[] entryOrder = GetAtmStrategyEntryOrderStatus(orderId);
if (GetAtmStrategyMarketPosition(orderId) != MarketPosition.Flat)
return;
if (entryOrder.Length > 0)
{
if (entryOrder[2].ToString() != "Filled")
return;
}
}
orderId = GetAtmStrategyUniqueId();
atmStrategyId = GetAtmStrategyUniqueId();
AtmStrategyCreate(Cbi.OrderAction.Buy, OrderType.Limit, Low[0], 0, TimeInForce.Day, orderId, "CL-Ichi", atmStrategyId);
barcount.Set(CurrentBars[0]);
}
private void GoShort()
{
if (orderId != null)
{
string[] entryOrder = GetAtmStrategyEntryOrderStatus(orderId);
if (GetAtmStrategyMarketPosition(orderId) != MarketPosition.Flat)
return;
if (entryOrder.Length > 0)
{
if (entryOrder[2].ToString() != "Filled")
return;
}
}
orderId = GetAtmStrategyUniqueId();
atmStrategyId = GetAtmStrategyUniqueId();
AtmStrategyCreate(Cbi.OrderAction.SellShort, OrderType.Limit, High[0], 0, TimeInForce.Day, orderId, "CL-Ichi", atmStrategyId);
barcount.Set(CurrentBars[0]);
}
private void ExitLong()
{
// check to see if not flat, close all open orders
AtmStrategyClose(orderId);
}
private void ExitShort()
{
// check to see if not flat, close all open orders
AtmStrategyClose(orderId);
}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
if (ToTime(Time[0]) >= ToTime(15, 0, 0))
{
AtmStrategyClose(orderId);
}
// Cancels Limit order LONG
if ((CurrentBars[0] + BarsPast_OE) > barcount[0] && GetAtmStrategyMarketPosition(orderId) == MarketPosition.Long)
{
AtmStrategyCancelEntryOrder(orderId);
orderId = string.Empty;
Print("Cancelled LONG ENTRY Order from strategy");
}
// Cancels Limit order SHORT
if ((CurrentBars[0] + BarsPast_OE) > barcount[0] && GetAtmStrategyMarketPosition(orderId) == MarketPosition.Short)
{
AtmStrategyCancelEntryOrder(orderId);
orderId = string.Empty;
Print("Cancelled SHORT ENTRY Order from strategy");
}
if ((ToTime(Time[0]) > ToTime(5, 30, 0)) && (ToTime(Time[0]) < ToTime(15, 0, 0)))
{
// Condition set 1
if (CrossAbove(MACD(10, 22, 5), MACD(10, 22, 5).Avg, 1))
{
if (Position.MarketPosition == MarketPosition.Flat)
{
GoLong();
}
if (Position.MarketPosition == MarketPosition.Short)
{
ExitShort();
GoLong();
}
}
// Condition set 2
if (CrossBelow(MACD(10, 22, 5), MACD(10, 22, 5).Avg, 1))
{
if (Position.MarketPosition == MarketPosition.Flat)
{
GoShort();
}
if (Position.MarketPosition == MarketPosition.Long)
{
ExitLong();
GoShort();
}
}
}
}
#region Properties
#endregion
}
}

Comment