I've noticed strange behavior when calling AverageTrueRange during CalcBar() - it restarts the strategy and StartCalc() is called twice. This causes that strategy does not work properly since I'm initailizating some values in StartCalc().
Use any currency pair on LMAX - Forex.
Subchart #1 interval is 1 hour, with range 60 days back.
Subchart #2 interval is 1 day, with range 60 days back.
Heres's the code:
Code: Select all
using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;
namespace PowerLanguage.Strategy {
[IOGMode(IOGMode.Enabled)]
public class TestOnly : SignalObject {
public TestOnly(object _ctx):base(_ctx){}
private IOrderMarket buy_order;
private int ATR_LENGTH,DAY_CHART_ID;
protected override void Create() {
ATR_LENGTH = 50;
DAY_CHART_ID = 2;
// create variable objects, function objects, order objects etc.
buy_order = OrderCreator.MarketNextBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy));
Output.Clear();
}
protected override void StartCalc() {
// assign inputs
// here I'm initializating some properties which are reinitialized when calling AverageTrueRange
Output.WriteLine("Start calc CALL!");
}
protected override void CalcBar(){
if (!Environment.IsAutoTradingMode || !Environment.IsRealTimeCalc)
return;
Output.WriteLine("CalcBar CALL!");
if (StrategyInfo.MarketPosition == 0)
{
// double atr_day = AvgTrueRange.AverageTrueRange(this, ATR_LENGTH,0,DAY_CHART_ID);
Output.WriteLine("Computing ATR...");
double atr_day = this.AverageTrueRange(ATR_LENGTH,0,DAY_CHART_ID);
Output.WriteLine("ATR value: {0}", atr_day);
buy_order.Send();
}
else
{
GenerateExitOnClose();
}
}
}
}
Start calc CALL!
Start calc CALL!
CalcBar CALL!
Computing ATR...
Start calc CALL!
CalcBar CALL!
Computing ATR...
ATR value: 0,431759999999999
CalcBar CALL!
Computing ATR...
ATR value: 0,431759999999999
CalcBar CALL!
CalcBar CALL!
CalcBar CALL!
CalcBar CALL!
See the Start calc CALL after first computation? I believe StartCalc() shouldn't be called once the Automated Trading is started and CalcBar() is triggered.
Could anybody tell me if I'm doing something wrong or should I report it as bug?
Thank you.