_TradesCounter Ninjatrader
https://forum.ninjatrader.com/forum/ninjatrader-8/add-on-development/1167848-trade-counter?p=1317711#post1317711unknown
csharp
8 months ago
10 kB
5
No Index
// https://forum.ninjatrader.com/forum/ninjatrader-8/add-on-development/1167848-trade-counter?p=1317711#post1317711 // Copyright (C) 2024, 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 class _TradesCounter : Strategy { #region Class Variables private SMA smaFast; private SMA smaSlow; private int DailyTrades; private int SessionStartTradeCount; private int lossesCount, winsCount, bottomLineTrades; private int SessionStartLosingTradesCount, SessionStartWinningTradesCount; private double SessionStartNetProfitTrades; private double tradesProfits; NinjaTrader.Gui.Tools.SimpleFont tradesstats = new NinjaTrader.Gui.Tools.SimpleFont("Agency Fb", 16) { Size = 17, Bold = true }; #endregion protected override void OnStateChange() { if (State == State.SetDefaults) { Description = NinjaTrader.Custom.Resource.NinjaScriptStrategyDescriptionSampleMACrossOver; Name = "_TradesCounter"; Fast = 3; Slow = 8; // This strategy has been designed to take advantage of performance gains in Strategy Analyzer optimizations // See the Help Guide for additional information IsInstantiatedOnEachOptimizationIteration = false; #region 00. Day and Hours Time Filters DayFrom = DayOfWeek.Monday; DayTo = DayOfWeek.Friday; HourFrom = DateTime.Parse("09:00"); HourTo = DateTime.Parse("18:00"); #endregion } else if (State == State.DataLoaded) { smaFast = SMA(Fast); smaSlow = SMA(Slow); smaFast.Plots[0].Brush = Brushes.Goldenrod; smaSlow.Plots[0].Brush = Brushes.SeaGreen; AddChartIndicator(smaFast); AddChartIndicator(smaSlow); } } protected override void OnBarUpdate() { if (CurrentBar < BarsRequiredToTrade) return; bool dayTimeFilter = ( Time[0].DayOfWeek >= DayFrom && Time[0].DayOfWeek <= DayTo ); bool hoursTimeFilter = ( ( ToTime(Time[0]) >= ToTime(HourFrom) && ToTime(Time[0]) < ToTime(HourTo) ) ); lossesCount = SystemPerformance.AllTrades.LosingTrades.Count; winsCount = SystemPerformance.AllTrades.WinningTrades.Count; tradesProfits = SystemPerformance.AllTrades.TradesPerformance.NetProfit; bottomLineTrades = (-1 * lossesCount) + winsCount; Print(" "); Print("0. "); Print(Times[0][0] + " DailyTradesCounter: " + DailyTrades); Print(Times[0][0] + " lossesCount: " + lossesCount); Print(Times[0][0] + " winsCount: " + winsCount); Print(Times[0][0] + " tradesProfits: " + tradesProfits); Print(Times[0][0] + " bottomLineTrades: " + bottomLineTrades); Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount); Print(Times[0][0] + " SessionStartLosingTradesCount: " + SessionStartLosingTradesCount); Print(Times[0][0] + " SessionStartWinningTradesCount: " + SessionStartWinningTradesCount); Print(Times[0][0] + " SessionStartNetProfitTrades: " + SessionStartNetProfitTrades); if( ToTime(Time[0]) <= ToTime(HourFrom) || ToTime(Time[0]) >= ToTime(HourTo) ) { DailyTrades = 0; lossesCount = 0; winsCount = 0; tradesProfits = 0; bottomLineTrades = 0; SessionStartTradeCount = SystemPerformance.AllTrades.TradesCount; SessionStartLosingTradesCount = SystemPerformance.AllTrades.LosingTrades.Count; SessionStartWinningTradesCount = SystemPerformance.AllTrades.WinningTrades.Count; SessionStartNetProfitTrades = SystemPerformance.AllTrades.TradesPerformance.NetProfit; Print(" "); Print("1. "); Print(Times[0][0] + " DailyTradesCounter: " + DailyTrades); Print(Times[0][0] + " lossesCount: " + lossesCount); Print(Times[0][0] + " winsCount: " + winsCount); Print(Times[0][0] + " tradesProfits: " + tradesProfits); Print(Times[0][0] + " bottomLineTrades: " + bottomLineTrades); Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount); Print(Times[0][0] + " SessionStartLosingTradesCount: " + SessionStartLosingTradesCount); Print(Times[0][0] + " SessionStartWinningTradesCount: " + SessionStartWinningTradesCount); Print(Times[0][0] + " SessionStartNetProfitTrades: " + SessionStartNetProfitTrades); } //calculate DailyTrades value DailyTrades = SystemPerformance.AllTrades.TradesCount - SessionStartTradeCount; lossesCount = SystemPerformance.AllTrades.LosingTrades.Count - SessionStartLosingTradesCount; winsCount = SystemPerformance.AllTrades.WinningTrades.Count - SessionStartWinningTradesCount; tradesProfits = SystemPerformance.AllTrades.TradesPerformance.NetProfit - SessionStartNetProfitTrades; bottomLineTrades = (-1 * lossesCount) + winsCount; Print(" "); Print("2. "); Print(Times[0][0] + " DailyTradesCounter: " + DailyTrades); Print(Times[0][0] + " lossesCount: " + lossesCount); Print(Times[0][0] + " winsCount: " + winsCount); Print(Times[0][0] + " tradesProfits: " + tradesProfits); Print(Times[0][0] + " bottomLineTrades: " + bottomLineTrades); Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount); Print(Times[0][0] + " SessionStartLosingTradesCount: " + SessionStartLosingTradesCount); Print(Times[0][0] + " SessionStartWinningTradesCount: " + SessionStartWinningTradesCount); Print(Times[0][0] + " SessionStartNetProfitTrades: " + SessionStartNetProfitTrades); if ( SystemPerformance.AllTrades.LosingTrades.Count > 0 || SystemPerformance.AllTrades.WinningTrades.Count > 0 ) { Print(" "); Print("3. "); Print(Times[0][0] + " DailyTradesCounter: " + DailyTrades); Print(Times[0][0] + " lossesCount: " + lossesCount); Print(Times[0][0] + " winsCount: " + winsCount); Print(Times[0][0] + " tradesProfits: " + tradesProfits); Print(Times[0][0] + " bottomLineTrades: " + bottomLineTrades); Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount); Print(Times[0][0] + " SessionStartLosingTradesCount: " + SessionStartLosingTradesCount); Print(Times[0][0] + " SessionStartWinningTradesCount: " + SessionStartWinningTradesCount); Print(Times[0][0] + " SessionStartNetProfitTrades: " + SessionStartNetProfitTrades); Draw.TextFixed(this, "tradesstats", "\n"+"Up/Down Trades Count: "+bottomLineTrades.ToString()+"\n"+ "Total Profits: "+tradesProfits.ToString(), TextPosition.TopRight, Brushes.Magenta, tradesstats, Brushes.Transparent,Brushes.Black,100); Print(" "); Print("4. "); Print(Times[0][0] + " DailyTradesCounter: " + DailyTrades); Print(Times[0][0] + " lossesCount: " + lossesCount); Print(Times[0][0] + " winsCount: " + winsCount); Print(Times[0][0] + " tradesProfits: " + tradesProfits); Print(Times[0][0] + " bottomLineTrades: " + bottomLineTrades); Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount); Print(Times[0][0] + " SessionStartLosingTradesCount: " + SessionStartLosingTradesCount); Print(Times[0][0] + " SessionStartWinningTradesCount: " + SessionStartWinningTradesCount); Print(Times[0][0] + " SessionStartNetProfitTrades: " + SessionStartNetProfitTrades); } if ( dayTimeFilter && hoursTimeFilter ) { //logic to enter and exit trades, just so we can see our counter update if (CrossAbove(smaFast, smaSlow, 1)) EnterLong(); else if (CrossBelow(smaFast, smaSlow, 1)) EnterShort(); } } #region Properties [Range(1, int.MaxValue), NinjaScriptProperty] [Display(ResourceType = typeof(Custom.Resource), Name = "Fast", GroupName = "NinjaScriptStrategyParameters", Order = 0)] public int Fast { get; set; } [Range(1, int.MaxValue), NinjaScriptProperty] [Display(ResourceType = typeof(Custom.Resource), Name = "Slow", GroupName = "NinjaScriptStrategyParameters", Order = 1)] public int Slow { get; set; } #endregion #region Properties [Display(Name="Day of Week From:", Description="", Order=0, GroupName="00. Day and Hours \n Time Filters")] [RefreshProperties(RefreshProperties.All)] public DayOfWeek DayFrom { get; set; } [Display(Name="Day of Week To:", Description="", Order=1, GroupName="00. Day and Hours \n Time Filters")] [RefreshProperties(RefreshProperties.All)] public DayOfWeek DayTo { get; set; } [NinjaScriptProperty] [PropertyEditor("NinjaTrader.Gui.Tools.TimeEditorKey")] [Display(Name="Hour From:", Description="Start time", Order=2, GroupName="00. Day and Hours \n Time Filters")] public DateTime HourFrom { get; set; } [NinjaScriptProperty] [PropertyEditor("NinjaTrader.Gui.Tools.TimeEditorKey")] [Display(Name="Hour To:", Description="End time", Order=3, GroupName="00. Day and Hours \n Time Filters")] public DateTime HourTo { get; set; } #endregion } }
Editor is loading...
Leave a Comment