Hi Guys,
Does anybody know why this ATM strategy is outputting these types of errors?
**NT** GetAtmStrategyMarketPosition() method error: Missing atmStrategyId parameter
**NT** AtmStrategyCancelEntryOrder() method error: Missing orderId parameter
#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.Strategy;
#endregion
// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
/// <summary>
///
/// </summary>
[Description("")]
public class ATMTEST1: Strategy
{
#region Variables
private string atmStrategyIdLong = string.Empty;
private string orderIdLong = string.Empty;
private string atmStrategyIdShort = string.Empty;
private string orderIdShort = string.Empty;
private string atmStrategyName = "atmtest";
private int slipTicks = 1;
private int barNumberOfOrderLong = 0; //***
private int barNumberOfOrderShort = 0; //***
#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()
{
MaximumBarsLookBack = MaximumBarsLookBack.Infinite;
CalculateOnBarClose = true;
BarsRequired = 10;
}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
if (Historical)
return;
// Condition set LONG
if (
GetAtmStrategyMarketPosition(
atmStrategyIdLong) == MarketPosition.
Flat
&& GetAtmStrategyMarketPosition(
atmStrategyIdShort) == MarketPosition.Flat
&& Low[0] < Low[1]
)
{
atmStrategyIdLong = GetAtmStrategyUniqueId();
orderIdLong = GetAtmStrategyUniqueId();
AtmStrategyCreate(Cbi.OrderAction.Buy, OrderType.Limit, (Close[0] + SlipTicks * TickSize), 0, TimeInForce.Day, orderIdLong, AtmStrategyName, atmStrategyIdLong);
DrawText("Long1"+CurrentBar, "LL " + (Close[0] + SlipTicks * TickSize).ToString(), 0, Low[0] - 8*TickSize, Color.Cyan);
DrawArrowUp(CurrentBar.ToString(),0,Low[0] - 1*TickSize, Color.Cyan);
barNumberOfOrderLong = CurrentBar; //***
}
// Condition set SELL
if (
GetAtmStrategyMarketPosition(atmStrategyIdLong) == MarketPosition.Flat
&& GetAtmStrategyMarketPosition(atmStrategyIdShort) == MarketPosition.Flat
&& High[0] > High[1]
)
{
atmStrategyIdShort = GetAtmStrategyUniqueId();
orderIdShort = GetAtmStrategyUniqueId();
AtmStrategyCreate(Cbi.OrderAction.Sell, OrderType.Limit, (Close[0] - SlipTicks * TickSize), 0, TimeInForce.Day, orderIdShort, AtmStrategyName, atmStrategyIdShort);
DrawText("Short1"+CurrentBar,"SL " + (Close[0] - SlipTicks * TickSize).ToString(), 0, High[0] + 8*TickSize, Color.Cyan);
DrawArrowDown(CurrentBar.ToString(),0,High[0] + 1*TickSize, Color.Cyan);
barNumberOfOrderShort = CurrentBar; //***
}
//Cancels
Limit order LONG************************************
if (CurrentBar > barNumberOfOrderLong && GetAtmStrategyMarketPosition(atmStrategyIdLong) == MarketPosition.Long)
{
AtmStrategyCancelEntryOrder(orderIdLong);
orderIdLong = string.Empty;
Print("Cancelled LONG ENTRY Order from strategy");
}
//Cancels Long Limit if short strategy is short
if (GetAtmStrategyMarketPosition(atmStrategyIdShort) == MarketPosition.Short)
{
AtmStrategyCancelEntryOrder(orderIdLong);
orderIdLong = string.Empty;
Print("Cancelled LONG ENTRY Order from strategy");
}
//Cancels Limit order Short************************************
if (CurrentBar > barNumberOfOrderShort && GetAtmStrategyMarketPosition(atmStrategyIdShort) == MarketPosition.Short)
{
AtmStrategyCancelEntryOrder(orderIdShort);
orderIdShort = string.Empty;
Print("Cancelled SHORT ENTRY Order from strategy");
}
//Cancels Short Limit if strategy is long
if (GetAtmStrategyMarketPosition(atmStrategyIdLong) == MarketPosition.Long)
{
AtmStrategyCancelEntryOrder(orderIdShort);
orderIdShort = string.Empty;
Print("Cancelled SHORT ENTRY Order from strategy");
}
// Check for a pending entry order LONG
if (orderIdLong.Length > 0)
{
string[] status = GetAtmStrategyEntryOrderStatus(orderIdLong);
// If the status call can't find the order specified, the return array length will be zero otherwise it will hold elements
if (status.GetLength(0) > 0)
{
// If the order state is terminal, reset the order id value
if (status[2] == "Filled" || status[2] == "Cancelled" || status[2] == "Rejected")
orderIdLong = string.Empty;
}
}
else if (atmStrategyIdLong.Length > 0 && GetAtmStrategyMarketPosition(atmStrategyIdLong) == Cbi.MarketPosition.Flat)
atmStrategyIdLong = string.Empty;
// Check for a pending entry order Short
if (orderIdShort.Length > 0)
{
string[] status = GetAtmStrategyEntryOrderStatus(orderIdShort);
// If the status call can't find the order specified, the return array length will be zero otherwise it will hold elements
if (status.GetLength(0) > 0)
{
// If the order state is terminal, reset the order id value
if (status[2] == "Filled" || status[2] == "Cancelled" || status[2] == "Rejected")
orderIdShort = string.Empty;
}
}
else if (atmStrategyIdShort.Length > 0 && GetAtmStrategyMarketPosition(atmStrategyIdShort) == Cbi.MarketPosition.Flat)
atmStrategyIdShort = string.Empty;
}
#region Properties
[Description("Slippage Ticks for Entry")]
[GridCategory("Parameters")]
public int SlipTicks
{
get { return slipTicks; }
set { slipTicks = Math.Max(1, value); }
}
[Description("Name for the ATM Strategy")]
[GridCategory("Parameters")]
public string AtmStrategyName
{
get { return atmStrategyName; }
set { atmStrategyName = value; }
}
#endregion
}
}