Murrey Math Levels for MC .net  [SOLVED]

Questions about MultiCharts .NET and user contributed studies.
jorsde
Posts: 10
Joined: 01 Apr 2014
Has thanked: 5 times

Murrey Math Levels for MC .net

Postby jorsde » 24 Apr 2014

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

User avatar
JoshM
Posts: 2195
Joined: 20 May 2011
Location: The Netherlands
Has thanked: 1544 times
Been thanked: 1565 times
Contact:

Re: Murrey Math Levels for MC .net

Postby JoshM » 25 Apr 2014

Do you know where can I find it ?
I don't, sorry.

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?

jorsde
Posts: 10
Joined: 01 Apr 2014
Has thanked: 5 times

Re: Murrey Math Levels for MC .net

Postby jorsde » 25 Apr 2014

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).

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 484 times

User avatar
Henry MultiСharts
Posts: 9165
Joined: 25 Aug 2011
Has thanked: 1264 times
Been thanked: 2957 times

Re: Murrey Math Levels for MC .net

Postby Henry MultiСharts » 25 Apr 2014

Please contact us directly at support@multicharts.com if you are interested in conversion of this study as a custom paid project.

SSS
Posts: 14
Joined: 01 Apr 2013
Has thanked: 10 times
Been thanked: 2 times

Re: Murrey Math Levels for MC .net  [SOLVED]

Postby SSS » 04 May 2014

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
Hi Jordse.

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.

Do you know where can I find it ?
I don't, sorry.

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?
Say, Josh, can I take you up on that coding offer? :) You've helped me before with some of my posts on this forum - you and MKnight. Thank you both.

I'd planned on turning the indicator into a strategy but my C# skills aren't so # ;)
(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.

User avatar
JoshM
Posts: 2195
Joined: 20 May 2011
Location: The Netherlands
Has thanked: 1544 times
Been thanked: 1565 times
Contact:

Re: Murrey Math Levels for MC .net

Postby JoshM » 07 May 2014

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.

User avatar
Henry MultiСharts
Posts: 9165
Joined: 25 Aug 2011
Has thanked: 1264 times
Been thanked: 2957 times

Re: Murrey Math Levels for MC .net

Postby Henry MultiСharts » 13 May 2014

can someone please explain WHY we can't have an Indicator class and a Strategy class in the same umm.. class?
Hello SSS,

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.


Return to “MultiCharts .NET”