Strategy not creating ATM order

Hi,

I created a strategy based on SampleAtmStrategy and SampleMACrossOver templates, but once the condition it´s met, the strategy disable itself and does not create an order.

I am quite new with code, I have some basic knowlege, but I can´t figure it out myself.

#region Using declarations
using NinjaTrader.Cbi;
using NinjaTrader.NinjaScript.Indicators;
#endregion

//This namespace holds Strategies in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Strategies
{
public class TESTOrder : Strategy
{

	private string  atmStrategyId			= string.Empty;
	private string  orderId					= string.Empty;
	private bool	isAtmStrategyCreated;
	
	private TEST TEST1;

	protected override void OnStateChange()
	{
		
		if (State == State.SetDefaults)
		{
			//Description	= Custom.Resource.NinjaScriptStrategyDescriptionSampleATMStrategy;
			//Name		= Custom.Resource.NinjaScriptStrategyNameSampleATMStrategy;
			// This strategy has been designed to take advantage of performance gains in Strategy Analyzer optimizations
			// See the Help Guide for additional information
			IsInstantiatedOnEachOptimizationIteration = false;
			
		}
		/*else if (State == State.Configure)
		{
		}*/
		else if (State == State.DataLoaded)
		{			
			AddChartIndicator(TEST(Close, 1, 1));
		}
	}

	protected override void OnBarUpdate()
	{
		if (CurrentBar < BarsRequiredToTrade)
			return;

		// HELP DOCUMENTATION REFERENCE: Please see the Help Guide section "Using ATM Strategies" under NinjaScript--> Educational Resources--> http://ninjatrader.com/support/helpGuides/nt8/en-us/using_atm_strategies.htm

		// Make sure this strategy does not execute against historical data
		if(State == State.Historical)
			return;

		// Submits an entry market order at the current price to initiate an ATM Strategy if both order id and strategy id are in a reset state
		// **** YOU MUST HAVE AN ATM STRATEGY TEMPLATE NAMED 'AtmStrategyTemplate' or your custom strategy name CREATED IN NINJATRADER (SUPERDOM FOR EXAMPLE) FOR THIS TO WORK ****
		if (orderId.Length == 0 && atmStrategyId.Length == 0 /*&& Close[0] > Open[0]*/)
		{
			isAtmStrategyCreated = false;  // reset atm strategy created check to false
			atmStrategyId = GetAtmStrategyUniqueId();
			orderId = GetAtmStrategyUniqueId();
			if(CrossAbove(TEST1.Default, TEST1.Value, 1))
			{
				AtmStrategyCreate(OrderAction.Buy, OrderType.Market, 0, 0, TimeInForce.Day, orderId, "TESTATM", atmStrategyId, (atmCallbackErrorCode, atmCallBackId) =>
					{
					//check that the atm strategy create did not result in error, and that the requested atm strategy matches the id in callback
					if (atmCallbackErrorCode == ErrorCode.NoError && atmCallBackId == atmStrategyId)
						isAtmStrategyCreated = true;
					});
			}
			if(CrossBelow(TEST1.Default, TEST1.Value, 1))
			{
				AtmStrategyCreate(OrderAction.Sell, OrderType.Market, 0, 0, TimeInForce.Day, orderId, "TESTATM", atmStrategyId, (atmCallbackErrorCode, atmCallBackId) =>
					{
					//check that the atm strategy create did not result in error, and that the requested atm strategy matches the id in callback
					if (atmCallbackErrorCode == ErrorCode.NoError && atmCallBackId == atmStrategyId)
						isAtmStrategyCreated = true;
					});
			}
		}

		// Check that atm strategy was created before checking other properties
		if (!isAtmStrategyCreated)
			return;

		// Check for a pending entry order
		if (orderId.Length > 0)
		{
			string[] status = GetAtmStrategyEntryOrderStatus(orderId);

			// 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)
			{
				// Print out some information about the order to the output window
				Print($"The entry order average fill price is: {status[0]}");
				Print($"The entry order filled amount is: {status[1]}");
				Print($"The entry order order state is: {status[2]}");

				// If the order state is terminal, reset the order id value
				if (status[2] == "Filled" || status[2] == "Cancelled" || status[2] == "Rejected")
					orderId = string.Empty;
			}
		} // If the strategy has terminated reset the strategy id
		else if (atmStrategyId.Length > 0 && GetAtmStrategyMarketPosition(atmStrategyId) == MarketPosition.Flat)
			atmStrategyId = string.Empty;

		if (atmStrategyId.Length > 0)
		{
			// You can change the stop price
			if (GetAtmStrategyMarketPosition(atmStrategyId) != MarketPosition.Flat)
				AtmStrategyChangeStopTarget(0, Low[0] - 3 * TickSize, "STOP1", atmStrategyId);

			// Print some information about the strategy to the output window, please note you access the ATM strategy specific position object here
			// the ATM would run self contained and would not have an impact on your NinjaScript strategy position and PnL
			Print($"The current ATM Strategy market position is: {GetAtmStrategyMarketPosition(atmStrategyId)}");
			Print($"The current ATM Strategy position quantity is: {GetAtmStrategyPositionQuantity(atmStrategyId)}");
			Print($"The current ATM Strategy average price is: {GetAtmStrategyPositionAveragePrice(atmStrategyId)}");
			Print($"The current ATM Strategy Unrealized PnL is: {GetAtmStrategyUnrealizedProfitLoss(atmStrategyId)}");
		}
	}
}

}