Skip to content

Instantly share code, notes, and snippets.

@igotit-anything
Created January 17, 2026 11:54
Show Gist options
  • Select an option

  • Save igotit-anything/8e90888a7a180f935d43496aafeb731b to your computer and use it in GitHub Desktop.

Select an option

Save igotit-anything/8e90888a7a180f935d43496aafeb731b to your computer and use it in GitHub Desktop.
Ninjascript AddOns Instrument Subscribe
#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;
using System.Windows.Controls;// 내가 추가함 for TextBlock
#endregion
//This namespace holds Add ons in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.AddOns
{
public class CyAddOnHelloNinja : NinjaTrader.NinjaScript.AddOnBase
{
private NTWindow window_myaddon; //
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"시험용 AddOn";
Name = "CyAddOnHelloNinja";
}
else if (State == State.Configure)
{
}
else if (State == State.Active)
{
Subscribe();
}
else if(State == State.Terminated)
{
Unsubscribe();
window_myaddon?.Close();
}
}
private Instrument instrument;
private void Subscribe()
{
instrument = Instrument.GetInstrument("BTCUSD");
if (instrument == null)
{
Print("BTCUSD instrument not found");
return;
}
instrument.MarketDataUpdate += OnMarketDataUpdate;
Print("BTCUSD MarketData subscribed");
}
private void OnMarketDataUpdate(object sender, MarketDataEventArgs e)
{
if (e.MarketDataType != MarketDataType.Last)
return;
Print(
$"BTC TICK | Price={e.Price} " +
$"Volume={e.Volume} " +
$"Time={e.Time:HH:mm:ss.fff}"
);
}
private void Unsubscribe()
{
if (instrument != null)
{
instrument.MarketDataUpdate -= OnMarketDataUpdate;
Print("BTCUSD MarketData unsubscribed");
}
}
private void CreateWindow()
{
window_myaddon = new NTWindow
{
Title = "Hello Ninja",
Width = 300,
Height = 150,
Content = new TextBlock
{
Text = "Hello NinjaTrader AddOn",
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
FontSize = 16
}
};
window_myaddon.Show();
}
protected override void OnWindowCreated(Window window)
{
if (window is ControlCenter controlCenter)
{
MenuItem menuItem = new MenuItem
{
Header = "CyAddOn Window"
};
menuItem.Click += MenuItem_Click;//이벤드핸들러 등록
controlCenter.MainMenu.Add(menuItem);
}
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
if(window_myaddon == null) // 윈도우 중복 생성 방지.
CreateWindow();
else window_myaddon.Activate();
}
protected override void OnWindowDestroyed(Window window)
{
if (window == window_myaddon)
{
window_myaddon = null;
}
}
}
}
@igotit-anything
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment