CA
CBot backtest shows wrong indicator value!
07 Oct 2018, 17:35
Hi,
I have a simple indicator and a simple CBot. I'm doing backtesting during weekend and just found the value print out from cbot is DIFFERENT from the value if I run it on indicator.
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class TEMA : Indicator
{
[Output("Triple EMA")]
public IndicatorDataSeries Tema { get; set; }
[Parameter("Data Source")]
public DataSeries DataSource { get; set; }
[Parameter(DefaultValue = 20)]
public int Period { get; set; }
private ExponentialMovingAverage ema1;
private ExponentialMovingAverage ema2;
private ExponentialMovingAverage ema3;
protected override void Initialize()
{
ema1 = Indicators.ExponentialMovingAverage(DataSource, Period);
ema2 = Indicators.ExponentialMovingAverage(ema1.Result, Period);
ema3 = Indicators.ExponentialMovingAverage(ema2.Result, Period);
}
public override void Calculate(int index)
{
Tema[index] = 3 * ema1.Result[index] - 3 * ema2.Result[index] + ema3.Result[index];
P("In Indicator", MarketSeries.OpenTime.LastValue, Tema[index]);
}
void P(params object[] names)
{
string result = "";
for (int i = 0; i < names.Length; i++)
{
string v = names[i].ToString();
if (v.IndexOf(".") > 0)
v = v.Substring(0, v.IndexOf(".") + 6);
result = result + ", " + v;
}
Print(result.Substring(1));
}
}
}
From the indicator, the very last value is 1.15179

But when I do backtesting, the last value became 1.15224
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot()]
public class A4 : Robot
{
[Parameter()]
public DataSeries Source { get; set; }
[Parameter(DefaultValue = 40)]
public int Period { get; set; }
TEMA tema;
protected override void OnStart()
{
tema = Indicators.GetIndicator<TEMA>(Source, Period);
}
protected override void OnBar()
{
P("In CBot", MarketSeries.OpenTime.LastValue, tema.Tema.LastValue);
}
void P(params object[] names)
{
string result = "";
for (int i = 0; i < names.Length; i++)
{
string v = names[i].ToString();
if (v.IndexOf(".") > 0)
v = v.Substring(0, v.IndexOf(".") + 6);
result = result + ", " + v;
}
Print(result.Substring(1));
}
}
}

Could somebody help me please?
Thanks in advance!

PanagiotisCharalampous
08 Oct 2018, 10:52
Hi cAlgo9,
Are you sure you are using the same parameters in both cases? In the cBot, the default periods are 40 and in the indicator they are 20.
Best Regards,
Panagiotis
@PanagiotisCharalampous