Hi
I've searched in many places but couldn't find a working Murrey Math indicator for Multicharts .Net.
I know there are a lot of free indicators for other platforms but converting them to Multicharts .Net is not that easy for me.
Do you know where can I find it ?
Thank you
Murrey Math Levels for MC .net [SOLVED]
- JoshM
- Posts: 2196
- Joined: May 20 2011
- Location: The Netherlands
- Has thanked: 1544 times
- Been thanked: 1565 times
- Contact:
I don't, sorry.Do you know where can I find it ?
Perhaps if this is a small indicator the community can convert it to MC .NET. Do you have a publicly available source code and interpretation/explanation for this indicator?
I've found a working code for NT see below and attached
and also another one that works for MQL4 (although I'm not sure it is correct).
and also another one that works for MQL4 (although I'm not sure it is correct).
Code: Select all
//
// Copyright (C) 2006, NT LLC <NT@NT.com>.
// NT reserves the right to modify or overwrite this NinjaScript component with each release.
//
#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
using NT.Data;
using NT.Gui.Chart;
#endregion
// This namespace holds all indicators and is required. Do not change it.
namespace NT.Indicator
{
/// <summary>
/// Original Pivot Points enhanced file by cvax.
/// Modified to Murrey Math Indicator by Prtester
/// Ported From
/// MT conversion created by CrazyChart
/// "mailto:newcomer2003@yandex.ru"
/// </summary>
[Description("Murrey Math Indicator")]
[Gui.Design.DisplayName("Murrey Math Indicator")]
public class MurreyMath : Indicator
{
#region Variables
private SolidBrush[] brushes = { new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black),
new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black),
new SolidBrush(Color.Black), new SolidBrush(Color.Black), new SolidBrush(Color.Black),};
private double currentClose = 0;
private DateTime currentDate = Cbi.Globals.MinDate;
private DateTime currentMonth = Cbi.Globals.MinDate;
private DateTime currentWeek = Cbi.Globals.MinDate;
private double currentHigh = double.MinValue;
private double currentLow = double.MaxValue;
private Data.PivotRange pivotRangeType = PivotRange.Daily;
private bool labels = true;
private double sum, v1, v2, fractal;
private double v45, mml00, mml0, mml1, mml2, mml3, mml4, mml5, mml6, mml7, mml8, mml9, mml98, mml99;
private double range, octave, mn, mx, price;
private double finalH, finalL;
private double x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6;
private int periodtotake = 200;
private StringFormat stringFormat = new StringFormat();
private int width = 370;
#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()
{
Add(new Plot(Color.Red, "-2/8"));
Add(new Plot(Color.Red, "-1/8"));
Add(new Plot(Color.Red, "0/8"));
Add(new Plot(Color.Red, "1/8"));
Add(new Plot(Color.Red, "2/8"));
Add(new Plot(Color.Red, "3/8"));
Add(new Plot(Color.Red, "4/8"));
Add(new Plot(Color.Red, "5/8"));
Add(new Plot(Color.Red, "6/8"));
Add(new Plot(Color.Red, "7/8"));
Add(new Plot(Color.Red, "8/8"));
Add(new Plot(Color.Red, "+1/8"));
Add(new Plot(Color.Red, "+2/8"));
Plots[0].Pen = new Pen(Color.Red, 2);
Plots[1].Pen = new Pen(Color.Red, 2);
Plots[2].Pen = new Pen(Color.Red, 2);
Plots[3].Pen = new Pen(Color.Red, 2);
Plots[4].Pen = new Pen(Color.Red, 2);
Plots[5].Pen = new Pen(Color.Red, 2);
Plots[6].Pen = new Pen(Color.Red, 2);
Plots[7].Pen = new Pen(Color.Red, 2);
Plots[8].Pen = new Pen(Color.Red, 2);
Plots[9].Pen = new Pen(Color.Red, 2);
Plots[10].Pen = new Pen(Color.Red, 2);
Plots[11].Pen = new Pen(Color.Red, 2);
Plots[12].Pen = new Pen(Color.Red, 2);
AutoScale = false;
CalculateOnBarClose = false;
Overlay = true;
stringFormat.Alignment = StringAlignment.Far;
}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
if (Bars == null)
return;
if (!Session.IsIntraday(Bars.Period.Id) && Bars.Period.Id != PeriodType.Day)
return;
if (Bars.Period.Id == PeriodType.Day && pivotRangeType == PivotRange.Daily)
return;
if (Bars.Period.Id == PeriodType.Day && Bars.Period.Value > 1)
return;
if ((currentDate != Cbi.Globals.MinDate && pivotRangeType == PivotRange.Daily && Time[0].Date != currentDate)
|| (currentWeek != Cbi.Globals.MinDate && pivotRangeType == PivotRange.Weekly && RoundUpTimeToPeriodTime(Time[0].Date, PivotRange.Weekly) != currentWeek)
|| (currentMonth != Cbi.Globals.MinDate && pivotRangeType == PivotRange.Monthly && RoundUpTimeToPeriodTime(Time[0].Date, PivotRange.Monthly) != currentMonth))
{
v1 = MIN(Low, periodtotake)[0];
v2 = MAX(High, periodtotake)[0];
//determine fractal.....
if(v2 <= 250000 && v2 > 25000)
{
fractal = 100000;
}
else
if(v2 <= 25000 && v2 > 2500)
{ fractal = 10000;}
else
if(v2 <= 2500 && v2 > 250)
{fractal = 1000;}
else
if(v2 <= 250 && v2 > 25)
{fractal = 100;}
else
if(v2 <= 25 && v2 > 12.5)
{fractal = 12.5;}
else
if(v2 <= 12.5 && v2 > 6.25)
{fractal = 12.5;}
else
if(v2 <= 6.25 && v2 > 3.125)
{fractal = 6.25; }
else
if(v2 <= 3.125 && v2 > 1.5625)
{fractal = 3.125;}
else
if(v2 <= 1.5625 && v2 > 0.390625)
{ fractal = 1.5625;}
else
if(v2 <= 0.390625 && v2 > 0)
{fractal = 0.1953125;}
range = (v2 - v1);
sum = Math.Floor(Math.Log(fractal / range) / Math.Log(2));
octave = fractal*(Math.Pow(0.5, sum));
mn = Math.Floor(v1 / octave)*octave;
//----
if((mn + octave) > v2)
{mx = mn + octave;}
else
{mx = mn + (2*octave);}
// calculating xx
//x2
if((v1 >= 3 / 16*(mx - mn) + mn) && (v2 <= 9 / 16*(mx - mn) + mn))
{x2 = mn + (mx - mn) / 2; }
else
{x2 = 0;}
//x1
if((v1 >= mn - (mx - mn) / 8) && (v2 <= 5 / 8*(mx - mn) + mn) && x2 == 0)
{x1 = mn + (mx - mn) / 2;}
else
{x1 = 0;}
//x4
if((v1 >= mn + 7*(mx - mn) / 16) && (v2 <= 13 / 16*(mx - mn) + mn))
{x4 = mn + 3*(mx - mn) / 4; }
else
{x4 = 0;}
//x5
if((v1 >= mn + 3*(mx - mn) / 8) && (v2 <= 9 / 8*(mx - mn) + mn) && x4 == 0)
{x5 = mx;}
else
{x5 = 0;}
//x3
if((v1 >= mn + (mx - mn) / 8)&& (v2 <= 7 / 8*(mx - mn) + mn) && x1 == 0 && x2 == 0 && x4 == 0 && x5 == 0)
{x3 = mn + 3*(mx - mn) / 4; }
else
{x3 = 0;}
//x6
if((x1 + x2 + x3 + x4 + x5) == 0)
{x6 = mx;}
else
{x6 = 0;}
finalH = x1 + x2 + x3 + x4 + x5 + x6;
// calculating yy
//y1
if(x1 > 0)
{y1 = mn;}
else
{y1 = 0;}
//y2
if(x2 > 0)
{y2 = mn + (mx - mn) / 4; }
else
{y2 = 0;}
//y3
if(x3 > 0)
{y3 = mn + (mx - mn) / 4;}
else
{y3 = 0;}
//y4
if(x4 > 0)
{y4 = mn + (mx - mn) / 2;}
else
{y4 = 0;}
//y5
if(x5 > 0)
{y5 = mn + (mx - mn) / 2;}
else
{y5 = 0;}
//y6
if((finalH > 0) && (y1 + y2 + y3 + y4 + y5 == 0))
{y6 = mn; }
else
{y6 = 0;}
finalL = y1 + y2 + y3 + y4 + y5 + y6;
v45 = (finalH - finalL) / 8;
mml00 = (finalL - v45*2); //-2/8
mml0 = (finalL - v45); //-1/8
mml1 = (finalL);// 0/8
mml2 = (finalL + v45);// 1/8
mml3 = (finalL + 2*v45); // 2/8
mml4 = (finalL + 3*v45); // 3/8
mml5 = (finalL + 4*v45); // 4/8
mml6 = (finalL + 5*v45); // 5/8
mml7 = (finalL + 6*v45); // 6/8
mml8 = (finalL + 7*v45);// 7/8
mml9 = (finalL + 8*v45);// 8/8
mml99 = (finalL + 9*v45);// +1/8
mml98 = (finalL + 10*v45);// +2/8
}
// else
// {
// currentClose = Close[0];
// currentHigh = Math.Max(currentHigh, High[0]);
// currentLow = Math.Min(currentLow, Low[0]);
// }
if (pivotRangeType == PivotRange.Daily)
currentDate = Time[0].Date;
if (pivotRangeType == PivotRange.Weekly)
currentWeek = RoundUpTimeToPeriodTime(Time[0].Date, PivotRange.Weekly);
if (pivotRangeType == PivotRange.Monthly)
currentMonth = RoundUpTimeToPeriodTime(Time[0].Date, PivotRange.Monthly);
if (finalL != 0)
{
N28.Set(mml00);
N18.Set(mml0);
N08.Set(mml1);
P18.Set(mml2);
P28.Set(mml3);
P38.Set(mml4);
P48.Set(mml5);
P58.Set(mml6);
P68.Set(mml7);
P78.Set( mml8 );
P88.Set(mml9);
PP18.Set(mml99);
PP28.Set(mml98);
}
}
#region Properties
/// <summary>
/// </summary>
[Description("Type of period for pivot points.")]
[Category("Parameters")]
public Data.PivotRange PivotRangeType
{
get { return pivotRangeType; }
set { pivotRangeType = value; }
}
/// <summary>
/// </summary>
[Description("Turn Pivot Labels On/Off.")]
[Category("Pivot Line Settings")]
public bool Labels
{
get { return labels; }
set { labels = value; }
}
/// <summary>
/// </summary>
[Description("# of bars back the Pivot Line will be drawn.")]
[Category("Pivot Line Settings")]
public int Width
{
get { return width; }
set { width = Math.Max(1, value); }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries N28
{
get { return Values[0]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries N18
{
get { return Values[1]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries N08
{
get { return Values[2]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P18
{
get { return Values[3]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P28
{
get { return Values[4]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P38
{
get { return Values[5]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P48
{
get { return Values[6]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P58
{
get { return Values[7]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P68
{
get { return Values[8]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P78
{
get { return Values[9]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries P88
{
get { return Values[10]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries PP18
{
get { return Values[11]; }
}
/// <summary>
/// </summary>
[Browsable(false)]
[XmlIgnore]
public DataSeries PP28
{
get { return Values[12]; }
}
#endregion
#region Miscellaneous
private int GetDayOfWeek(DateTime date)
{
DateTime saturday = new DateTime(1776, 7, 4).AddDays(2);
TimeSpan diff = date.Subtract(saturday);
return (diff.Days % 7);
}
private DateTime RoundUpTimeToPeriodTime(DateTime time, PivotRange pivotRange)
{
if (pivotRange == PivotRange.Weekly)
{
DateTime periodStart = time.AddDays((6-GetDayOfWeek(time)));
return periodStart.Date.AddDays(System.Math.Ceiling(System.Math.Ceiling(time.Date.Subtract(periodStart.Date).TotalDays) / 7) * 7).Date;
}
else if (pivotRange == PivotRange.Monthly)
{
DateTime result = new DateTime(time.Year, time.Month, 1);
return result.AddMonths(1).AddDays(-1);
}
else
return time;
}
/// <summary>
/// </summary>
/// <param name="graphics"></param>
/// <param name="bounds"></param>
/// <param name="min"></param>
/// <param name="max"></param>
public override void Plot(Graphics graphics, Rectangle bounds, double min, double max)
{
if (Bars == null || ChartControl == null)
return;
int barWidth = ChartControl.ChartStyle.GetBarPaintWidth(ChartControl.BarWidth);
for (int seriesCount = 0; seriesCount < Values.Length; seriesCount++)
{
SolidBrush brush = brushes[seriesCount];
DateTime lastDate = Cbi.Globals.MinDate;
DateTime lastWeek = Cbi.Globals.MinDate;
DateTime lastMonth = Cbi.Globals.MinDate;
int firstX = -1;
int lastX = -1;
int lastY = -1;
int xcounter = 0;
SmoothingMode oldSmoothingMode = graphics.SmoothingMode;
GraphicsPath path = new GraphicsPath();
Gui.Chart.Plot plot = Plots[seriesCount];
DataSeries series = (DataSeries) Values[seriesCount];
if (brush.Color != plot.Pen.Color)
brush = new SolidBrush(plot.Pen.Color);
for (int count = ChartControl.BarsPainted - 1; count >= ChartControl.BarsPainted - Math.Min(ChartControl.BarsPainted, Width); count--)
{
int idx = ChartControl.LastBarPainted - ChartControl.BarsPainted + 1 + count;
if (idx - Displacement < 0 || idx - Displacement >= Bars.Count || (!ChartControl.ShowBarsRequired && idx - Displacement < BarsRequired))
continue;
else if (!series.IsValidPlot(idx))
continue;
if (pivotRangeType == PivotRange.Daily && lastDate == Cbi.Globals.MinDate)
lastDate = Bars.Get(idx).Time.Date;
else if (pivotRangeType == PivotRange.Weekly && lastWeek == Cbi.Globals.MinDate)
lastWeek = RoundUpTimeToPeriodTime(Bars.Get(idx).Time.Date, PivotRange.Weekly);
else if (pivotRangeType == PivotRange.Monthly && lastMonth == Cbi.Globals.MinDate)
lastMonth = RoundUpTimeToPeriodTime(Bars.Get(idx).Time.Date, PivotRange.Monthly);
else if (pivotRangeType == PivotRange.Daily && lastDate != Bars.Get(idx).Time.Date
|| pivotRangeType == PivotRange.Weekly && lastWeek != RoundUpTimeToPeriodTime(Bars.Get(idx).Time.Date, PivotRange.Weekly)
|| pivotRangeType == PivotRange.Monthly && lastMonth != RoundUpTimeToPeriodTime(Bars.Get(idx).Time.Date, PivotRange.Monthly))
continue;
double val = series.Get(idx);
int x = (int) (ChartControl.CanvasRight - ChartControl.BarMarginRight - barWidth / 2
- (ChartControl.BarsPainted - 1) * ChartControl.BarSpace + count * ChartControl.BarSpace);
int y = (int) ((bounds.Y + bounds.Height) - ((val - min ) / Gui.Chart.ChartControl.MaxMinusMin(max, min)) * bounds.Height);
if (xcounter == 0)
{
firstX = x;
}
if (lastX >= 0)
{
if (y != lastY) // Problem here is, that last bar of old day has date of new day
y = lastY;
path.AddLine(lastX - plot.Pen.Width / 2, lastY, x - plot.Pen.Width / 2, y);
}
lastX = x;
lastY = y;
xcounter++;
}
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawPath(plot.Pen, path);
graphics.SmoothingMode = oldSmoothingMode;
if ( labels == true )
{
if (pivotRangeType == PivotRange.Daily)
{
graphics.DrawString(plot.Name, ChartControl.Font, brush, firstX, lastY - ChartControl.Font.GetHeight(), stringFormat); //align label right
//graphics.DrawString(plot.Name, ChartControl.Font, brush, lastX, lastY - ChartControl.Font.GetHeight() / 2, stringFormat); //align label left
}
else if (pivotRangeType == PivotRange.Weekly)
{
graphics.DrawString("Weekly " + plot.Name, ChartControl.Font, brush, firstX, lastY - ChartControl.Font.GetHeight(), stringFormat); //align label right
//graphics.DrawString("Weekly " + plot.Name, ChartControl.Font, brush, lastX, lastY - ChartControl.Font.GetHeight() / 2, stringFormat); //align label left
}
else
{
graphics.DrawString("Monthly " + plot.Name, ChartControl.Font, brush, firstX, lastY - ChartControl.Font.GetHeight(), stringFormat); //align label right
//graphics.DrawString("Monthly " + plot.Name, ChartControl.Font, brush, lastX, lastY - ChartControl.Font.GetHeight() / 2, stringFormat); //align label left
}
}
else
{
graphics.DrawString("", ChartControl.Font, brush, firstX, lastY - ChartControl.Font.GetHeight(), stringFormat); //align label right
//graphics.DrawString("", ChartControl.Font, brush, lastX, lastY - ChartControl.Font.GetHeight() / 2, stringFormat); //align label left
}
}
}
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
// This namespace holds all indicators and is required. Do not change it.
namespace NT.Indicator
{
public partial class Indicator : IndicatorBase
{
private MurreyMath[] cacheMurreyMath = null;
private static MurreyMath checkMurreyMath = new MurreyMath();
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
public MurreyMath MurreyMath(Data.PivotRange pivotRangeType)
{
return MurreyMath(Input, pivotRangeType);
}
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
public MurreyMath MurreyMath(Data.IDataSeries input, Data.PivotRange pivotRangeType)
{
checkMurreyMath.PivotRangeType = pivotRangeType;
pivotRangeType = checkMurreyMath.PivotRangeType;
if (cacheMurreyMath != null)
for (int idx = 0; idx < cacheMurreyMath.Length; idx++)
if (cacheMurreyMath[idx].PivotRangeType == pivotRangeType && cacheMurreyMath[idx].EqualsInput(input))
return cacheMurreyMath[idx];
MurreyMath indicator = new MurreyMath();
indicator.SetUp();
indicator.BarsRequired = BarsRequired;
indicator.CalculateOnBarClose = CalculateOnBarClose;
indicator.Input = input;
indicator.PivotRangeType = pivotRangeType;
MurreyMath[] tmp = new MurreyMath[cacheMurreyMath == null ? 1 : cacheMurreyMath.Length + 1];
if (cacheMurreyMath != null)
cacheMurreyMath.CopyTo(tmp, 0);
tmp[tmp.Length - 1] = indicator;
cacheMurreyMath = tmp;
Indicators.Add(indicator);
return indicator;
}
}
}
// This namespace holds all market analyzer column definitions and is required. Do not change it.
namespace NT.MarketAnalyzer
{
public partial class Column : ColumnBase
{
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.MurreyMath MurreyMath(Data.PivotRange pivotRangeType)
{
return _indicator.MurreyMath(Input, pivotRangeType);
}
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
public Indicator.MurreyMath MurreyMath(Data.IDataSeries input, Data.PivotRange pivotRangeType)
{
return _indicator.MurreyMath(input, pivotRangeType);
}
}
}
// This namespace holds all strategies and is required. Do not change it.
namespace NT.Strategy
{
public partial class Strategy : StrategyBase
{
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
[Gui.Design.WizardCondition("Indicator")]
public Indicator.MurreyMath MurreyMath(Data.PivotRange pivotRangeType)
{
return _indicator.MurreyMath(Input, pivotRangeType);
}
/// <summary>
/// Murrey Math Indicator
/// </summary>
/// <returns></returns>
public Indicator.MurreyMath MurreyMath(Data.IDataSeries input, Data.PivotRange pivotRangeType)
{
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.MurreyMath(input, pivotRangeType);
}
}
}
#endregion
- Attachments
-
- MurreyMath.txt
- MurreyMath for NT7 (change extension to CS)
- (21.23 KiB) Downloaded 504 times
- Henry MultiСharts
- Posts: 9165
- Joined: Aug 25 2011
- Has thanked: 1264 times
- Been thanked: 2958 times
Please contact us directly at support@multicharts.com if you are interested in conversion of this study as a custom paid project.
Hi Jordse.Hi
I've searched in many places but couldn't find a working Murrey Math indicator for Multicharts .Net.
I know there are a lot of free indicators for other platforms but converting them to Multicharts .Net is not that easy for me.
Do you know where can I find it ?
Thank you
I have a working version of this. I had ported it first from a TS indicator, so I have a version that works with the PowerLanguage version of Multicharts. I then converted it into C# and it ran on .NET up to version 8.7 if I remember correctly. After version 8.8 was released something broke on certain intervals. I think a change was introduced to how TrendLines are called. I contacted MC support and they offered to help (as they always do) but I never got round to it as I had a family matter to attend to.
Send me a PM and I'll gladly share the code. Or better still, I can send it to JoshM who is always generous with coding advice on this forum. I'm sure he can quickly find out the offending line.
Say, Josh, can I take you up on that coding offer?I don't, sorry.Do you know where can I find it ?
Perhaps if this is a small indicator the community can convert it to MC .NET. Do you have a publicly available source code and interpretation/explanation for this indicator?
![Smile :)](./images/smilies/icon_smile.gif)
I'd planned on turning the indicator into a strategy but my C# skills aren't so #
![Wink ;)](./images/smilies/icon_wink.gif)
(can someone please explain WHY we can't have an Indicator class and a Strategy class in the same umm.. class?)
Anyway, it was quite a promising strategy. By the time I'd grown tired of looking for a workaround for every little task I needed done in EasyLanguage, I had the strategy yielding 100% winners with very basic code, and without even using stops.
So if you feel like collaborating on a promising project JoshM, please send me a PM.
- JoshM
- Posts: 2196
- Joined: May 20 2011
- Location: The Netherlands
- Has thanked: 1544 times
- Been thanked: 1565 times
- Contact:
Sure, if it's not an unreasonable amount of work and it's for the benefit of the community, then drop me a message and I'll see what I can do to help.
- Henry MultiСharts
- Posts: 9165
- Joined: Aug 25 2011
- Has thanked: 1264 times
- Been thanked: 2958 times
Hello SSS,can someone please explain WHY we can't have an Indicator class and a Strategy class in the same umm.. class?
This is how it was initially designed. It helps to find the required file when you have 1 file = 1 study, instead of 1 file = 100 studies.
That is possible to have both a signal and an indicator in the same file, but MultiCharts will only see the study that was created first, but you can create it's object and calculate a different study over it.