MarketData other symbol, using index on 2nd symbol gives other opentime
MarketData other symbol, using index on 2nd symbol gives other opentime
14 Feb 2014, 00:52
Hi,
I'm trying to create a overlay with other chart data, however, when I try to access the other symbol data the open/close time doesn't seem to match. On top of that when trying to implement an offset it was clear to me that the open/close time can't be fixed with an offset because it doesn't scale:
I log each time the current marketseries opentime and the 2nd symbol marketseries opentime with the same index given in the calculate method and I receive this logging:
13/02/2014 23:47:07.174 | 21/10/2012 22:00:00 - 21/10/2012 23:00:00
13/02/2014 23:47:07.174 | 21/10/2012 23:00:00 - 22/10/2012 0:00:00
*snip * Already 1hr difference here
13/02/2014 23:47:07.720 | 28/05/2013 1:00:00 - 23/05/2013 6:00:00
13/02/2014 23:47:07.720 | 28/05/2013 2:00:00 - 23/05/2013 7:00:00
*snip* several days difference
13/02/2014 23:48:12.991 | 13/02/2014 22:00:00 - 27/01/2014 17:00:00
13/02/2014 23:48:17.109 | 13/02/2014 22:00:00 - 27/01/2014 17:00:00
Is there a easy way to have them aligned or do I need to write my own alignment function for this?
Thanks
Here is my code:
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC)]
public class MultiSymbolMA : Indicator
{
private MarketSeries series2, series3;
private Symbol symbol2, symbol3;
[Parameter(DefaultValue = "EURCHF")]
public string Symbol2 { get; set; }
[Parameter(DefaultValue = "EURCAD")]
public string Symbol3 { get; set; }
[Output("Symbol2Trace", Color = Colors.LightSkyBlue)]
public IndicatorDataSeries Symbol2Trace { get; set; }
[Parameter(DefaultValue = 1)]
public double Symbol2Multiplier { get; set; }
[Parameter(DefaultValue = 0)]
public double Symbol2SerieOffset { get; set; }
[Output("Symbol3Trace", Color = Colors.Black)]
public IndicatorDataSeries Symbol3Trace { get; set; }
private MovingAverage ma;
protected override void Initialize()
{
ma = Indicators.MovingAverage(MarketSeries.Close, 200, MovingAverageType.Simple);
if (Symbol2 != "")
{
symbol2 = MarketData.GetSymbol(Symbol2);
series2 = MarketData.GetSeries(symbol2, TimeFrame);
}
if (Symbol3 != "")
{
symbol3 = MarketData.GetSymbol(Symbol3);
series3 = MarketData.GetSeries(symbol3, TimeFrame);
}
}
public override void Calculate(int index)
{
DrawSeries(series2, index, Symbol2Trace, 0);
}
public void DrawSeries(MarketSeries serie, int index, IndicatorDataSeries indicator, double offset)
{
Print("{0} - {1}", MarketSeries.OpenTime[index], serie.OpenTime[index]);
if (serie != null)
{
double pipdiff = serie.Close[index + (int)Symbol2SerieOffset] - serie.Close[index + (int)Symbol2SerieOffset - 1];
indicator[index] = ma.Result[index] + pipdiff * Symbol2Multiplier;
}
}
}
}
Replies
Spotware
14 Feb 2014, 17:03
Different symbols could have different sessions. If you want to match series from different symbols you need to use GetIndexByExactTime method. You can find an example there: /forum/whats-new/1463
@Spotware

StormeNet
14 Feb 2014, 00:54
Oh, those results were using EURHUF as main chart and EURUSD as 2nd sybmol on the 1hr timeframe.
@StormeNet