Created
January 17, 2026 11:54
-
-
Save igotit-anything/8e90888a7a180f935d43496aafeb731b to your computer and use it in GitHub Desktop.
Ninjascript AddOns Instrument Subscribe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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; | |
| } | |
| } | |
| } | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://igotit.tistory.com/6411