Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Converting NT7 Ruler to NT8. Code error

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Converting NT7 Ruler to NT8. Code error

    Hello,
    I try to convert a useful ruler from NT7 to NT8. But I am getting an error. Seems something easy. Could somebody help? Thanks! Attached the CS code and the error in line 88.(MouseEventArgs , directive missing..)
    The code for reference:

    #region Using declarations
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Diagnostics.CodeAnalysis;
    using System.Windows;
    using System.Reflection;
    using System.Windows.Media;
    using System.Xml.Serialization;
    using NinjaTrader.Cbi;
    using NinjaTrader.Data;
    using NinjaTrader.Gui;
    using NinjaTrader.Gui.Chart;
    using NinjaTrader.Gui.Tools;
    using NinjaTrader.NinjaScript.DrawingTools;
    using NinjaTrader.NinjaScript.Indicators;
    #endregion

    namespace NinjaTrader.NinjaScript.Indicators {
    public class RulerV3 : Indicator
    {
    #region Variables
    bool MouseHandler = false;
    int xPix=0, yPix=0;
    int barNumber=0, barIndex=0, tkSpacing=5, rulerMax=200, fontSize=6;
    double entryPrice=0;
    double chartHigh=0, chartLow=0;
    private Brush scaleColor = Brushes.White;
    private Brush zeroMarkerColor = Brushes.Lime;

    private ChartHelper chartHelper; //add

    public struct CURSOR
    {
    public int x;
    public int y;
    public int barNumber;
    public int barIndex;
    public double barPrice;
    public double clickPrice;
    }
    public static CURSOR cursor;
    string user_click = "";
    string priceFormat= "";
    #endregion

    private void Initialize()
    {
    IsOverlay = true;
    Calculate = Calculate.OnBarClose;
    }

    protected override void OnStateChange()
    {
    switch (State)
    {
    case State.SetDefaults:
    Name = "RulerV3";
    Description = "Place trade ruler on chart for trade management. Click Middle mouse button to set ruler at cursor (or trade entry point), 2nd click on ruler erases it.";
    Initialize();
    break;

    case State.DataLoaded:
    OnStartUp();
    break;

    case State.Terminated:
    OnTermination();
    break;
    }
    }

    protected override void OnBarUpdate()
    {

    }

    private void myMouseEvents(object sender, MouseEventArgs e)
    {
    TriggerCustomEvent(new CustomEvent(mouse_key),e );
    }

    private void mouse_key(object state)
    {
    MouseEventArgs m = (MouseEventArgs) state;
    double d=0;

    xPix = m.X;
    yPix = m.Y;

    switch (m.Button)
    {
    case MouseButtons.Middle:
    user_click = "MIDDLE";
    if (!String.IsNullOrEmpty(UserControl.ModifierKeys.To String())) user_click = UserControl.ModifierKeys.ToString().ToUpper()+" "+user_click;

    barNumber = ((xPix - ChartControl.GetXByBarIndex(BarsArray[0],ChartControl.FirstBarPainted))/ChartControl.BarSpace) +ChartControl.FirstBarPainted;
    if (barNumber < ChartControl.FirstBarPainted) barNumber = ChartControl.FirstBarPainted;
    if (barNumber > Bars.Count-1) barNumber = Bars.Count-2;
    if ( xPix > ChartControl.GetXByBarIndex(BarsArray[0],barNumber) + (ChartControl.BarSpace/2) ) barNumber++;
    barIndex = CurrentBar - barNumber;
    if (barIndex < 0) barIndex = 0; if (barIndex >= CurrentBar) barIndex = CurrentBar-1;
    if (xPix > ChartControl.CanvasRight-ChartControl.BarMarginRight) barIndex = 0;

    cursor.clickPrice = chartHelper.ConvertYtoPrice(yPix); //add

    erase_trade_targets();
    if ( barNumber == cursor.barNumber )
    {
    user_click = ""; ChartControl.ChartPanel.Invalidate();
    cursor.barNumber = 0;
    cursor.barPrice = 0;
    break;
    }

    cursor.barNumber = barNumber;
    cursor.barIndex = barIndex;
    cursor.barPrice = entryPrice;

    erase_trade_targets();
    draw_trade_targets(barIndex, entryPrice);
    break;
    }
    }

    void draw_trade_targets (int barx, double entry)
    {
    if ( Bars.Count > barx+4 )
    {
    //Draw Lower Ruler
    for (int i=0; i<=rulerMax; i+=tkSpacing) Draw.Text(this,"Tp-"+i, false, i+"---", barx+4, cursor.clickPrice-(TickSize*i),
    0, scaleColor, new SimpleFont("Arial", fontSize), TextAlignment.Left, Brushes.Empty, Brushes.Empty, 0);
    //Draw Upper Ruler
    for (int i=0; i<=rulerMax; i+=tkSpacing) Draw.Text(this,"Tp+"+i, false, i+"---", barx+4, cursor.clickPrice+(TickSize*i),
    0, scaleColor, new SimpleFont("Arial", fontSize), TextAlignment.Left, Brushes.Empty, Brushes.Empty, 0);
    }
    //Draw Zero Markers
    Draw.Dot(this,"Vd", false, barx, cursor.clickPrice,zeroMarkerColor);
    Draw.Line(this,"Vd2", false, barx+1, cursor.clickPrice, barx-1, cursor.clickPrice, zeroMarkerColor, DashStyleHelper.Solid, 1);

    ChartControl.ChartPanel.Invalidate();
    }

    void erase_trade_targets()
    {
    int i=0, max=0;
    RemoveDrawObject("Vd");
    RemoveDrawObject("Vd2");
    for (i=0; i<=rulerMax; i+=tkSpacing)
    {
    RemoveDrawObject("Tp+"+i);
    RemoveDrawObject("Tp-"+i);
    }
    }

    private void OnStartUp()
    {
    chartHelper = new ChartHelper(ChartControl, Bars, TickSize); //add

    if (!MouseHandler)
    {
    MouseHandler = true;
    this.ChartControl.ChartPanel.MouseDown += new MouseEventHandler(myMouseEvents);
    }
    }

    private void OnTermination()
    {
    if ( MouseHandler && this.ChartControl != null )
    {
    this.ChartControl.ChartPanel.MouseDown -= myMouseEvents;
    }
    base.OnTermination();
    }

    protected override void OnRender
    (ChartControl chartControl, ChartScale chartScale)
    {
    chartHelper.Update (bounds, min, max); //add
    chartHigh = max;
    chartLow = min;
    }

    #region Properties
    [NinjaScriptProperty]
    [Display(Name = "1. Ruler Font Size", Description = "Ruler Font Size", GroupName = "Parameters", Order = 1)]
    public int FontSize
    {
    get { return fontSize; }
    set { fontSize = Math.Max(5,value); }
    }

    [NinjaScriptProperty]
    [Display(Name = "2. Ruler Color", Description = "Ruler Color", GroupName = "Parameters", Order = 1)]
    public Brush ScaleColor
    {
    get { return scaleColor; }
    set { scaleColor = value; }
    }
    [Browsable(false)] //added this and next 5 lines
    public string ScaleColorSerialize
    {
    get { return Serialize.BrushToString(scaleColor); }
    set { scaleColor = Serialize.StringToBrush(value); }
    }

    [NinjaScriptProperty]
    [Display(Name = "3. Zero Marker Color", Description = "Zero Marker Color", GroupName = "Parameters", Order = 1)]
    public Brush ZeroMakerColor
    {
    get { return zeroMarkerColor; }
    set { zeroMarkerColor = value; }
    }
    [Browsable(false)] //added this and next 5 lines
    public string ZeroMarkerColorSerialize
    {
    get { return Serialize.BrushToString(zeroMarkerColor); }
    set { zeroMarkerColor = Serialize.StringToBrush(value); }
    }

    [NinjaScriptProperty]
    [Display(Name = "4. Ruler Tick Spacing", Description = "Ruler Tick Spacing", GroupName = "Parameters", Order = 1)]
    public int TkSpacing
    {
    get { return tkSpacing; }
    set { tkSpacing = Math.Max(1,value); }
    }

    [NinjaScriptProperty]
    [Display(Name = "5. Ruler Max", Description = "Maximum Ruler Reading - ticks from Marker", GroupName = "Parameters", Order = 1)]
    public int RulerMax
    {
    get { return rulerMax; }
    set { rulerMax = Math.Max(10,value); }
    }
    #endregion
    }
    }
    Attached Files

    #2
    Hello bcomas,

    Thanks for the post.

    You need to subscribe to the mouse event when State == State.Historical.

    This forum post describes subscribing and unsubscribing from the PreviewMouseLeftButton event for the ChartControl Object.



    Code:
    protected override void OnStateChange()
    {
        if (State == State.Historical)
        {
            ChartControl.PreviewMouseLeftButtonDown += 
            chartControl_PreviewMouseLeftButtonDown;
        }
    
        else if (State == State.Terminated)
        {
           ChartControl.PreviewMouseLeftButtonDown -= 
            chartControl_PreviewMouseLeftButtonDown;
         }
    }
    
    private void chartControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
    	//do something when the mouse is Down
    }
    We also provide a supported way to get the mouse down point through chart trader:

    https://ninjatrader.com/support/help...edownpoint.htm - MouseDownPoint

    This method should work in most cases.

    Please let us know if you have any questions.
    Last edited by NinjaTrader_ChrisL; 04-11-2018, 10:15 AM.

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by Geovanny Suaza, 02-11-2026, 06:32 PM
    0 responses
    571 views
    0 likes
    Last Post Geovanny Suaza  
    Started by Geovanny Suaza, 02-11-2026, 05:51 PM
    0 responses
    330 views
    1 like
    Last Post Geovanny Suaza  
    Started by Mindset, 02-09-2026, 11:44 AM
    0 responses
    101 views
    0 likes
    Last Post Mindset
    by Mindset
     
    Started by Geovanny Suaza, 02-02-2026, 12:30 PM
    0 responses
    548 views
    1 like
    Last Post Geovanny Suaza  
    Started by RFrosty, 01-28-2026, 06:49 PM
    0 responses
    549 views
    1 like
    Last Post RFrosty
    by RFrosty
     
    Working...
    X