_TradesCountTest_DaysandHoursFilter Ninjatrader

https://forum.ninjatrader.com/forum/ninjatrader-8/add-on-development/1167848-trade-counter?p=1317512#post1317512
 avatar
unknown
csharp
a year ago
5.3 kB
17
No Index
// https://forum.ninjatrader.com/forum/ninjatrader-8/add-on-development/1167848-trade-counter?p=1317512#post1317512
// 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 _TradesCountTest_DaysandHoursFilter : Strategy
	{
		private SMA smaFast;
		private SMA smaSlow;

		private int DailyTrades;
		private int SessionStartTradeCount;
		
		protected override void OnStateChange()
		{
			if (State == State.SetDefaults)
			{
				Description	= NinjaTrader.Custom.Resource.NinjaScriptStrategyDescriptionSampleMACrossOver;
				Name		= "_TradesCountTest_DaysandHoursFilter";
				Fast		= 10;
				Slow		= 25;
				// 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	=	(	 
											// Format example
											/// ( ToTime(Time[0]) >= 00000 && ToTime(Time[0]) < 240000 ) 
											/// || ( ToTime(Time[0]) >= 140000 && ToTime(Time[0]) < 154500 )
											( 
												ToTime(Time[0])		>=	ToTime(HourFrom) 
												&& ToTime(Time[0])	<  ToTime(HourTo) 
											)
										);
			
			if(Bars.IsFirstBarOfSession)
			{
				//reset daily trades counter
				DailyTrades = 0;
				
				//currentTrades holds the value of AllTrades.Count at the time of session start
				SessionStartTradeCount = SystemPerformance.AllTrades.TradesCount;
				
				Print(" ");
				Print(Times[0][0] + " Reset on start of new session. DailyTradesCounter: " + DailyTrades);
				Print(Times[0][0] + " Reset on start of new session. SessionStartTradeCount: " + SessionStartTradeCount);
			}
			
			//calculate DailyTrades value
			Print(" ");
			Print(Times[0][0] + " SystemPerformance.AllTrades.TradesCount: " + SystemPerformance.AllTrades.TradesCount);
			Print(Times[0][0] + " SessionStartTradeCount: " + SessionStartTradeCount);
			DailyTrades = SystemPerformance.AllTrades.TradesCount - SessionStartTradeCount;
			Print(Times[0][0] + " Current TradesCounter value: " + DailyTrades);
			
			
			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