thanks ,any help is welcome
Summary of rules:
Price must be above the 200 SMA for a trade to be triggered.
The first red candle detected triggers a Buy Stop order 1 tick above the high of that candle.if not triggered buy next red candle
Ignore the other red candles after the first is traded
target 20ticks stop15
Close the position if the price closes below the 10 EMA.
code
region Using declarations
using System;
using NinjaTrader.Cbi;
using NinjaTrader.Gui.Tools;
using NinjaTrader.NinjaScript;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript.StrategyAnalyzerColumn;
using NinjaTrader.NinjaScript.Strategies;
#endregion
namespace NinjaTrader.NinjaScript.Strategies
{
public class BuyStopAboveFirstRedCandleCloseBelowEMA : Strategy
{
private bool firstRedCandleFound = false;
private double buyStopPrice; //
private SMA SMA1;
private EMA EMA1;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Stratégie qui place un ordre Buy Stop 1 tick au-dessus de la première bougie rouge si le prix est au-dessus de la SMA 200, et ferme le trade si le prix ferme sous l'EMA 10.";
Name = "BuyStopAboveFirstRedCandleCloseBelowEMA";
Calculate = Calculate.OnBarClose; // Calculer à la fermeture de chaque bougie
}
else if (State == State.DataLoaded)
{
SMA1 = SMA(Close,200);
EMA1 = EMA(Close, 10);
}
}
protected override void OnBarUpdate()
{
if (Position.MarketPosition == MarketPosition.Long)
&&(Close[0] < ema10[0])
{
ExitLong("CloseBelowEMA", "BuyStopFirstRedCandle");
}
if (firstRedCandleFound)
return;
if (Close[0] > sma200[0])
&& (Close[0] < Open[0])
{
firstRedCandleFound = true;
buyStopPrice = High[0] + TickSize;
EnterLongStopMarket(1, buyStopPrice, "BuyStopFirstRedCandle");
}
}
}
protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time)
{
if (order.OrderState == OrderState.Filled || order.OrderState == OrderState.Cancelled)
{
firstRedCandleFound = false;
}
}
}
}

Comment