I'm not a programmer but I managed, with the help of AI get a strategy to compile without errors but when I try to ENABLE it it automatically DISABLES.
If anyone could help me out and fix this that would be AWESOME!

#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 MelodyBOT2 : Strategy
{
private MACDBBLINES MACDBBLINES1;
private WaveTrendV2 WaveTrendV21;
private double trailingStopTicks = 24;
private double profitTriggerTicks = 12;
private double highestProfitPrice;
private double stopPrice;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"";
Name = "MelodyBOT2";
Calculate = Calculate.OnBarClose;
EntriesPerDirection = 2;
EntryHandling = EntryHandling.AllEntries;
IsExitOnSessionCloseStrategy = true;
ExitOnSessionCloseSeconds = 30;
IsFillLimitOnTouch = true;
MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
OrderFillResolution = OrderFillResolution.Standard;
Slippage = 0;
StartBehavior = StartBehavior.WaitUntilFlat;
TimeInForce = TimeInForce.Gtc;
TraceOrders = false;
RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
StopTargetHandling = StopTargetHandling.ByStrategyPosition;
BarsRequiredToTrade = 40;
// Disable this property for performance gains in Strategy Analyzer optimizations
// See the Help Guide for additional information
IsInstantiatedOnEachOptimizationIteration = true;
Fast = 5;
Slow = 6;
Smooth = 5;
Channel = 3;
Average = 10;
LongSize = 1;
ShortSize = 1;
TP2 = 200;
TrailSize = 24;
TP1 = 200;
}
else if (State == State.Configure)
{
}
else if (State == State.DataLoaded)
{
MACDBBLINES1 = MACDBBLINES(Close, Convert.ToInt32(Fast), Convert.ToInt32(Slow), Convert.ToInt32(Smooth), Brushes.Lime, Brushes.Red, 1, 10, 50, Brushes.LightBlue, true, Brushes.Gold, Brushes.Gold);
WaveTrendV21 = WaveTrendV2(Close, Convert.ToInt32(Channel), Convert.ToInt32(Average));
SetProfitTarget(@"Entry1", CalculationMode.Ticks, 200);
SetTrailStop(@"Entry1", CalculationMode.Ticks, 24, false);
}
}
protected override void OnBarUpdate()
{
if (BarsInProgress != 0)
return;
if (CurrentBars[0] < 1)
return;
// Set 1
if (
// Condition group 1
((CrossAbove(MACDBBLINES1.Macd, 0, 1))
&& (CrossAbove(WaveTrendV21, 0, 1)))
// Condition group 2
|| ((MACDBBLINES1.Macd[0] > 0)
&& (CrossAbove(WaveTrendV21, 0, 1)))
// Condition group 3
|| ((WaveTrendV21[0] > 0)
&& (CrossAbove(MACDBBLINES1.Macd, 0, 1))))
{
Draw.Text(this, @"MrMelodyRenkoAutoTrader Text_1", @"Long", 0, 0);
Draw.ArrowUp(this, @"MrMelodyRenkoAutoTrader Arrow up_1", false, 0, 0, Brushes.Blue);
EnterLong(Convert.ToInt32(LongSize), @"Entry1");
}
// Set 2
if (
// Condition group 1
((CrossBelow(MACDBBLINES1.Macd, 0, 1))
&& (CrossBelow(WaveTrendV21, 0, 1)))
// Condition group 2
|| ((MACDBBLINES1.Macd[0] < 0)
&& (CrossBelow(WaveTrendV21, 0, 1)))
// Condition group 3
|| ((WaveTrendV21[0] < 0)
&& (CrossBelow(MACDBBLINES1.Macd, 0, 1))))
{
Draw.Text(this, @"MrMelodyRenkoAutoTrader Text_2", @"Short", 0, 0);
Draw.ArrowDown(this, @"MrMelodyRenkoAutoTrader Arrow down_1", false, 0, 0, Brushes.Blue);
EnterShort(Convert.ToInt32(ShortSize), @"Entry1");
}
// Custom trailing stop logic
if (Position.MarketPosition == MarketPosition.Long)
{
// Existing long logic
if (Highs[1][0] >= highestProfitPrice)
{
highestProfitPrice = Highs[1][0];
}
if (Close[0] - highestProfitPrice >= profitTriggerTicks * TickSize)
{
stopPrice = Close[0] - trailingStopTicks * TickSize;
SetStopLoss("LongTrailing", CalculationMode.Price, stopPrice, false);
}
}
else if (Position.MarketPosition == MarketPosition.Short)
{
// Existing short logic
if (Lows[1][0] <= highestProfitPrice)
{
highestProfitPrice = Lows[1][0];
}
if (highestProfitPrice - Close[0] >= profitTriggerTicks * TickSize)
{
stopPrice = Close[0] + trailingStopTicks * TickSize;
SetStopLoss("ShortTrailing", CalculationMode.Price, stopPrice, false);
}
}
}
#region Properties
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Fast", Order=1, GroupName="Parameters")]
public int Fast
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Slow", Order=2, GroupName="Parameters")]
public int Slow
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Smooth", Order=3, GroupName="Parameters")]
public int Smooth
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Channel", Order=4, GroupName="Parameters")]
public int Channel
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Average", Order=5, GroupName="Parameters")]
public int Average
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="LongSize", Order=6, GroupName="Parameters")]
public int LongSize
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="ShortSize", Order=7, GroupName="Parameters")]
public int ShortSize
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="TP2", Order=8, GroupName="Parameters")]
public int TP2
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="TrailSize", Order=9, GroupName="Parameters")]
public int TrailSize
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="TP1", Order=10, GroupName="Parameters")]
public int TP1
{ get; set; }
#endregion
}
}

Comment