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
}
}

Comment