Announcement
Collapse
Looking for a User App or Add-On built by the NinjaTrader community?
Visit NinjaTrader EcoSystem and our free User App Share!
Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less
Partner 728x90
Collapse
NinjaTrader
Volume Coding Indicator
Collapse
X
-
Originally posted by ginx10k View PostOkay, this doesn't make sense, sometimes it works, other times I keep getting this error.
Free online storage and sharing with Screencast.com. 2 GB of storage and 2 GB of bandwidth per month for free. We won't compress, alter or take ownership of your content.
Here's the FULL Code.Code:#region Using declarations using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Xml.Serialization; using NinjaTrader.Cbi; using NinjaTrader.Data; using NinjaTrader.Gui.Chart; #endregion // This namespace holds all indicators and is required. Do not change it. namespace NinjaTrader.Indicator { /// <summary> /// Enter the description of your new custom indicator here /// </summary> [Description("Enter the description of your new custom indicator here")] public class CustomVolume : Indicator { #region Variables // Wizard generated variables private int myInput0 = 1; // Default setting for MyInput0 private string InstrumentName = " "; private string contract = " "; // User defined variables (add any user defined variables below) private bool useFutures = true; //Ask User if they want to use Futures Volume for FOREX #endregion /// <summary> /// This method is used to configure the indicator and is called once before any bar data is loaded. /// </summary> protected override void Initialize () { //Adding Volume per instruments InstrumentName = (Instrument.FullName.ToString()); if(InstrumentName == "$USDJPY") {contract = "6J 06-14";} Add (new Plot (new Pen (Color.Red, 3), PlotStyle.Line, "VolumePlot")); Add ( "6J 06-14", PeriodType.Minute, 5); Overlay = false; } protected override void OnBarUpdate () { if (CurrentBar < BarsRequired) return; if (Volumes [0] [0] > Volumes [1][0]) VolumePlot.Set(Volumes [1][0]); Print ("The current bar's volume price is greater"); } #region Properties [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public DataSeries VolumePlot { get { return Values [0]; } } [Description("")] [GridCategory("Parameters")] public int MyInput0 { get { return myInput0; } set { myInput0 = Math.Max(1, value); } } [Description("Use Futures Volume For FOREX")] [GridCategory("Parameters")] public bool UseFuturesVolume { get { return useFutures; } set { useFutures = value; } } #endregion } } #region NinjaScript generated code. Neither change nor remove. // This namespace holds all indicators and is required. Do not change it. namespace NinjaTrader.Indicator { public partial class Indicator : IndicatorBase { private CustomVolume[] cacheCustomVolume = null; private static CustomVolume checkCustomVolume = new CustomVolume(); /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { if (cacheCustomVolume != null) for (int idx = 0; idx < cacheCustomVolume.Length; idx++) if (cacheCustomVolume[idx].MyInput0 == myInput0 && cacheCustomVolume[idx].UseFuturesVolume == useFuturesVolume && cacheCustomVolume[idx].EqualsInput(input)) return cacheCustomVolume[idx]; lock (checkCustomVolume) { checkCustomVolume.MyInput0 = myInput0; myInput0 = checkCustomVolume.MyInput0; checkCustomVolume.UseFuturesVolume = useFuturesVolume; useFuturesVolume = checkCustomVolume.UseFuturesVolume; if (cacheCustomVolume != null) for (int idx = 0; idx < cacheCustomVolume.Length; idx++) if (cacheCustomVolume[idx].MyInput0 == myInput0 && cacheCustomVolume[idx].UseFuturesVolume == useFuturesVolume && cacheCustomVolume[idx].EqualsInput(input)) return cacheCustomVolume[idx]; CustomVolume indicator = new CustomVolume(); indicator.BarsRequired = BarsRequired; indicator.CalculateOnBarClose = CalculateOnBarClose; #if NT7 indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256; indicator.MaximumBarsLookBack = MaximumBarsLookBack; #endif indicator.Input = input; indicator.MyInput0 = myInput0; indicator.UseFuturesVolume = useFuturesVolume; Indicators.Add(indicator); indicator.SetUp(); CustomVolume[] tmp = new CustomVolume[cacheCustomVolume == null ? 1 : cacheCustomVolume.Length + 1]; if (cacheCustomVolume != null) cacheCustomVolume.CopyTo(tmp, 0); tmp[tmp.Length - 1] = indicator; cacheCustomVolume = tmp; return indicator; } } } } // This namespace holds all market analyzer column definitions and is required. Do not change it. namespace NinjaTrader.MarketAnalyzer { public partial class Column : ColumnBase { /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> [Gui.Design.WizardCondition("Indicator")] public Indicator.CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public Indicator.CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(input, myInput0, useFuturesVolume); } } } // This namespace holds all strategies and is required. Do not change it. namespace NinjaTrader.Strategy { public partial class Strategy : StrategyBase { /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> [Gui.Design.WizardCondition("Indicator")] public Indicator.CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public Indicator.CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { if (InInitialize && input == null) throw new ArgumentException("You only can access an indicator with the default input/bar series from within the 'Initialize()' method"); return _indicator.CustomVolume(input, myInput0, useFuturesVolume); } } } #endregion
Can someone please help fix this error.
You will have to make some kind of arrangement to make sure that you are referencing existing contracts. One way might be to reverse your logic, and run on the 6J contract, calling $USDJPY, as the latter is an invariant string. Other ways would be more complex, as you would have to determine the date, so that you can use the correct contract.
Leave a comment:
-
Reoccurring error
Okay, this doesn't make sense, sometimes it works, other times I keep getting this error.
Free online storage and sharing with Screencast.com. 2 GB of storage and 2 GB of bandwidth per month for free. We won't compress, alter or take ownership of your content.
Here's the FULL Code.Code:#region Using declarations using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Xml.Serialization; using NinjaTrader.Cbi; using NinjaTrader.Data; using NinjaTrader.Gui.Chart; #endregion // This namespace holds all indicators and is required. Do not change it. namespace NinjaTrader.Indicator { /// <summary> /// Enter the description of your new custom indicator here /// </summary> [Description("Enter the description of your new custom indicator here")] public class CustomVolume : Indicator { #region Variables // Wizard generated variables private int myInput0 = 1; // Default setting for MyInput0 private string InstrumentName = " "; private string contract = " "; // User defined variables (add any user defined variables below) private bool useFutures = true; //Ask User if they want to use Futures Volume for FOREX #endregion /// <summary> /// This method is used to configure the indicator and is called once before any bar data is loaded. /// </summary> protected override void Initialize () { //Adding Volume per instruments InstrumentName = (Instrument.FullName.ToString()); if(InstrumentName == "$USDJPY") {contract = "6J 06-14";} Add (new Plot (new Pen (Color.Red, 3), PlotStyle.Line, "VolumePlot")); Add ( "6J 06-14", PeriodType.Minute, 5); Overlay = false; } protected override void OnBarUpdate () { if (CurrentBar < BarsRequired) return; if (Volumes [0] [0] > Volumes [1][0]) VolumePlot.Set(Volumes [1][0]); Print ("The current bar's volume price is greater"); } #region Properties [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public DataSeries VolumePlot { get { return Values [0]; } } [Description("")] [GridCategory("Parameters")] public int MyInput0 { get { return myInput0; } set { myInput0 = Math.Max(1, value); } } [Description("Use Futures Volume For FOREX")] [GridCategory("Parameters")] public bool UseFuturesVolume { get { return useFutures; } set { useFutures = value; } } #endregion } } #region NinjaScript generated code. Neither change nor remove. // This namespace holds all indicators and is required. Do not change it. namespace NinjaTrader.Indicator { public partial class Indicator : IndicatorBase { private CustomVolume[] cacheCustomVolume = null; private static CustomVolume checkCustomVolume = new CustomVolume(); /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { if (cacheCustomVolume != null) for (int idx = 0; idx < cacheCustomVolume.Length; idx++) if (cacheCustomVolume[idx].MyInput0 == myInput0 && cacheCustomVolume[idx].UseFuturesVolume == useFuturesVolume && cacheCustomVolume[idx].EqualsInput(input)) return cacheCustomVolume[idx]; lock (checkCustomVolume) { checkCustomVolume.MyInput0 = myInput0; myInput0 = checkCustomVolume.MyInput0; checkCustomVolume.UseFuturesVolume = useFuturesVolume; useFuturesVolume = checkCustomVolume.UseFuturesVolume; if (cacheCustomVolume != null) for (int idx = 0; idx < cacheCustomVolume.Length; idx++) if (cacheCustomVolume[idx].MyInput0 == myInput0 && cacheCustomVolume[idx].UseFuturesVolume == useFuturesVolume && cacheCustomVolume[idx].EqualsInput(input)) return cacheCustomVolume[idx]; CustomVolume indicator = new CustomVolume(); indicator.BarsRequired = BarsRequired; indicator.CalculateOnBarClose = CalculateOnBarClose; #if NT7 indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256; indicator.MaximumBarsLookBack = MaximumBarsLookBack; #endif indicator.Input = input; indicator.MyInput0 = myInput0; indicator.UseFuturesVolume = useFuturesVolume; Indicators.Add(indicator); indicator.SetUp(); CustomVolume[] tmp = new CustomVolume[cacheCustomVolume == null ? 1 : cacheCustomVolume.Length + 1]; if (cacheCustomVolume != null) cacheCustomVolume.CopyTo(tmp, 0); tmp[tmp.Length - 1] = indicator; cacheCustomVolume = tmp; return indicator; } } } } // This namespace holds all market analyzer column definitions and is required. Do not change it. namespace NinjaTrader.MarketAnalyzer { public partial class Column : ColumnBase { /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> [Gui.Design.WizardCondition("Indicator")] public Indicator.CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public Indicator.CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(input, myInput0, useFuturesVolume); } } } // This namespace holds all strategies and is required. Do not change it. namespace NinjaTrader.Strategy { public partial class Strategy : StrategyBase { /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> [Gui.Design.WizardCondition("Indicator")] public Indicator.CustomVolume CustomVolume(int myInput0, bool useFuturesVolume) { return _indicator.CustomVolume(Input, myInput0, useFuturesVolume); } /// <summary> /// Enter the description of your new custom indicator here /// </summary> /// <returns></returns> public Indicator.CustomVolume CustomVolume(Data.IDataSeries input, int myInput0, bool useFuturesVolume) { if (InInitialize && input == null) throw new ArgumentException("You only can access an indicator with the default input/bar series from within the 'Initialize()' method"); return _indicator.CustomVolume(input, myInput0, useFuturesVolume); } } } #endregion
Can someone please help fix this error.
Leave a comment:
-
Nevermind Got iT!
Nevermind that last post. I got it.
Code:myVariable = (Instrument.FullName.ToString());
Leave a comment:
-
Adding Instrument Type
Ok another question. How do I get the indicator to determine what Instrument it's on, so that I can use that Value and place it in a Variable or Conditional Statement.
For instance.
if InstrumentType. == USD/JPY {DO something}
something like that?
what's the actual code to do this??Last edited by ginx10k; 05-19-2014, 04:07 PM.
Leave a comment:
-
Hello ginx10k,
Try commenting out the following line
Code:if (Volumes [0] [0] < Volumes [1] [0])
I commented that line out and everything popped back up when using the code in your image.
Please let me know if I may be of additional assistance.
Leave a comment:
-
Small ERROR
Hey Jesse, yea the BarsRequired solved the Plotting issue. Indicators works great on One Dataseries.
But When I tried to add 6J to the chart, without changing anything else, the Indicator Won't Load. I'm thinking it's cause adding the new Dataseries changes the Index[] value. So what change do I have to do on the Code so that the Indicator can display when more than One dataseries are present.
Free online storage and sharing with Screencast.com. 2 GB of storage and 2 GB of bandwidth per month for free. We won't compress, alter or take ownership of your content.
i.e. I tried Volumes[2][0] but that didn't work. and I have NO way of finding the Actual Index value of anything?
Leave a comment:
-
Hello ginx10k,
Please excuse my prior post and thank you koganam for clearing that up. Here is a sample of a working Volume indicator based of the index of the added series.
The reason you are getting the error is it is checking before there are bars to check. I added the code below to resolve this.
Code:if(CurrentBar < BarsRequired) return;
Code:protected override void Initialize () { Add (new Plot (new Pen (Color.Red, 3), PlotStyle.Line, "VolumePlot")); Add ("6J 06-14", PeriodType.Minute, 5); Overlay = false; } protected override void OnBarUpdate () { if (CurrentBar < BarsRequired) return; if (Volumes [0] [0] > Volumes [1] [0]) VolumePlot.Set (Volumes [1] [0]); Print ("The current bar's volume price is greater"); } #region Properties [Browsable (false)] [XmlIgnore ()] public DataSeries VolumePlot { get { return Values [0]; } } #endregion } }
Last edited by NinjaTrader_Jesse; 05-19-2014, 03:23 PM.
Leave a comment:
-
Ok I think the error was that I didn't Use the " " marks. So I changed the codeCode:protected override void Initialize() { Add("6J 6-14", PeriodType.Minute, 5); } /// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { //Compare Volume of current bar to 5 minute if (Volumes[0][0] < Volumes[1][0]) Print("The current bar's volume price is Smaller"); };
P.S. I'm testing on Market replay with all Data available, so Data isn't the problem. just trying to figure out what I'm missing NOW. why won't it compare the Volumes or show anything. Thank you!!Last edited by ginx10k; 05-19-2014, 03:14 PM.
Leave a comment:
-
Not working!!
Ok so I can't Add the VOL() to the indicator. But when I ADD to indicator this is what I get. http://screencast.com/t/S6ePz4MZZ
Code:/// <summary> /// This method is used to configure the indicator and is called once before any bar data is loaded. /// </summary> protected override void Initialize() { Add(6J 06-14, PeriodType.Minute, 5); Overlay = false; } /// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { //Compare Volume of current bar to 5 minute if (Volumes[0][0] > Volumes[1][0]) Print("The current bar's volume price is greater"); }
Last edited by ginx10k; 05-19-2014, 03:17 PM.
Leave a comment:
-
Originally posted by ginx10k View PostNow we're talking. so for instrument, I can add 6J?? or is there other syntax. 2nd. This example is for Strategies. I know the Add() doesn't work on Indicator code.
How would I go about adding this to an indicator? Basically what would the Code look like.
Or do I need to use the VOL() call function.
Still trying to figure all this coding stuff out. reading the Help guides does help, but sometimes its more confusing.
For futures, you must add the full contract designation: not just "6J", but "6J 05-14".
Then you refer to its volume with Volumes[1][0].
Leave a comment:
-
Now we're talking. so for instrument, I can add 6J?? or is there other syntax. 2nd. This example is for Strategies. I know the Add() doesn't work on Indicator code.
How would I go about adding this to an indicator? Basically what would the Code look like.
Or do I need to use the VOL() call function. If I do need the VOL(), how would I add the Dataseries for other instruments??
Still trying to figure all this coding stuff out. reading the Help guides does help, but sometimes its more confusing.
I triedCode:protected override void Initialize() { Add(6J, PeriodType.Minute, 5); }
Last edited by ginx10k; 05-19-2014, 02:53 PM.
Leave a comment:
-
Originally posted by ginx10k View PostI think you misunderstood my question so I'll repost. First I wanna say thanks for taking the time to answer me and for the video. But I already know how to add Other Data series and indicators to charts.
The Question is For "INDICATOR DEVELOPMENT ONLY"
HOW Do I add the Volume from another Dataseries to my current Indicator Code?
i.e. IF (VOLUME from 6J )....I don't know the syntax or the coding method. it's just an example.
Add the instrument to the indicator and query the Volumes array.
ref: http://www.ninjatrader.com/support/h...t7/volumes.htm
Leave a comment:
-
Not for Charting for Indicator Development!
I think you misunderstood my question so I'll repost. First I wanna say thanks for taking the time to answer me and for the video. But I already know how to add Other Data series and indicators to charts.
The Question is For "INDICATOR DEVELOPMENT ONLY"
HOW Do I add the Volume from another Dataseries to my current Indicator Code?
i.e. IF (VOLUME from 6J )....I don't know the syntax or the coding method. it's just an example.
Leave a comment:
Latest Posts
Collapse
Topics | Statistics | Last Post | ||
---|---|---|---|---|
Started by RookieTrader, Today, 09:37 AM
|
3 responses
13 views
0 likes
|
Last Post Today, 10:32 AM | ||
Started by kulwinder73, Today, 10:31 AM
|
0 responses
2 views
0 likes
|
Last Post
by kulwinder73
Today, 10:31 AM
|
||
Started by terofs, Yesterday, 04:18 PM
|
1 response
22 views
0 likes
|
Last Post
by terofs
Today, 10:14 AM
|
||
Started by CommonWhale, Today, 09:55 AM
|
1 response
3 views
0 likes
|
Last Post Today, 10:11 AM | ||
Started by Gerik, Today, 09:40 AM
|
2 responses
7 views
0 likes
|
Last Post
by Gerik
Today, 10:04 AM
|
Leave a comment: