I want to have a custom Stop Calculator that I can use across all my strategies. So, in my Strategies I want to use have something like StopCalculator.MoneyValue to return a specific double value and stopCalculator.PercentValue to return another duble value.
I know there is a CalculationMode Object already built in NinjaScript but I want my custom Stop Calculator to add specific things to it.
Here is my SampleCustomClass:
#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.Gui.Tools;
#endregion
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class StopCalculator : Strategy
{
double myStopValue;
public double MoneyValue(double Stop)
{
return myStopValue = Stop / Bars.Instrument.MasterInstrument.PointValue;
}
public double PercentValue(double Stop)
{
return myStopValue = Stop * Bars.Instrument.MasterInstrument.PointValue * TickSize;
}
}
}
//
// Copyright (C) 2022, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//
#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.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 partial class SampleMACrossOverX : Strategy
{
private StopCalculator stopCalc;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = NinjaTrader.Custom.Resource.NinjaScriptStrategyDescriptionSampleMACrossOver;
Name = "SampleMACrossOverX";
// 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)
{
stopCalc = new StopCalculator();
}
}
protected override void OnBarUpdate()
{
if (CurrentBar < BarsRequiredToTrade)
return;
Print(String.Format("{0};{1};{2}", Time[0], stopCalc.MoneyValue(1000), stopCalc.PercentValue(0.01)));
}
}
}
What am I doing wrong?
Thanks in advance!

Comment