Grade filter B minimum, MinTradeGrade property, session reset fix
Some checks failed
Build and Test / build (push) Has been cancelled
Some checks failed
Build and Test / build (push) Has been cancelled
This commit is contained in:
@@ -96,6 +96,11 @@ namespace NinjaTrader.NinjaScript.Strategies
|
|||||||
[Display(Name = "Verbose Logging", GroupName = "Debug", Order = 1)]
|
[Display(Name = "Verbose Logging", GroupName = "Debug", Order = 1)]
|
||||||
public bool EnableVerboseLogging { get; set; }
|
public bool EnableVerboseLogging { get; set; }
|
||||||
|
|
||||||
|
[NinjaScriptProperty]
|
||||||
|
[Display(Name = "Min Trade Grade (0=F,1=D,2=C,3=B,4=A,5=A+)", GroupName = "Confluence", Order = 1)]
|
||||||
|
[Range(0, 6)]
|
||||||
|
public int MinTradeGrade { get; set; }
|
||||||
|
|
||||||
[NinjaScriptProperty]
|
[NinjaScriptProperty]
|
||||||
[Display(Name = "Enable File Logging", GroupName = "Diagnostics", Order = 10)]
|
[Display(Name = "Enable File Logging", GroupName = "Diagnostics", Order = 10)]
|
||||||
public bool EnableFileLogging { get; set; }
|
public bool EnableFileLogging { get; set; }
|
||||||
@@ -190,6 +195,7 @@ namespace NinjaTrader.NinjaScript.Strategies
|
|||||||
MaxContracts = 10;
|
MaxContracts = 10;
|
||||||
EnableKillSwitch = false;
|
EnableKillSwitch = false;
|
||||||
EnableVerboseLogging = false;
|
EnableVerboseLogging = false;
|
||||||
|
MinTradeGrade = 4;
|
||||||
EnableFileLogging = true;
|
EnableFileLogging = true;
|
||||||
LogDirectory = string.Empty;
|
LogDirectory = string.Empty;
|
||||||
EnableLongTrades = true;
|
EnableLongTrades = true;
|
||||||
@@ -941,6 +947,7 @@ namespace NinjaTrader.NinjaScript.Strategies
|
|||||||
lines.Add("--- Controls ---");
|
lines.Add("--- Controls ---");
|
||||||
lines.Add(string.Format("EnableKillSwitch : {0}", EnableKillSwitch));
|
lines.Add(string.Format("EnableKillSwitch : {0}", EnableKillSwitch));
|
||||||
lines.Add(string.Format("EnableVerboseLogging: {0}", EnableVerboseLogging));
|
lines.Add(string.Format("EnableVerboseLogging: {0}", EnableVerboseLogging));
|
||||||
|
lines.Add(string.Format("MinTradeGrade : {0}", MinTradeGrade));
|
||||||
lines.Add(string.Format("EnableFileLogging : {0}", EnableFileLogging));
|
lines.Add(string.Format("EnableFileLogging : {0}", EnableFileLogging));
|
||||||
lines.Add(string.Format("LogDirectory : {0}", string.IsNullOrEmpty(LogDirectory) ? "(default)" : LogDirectory));
|
lines.Add(string.Format("LogDirectory : {0}", string.IsNullOrEmpty(LogDirectory) ? "(default)" : LogDirectory));
|
||||||
lines.Add("--- Portfolio ---");
|
lines.Add("--- Portfolio ---");
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ namespace NinjaTrader.NinjaScript.Strategies
|
|||||||
_strategyConfig.Parameters["StopTicks"] = StopTicks;
|
_strategyConfig.Parameters["StopTicks"] = StopTicks;
|
||||||
_strategyConfig.Parameters["TargetTicks"] = TargetTicks;
|
_strategyConfig.Parameters["TargetTicks"] = TargetTicks;
|
||||||
_strategyConfig.Parameters["OpeningRangeMinutes"] = OpeningRangeMinutes;
|
_strategyConfig.Parameters["OpeningRangeMinutes"] = OpeningRangeMinutes;
|
||||||
|
_strategyConfig.Parameters["MinTradeGrade"] = MinTradeGrade;
|
||||||
|
|
||||||
if (Instrument != null && Instrument.MasterInstrument != null)
|
if (Instrument != null && Instrument.MasterInstrument != null)
|
||||||
{
|
{
|
||||||
@@ -150,14 +151,15 @@ namespace NinjaTrader.NinjaScript.Strategies
|
|||||||
lines.Insert(endIdx + 2, string.Format("StdDevMultiplier : {0:F2}", StdDevMultiplier));
|
lines.Insert(endIdx + 2, string.Format("StdDevMultiplier : {0:F2}", StdDevMultiplier));
|
||||||
lines.Insert(endIdx + 3, string.Format("StopTicks : {0}", StopTicks));
|
lines.Insert(endIdx + 3, string.Format("StopTicks : {0}", StopTicks));
|
||||||
lines.Insert(endIdx + 4, string.Format("TargetTicks : {0}", TargetTicks));
|
lines.Insert(endIdx + 4, string.Format("TargetTicks : {0}", TargetTicks));
|
||||||
|
lines.Insert(endIdx + 5, string.Format("MinTradeGrade : {0}", MinTradeGrade));
|
||||||
|
|
||||||
double tickDollarValue = 0.25 * 50.0;
|
double tickDollarValue = 0.25 * 50.0;
|
||||||
if (Instrument != null && Instrument.MasterInstrument != null)
|
if (Instrument != null && Instrument.MasterInstrument != null)
|
||||||
tickDollarValue = Instrument.MasterInstrument.TickSize * Instrument.MasterInstrument.PointValue;
|
tickDollarValue = Instrument.MasterInstrument.TickSize * Instrument.MasterInstrument.PointValue;
|
||||||
|
|
||||||
lines.Insert(endIdx + 5, string.Format("StopDollars : {0:C}", StopTicks * tickDollarValue));
|
lines.Insert(endIdx + 6, string.Format("StopDollars : {0:C}", StopTicks * tickDollarValue));
|
||||||
lines.Insert(endIdx + 6, string.Format("TargetDollars : {0:C}", TargetTicks * tickDollarValue));
|
lines.Insert(endIdx + 7, string.Format("TargetDollars : {0:C}", TargetTicks * tickDollarValue));
|
||||||
lines.Insert(endIdx + 7, string.Format("RR_Ratio : {0:F2}:1", (double)TargetTicks / StopTicks));
|
lines.Insert(endIdx + 8, string.Format("RR_Ratio : {0:F2}:1", (double)TargetTicks / StopTicks));
|
||||||
|
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,8 +109,8 @@ namespace NT8.Core.Intelligence
|
|||||||
|
|
||||||
private void InitializeDefaults()
|
private void InitializeDefaults()
|
||||||
{
|
{
|
||||||
_minimumGradeByMode.Add(RiskMode.ECP, TradeGrade.B);
|
_minimumGradeByMode.Add(RiskMode.ECP, TradeGrade.C);
|
||||||
_minimumGradeByMode.Add(RiskMode.PCP, TradeGrade.C);
|
_minimumGradeByMode.Add(RiskMode.PCP, TradeGrade.B);
|
||||||
_minimumGradeByMode.Add(RiskMode.DCP, TradeGrade.A);
|
_minimumGradeByMode.Add(RiskMode.DCP, TradeGrade.A);
|
||||||
_minimumGradeByMode.Add(RiskMode.HR, TradeGrade.APlus);
|
_minimumGradeByMode.Add(RiskMode.HR, TradeGrade.APlus);
|
||||||
|
|
||||||
|
|||||||
@@ -153,9 +153,13 @@ namespace NT8.Strategies.Examples
|
|||||||
UpdateRiskMode(context);
|
UpdateRiskMode(context);
|
||||||
UpdateConfluenceInputs(bar, context);
|
UpdateConfluenceInputs(bar, context);
|
||||||
|
|
||||||
if (_currentSessionDate != context.CurrentTime.Date)
|
DateTime thisSessionStart = context.Session != null
|
||||||
|
? context.Session.SessionStart
|
||||||
|
: context.CurrentTime.Date.AddHours(9.5);
|
||||||
|
|
||||||
|
if (thisSessionStart != _openingRangeStart || _currentSessionDate == DateTime.MinValue)
|
||||||
{
|
{
|
||||||
ResetSession(context.Session != null ? context.Session.SessionStart : context.CurrentTime.Date);
|
ResetSession(thisSessionStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only trade during RTH
|
// Only trade during RTH
|
||||||
@@ -211,15 +215,23 @@ namespace NT8.Strategies.Examples
|
|||||||
var score = _scorer.CalculateScore(candidate, context, bar, _factorCalculators);
|
var score = _scorer.CalculateScore(candidate, context, bar, _factorCalculators);
|
||||||
var mode = _riskModeManager.GetCurrentMode();
|
var mode = _riskModeManager.GetCurrentMode();
|
||||||
|
|
||||||
if (!_gradeFilter.ShouldAcceptTrade(score.Grade, mode))
|
int minGradeValue = 4;
|
||||||
|
if (_config != null && _config.Parameters != null && _config.Parameters.ContainsKey("MinTradeGrade"))
|
||||||
{
|
{
|
||||||
var reason = _gradeFilter.GetRejectionReason(score.Grade, mode);
|
var mgv = _config.Parameters["MinTradeGrade"];
|
||||||
|
if (mgv is int)
|
||||||
|
minGradeValue = (int)mgv;
|
||||||
|
}
|
||||||
|
|
||||||
|
TradeGrade minGrade = (TradeGrade)minGradeValue;
|
||||||
|
if ((int)score.Grade < (int)minGrade)
|
||||||
|
{
|
||||||
|
if (_logger != null)
|
||||||
_logger.LogInformation(
|
_logger.LogInformation(
|
||||||
"SimpleORBStrategy rejected intent for {0}: Grade={1}, Mode={2}, Reason={3}",
|
"SimpleORBStrategy filtered by grade: Score={0:F3} Grade={1} MinGrade={2}",
|
||||||
candidate.Symbol,
|
score.WeightedScore,
|
||||||
score.Grade,
|
score.Grade,
|
||||||
mode,
|
minGrade);
|
||||||
reason);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,6 +355,13 @@ namespace NT8.Strategies.Examples
|
|||||||
_openingRangeLow = Double.MaxValue;
|
_openingRangeLow = Double.MaxValue;
|
||||||
_openingRangeReady = false;
|
_openingRangeReady = false;
|
||||||
_tradeTaken = false;
|
_tradeTaken = false;
|
||||||
|
|
||||||
|
if (_logger != null)
|
||||||
|
_logger.LogInformation(
|
||||||
|
"Session reset: Date={0:yyyy-MM-dd} ORB window={1:HH:mm}-{2:HH:mm}",
|
||||||
|
_currentSessionDate,
|
||||||
|
_openingRangeStart,
|
||||||
|
_openingRangeEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateOpeningRange(BarData bar)
|
private void UpdateOpeningRange(BarData bar)
|
||||||
|
|||||||
@@ -149,9 +149,9 @@ namespace NT8.Core.Tests.Sizing
|
|||||||
|
|
||||||
var intent = CreateIntent();
|
var intent = CreateIntent();
|
||||||
var context = CreateContext();
|
var context = CreateContext();
|
||||||
var confluence = CreateScore(TradeGrade.C, 0.61);
|
var confluence = CreateScore(TradeGrade.B, 0.71);
|
||||||
var config = new SizingConfig(SizingMethod.FixedDollarRisk, 2, 10, 500.0, new Dictionary<string, object>());
|
var config = new SizingConfig(SizingMethod.FixedDollarRisk, 2, 10, 500.0, new Dictionary<string, object>());
|
||||||
var modeConfig = CreateModeConfig(RiskMode.PCP, 1.0, TradeGrade.C);
|
var modeConfig = CreateModeConfig(RiskMode.PCP, 1.0, TradeGrade.B);
|
||||||
|
|
||||||
var result = sizer.CalculateGradeBasedSize(
|
var result = sizer.CalculateGradeBasedSize(
|
||||||
intent,
|
intent,
|
||||||
|
|||||||
Reference in New Issue
Block a user