Multisymbols Optimisation
            
                 05 Apr 2022, 13:35
            
                    
Hi,
Been playing around with multisymbols feature. It worked on 'Backtesting', but didnt work on 'Optimisation', with errors as follow:
04/03/2022 00:00:00.105 | Backtesting was stopped
04/03/2022 00:00:00.105 | Crashed in OnStart with NullReferenceException: Object reference not set to an instance of an object.
04/03/2022 00:00:00.105 | Failed to get symbol 'EURGBP': symbol not found.
04/03/2022 00:00:00.105 | Failed to get symbol 'EURJPY': symbol not found.
04/03/2022 00:00:00.105 | Backtesting started
 
Wondering if this is expected (yet to extend this feature for optimisation), or I might have made some coding mistakes? Here's the code sample:
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NewcBot : Robot
    {
        [Parameter("First Pair", DefaultValue = "EURUSD", Group = "Pair")]
        public string Symbol1 { get; set; }
        [Parameter("Second Pair", DefaultValue = "EURJPY", Group = "Pair")]
        public string Symbol2 { get; set; }
        [Parameter("Third Pair", DefaultValue = "EURGBP", Group = "Pair")]
        public string Symbol3 { get; set; }
        [Parameter("Entry 1 Volume (Lots)", Group = "Position Entry - Market Order")]
        public double VolumeInLots_1 { get; set; }
        [Parameter("Entry 2 Volume (Lots)", Group = "Position Entry - Market Order")]
        public double VolumeInLots_2 { get; set; }
        [Parameter("Entry 3 Volume (Lots)", Group = "Position Entry - Market Order")]
        public double VolumeInLots_3 { get; set; }
        private double _volumeInUnits1;
        private double _volumeInUnits2;
        private double _volumeInUnits3;
        private Symbol symbol1, symbol2, symbol3;
        private Bars series1;
        private Bars series2;
        private Bars series3;
        protected override void OnStart()
        {
            symbol1 = Symbols.GetSymbol(Symbol1);
            symbol2 = Symbols.GetSymbol(Symbol2);
            symbol3 = Symbols.GetSymbol(Symbol3);
            _volumeInUnits1 = symbol1.QuantityToVolumeInUnits(VolumeInLots_1);
            _volumeInUnits2 = symbol2.QuantityToVolumeInUnits(VolumeInLots_2);
            _volumeInUnits3 = symbol3.QuantityToVolumeInUnits(VolumeInLots_3);
            series1 = MarketData.GetBars(TimeFrame, Symbol1);
            series2 = MarketData.GetBars(TimeFrame, Symbol2);
            series3 = MarketData.GetBars(TimeFrame, Symbol3);
        }
        protected override void OnBar()
        {
            if (series1.HighPrices.Last(1) - series1.LowPrices.Last(1) > series2.HighPrices.Last(1) - series2.LowPrices.Last(1) && Positions.Find("BUY") == null)
            {
                ExecuteMarketOrder(TradeType.Buy, Symbol2, _volumeInUnits2, "BUY");
                if (Positions.Find("SELL") != null)
                {
                    foreach (var openedPosition in Positions.FindAll("SELL"))
                    {
                        ClosePosition(openedPosition);
                    }
                }
            }
            else if (series1.HighPrices.Last(1) - series1.LowPrices.Last(1) < series3.HighPrices.Last(1) - series3.LowPrices.Last(1) && Positions.Find("SELL") == null)
            {
                ExecuteMarketOrder(TradeType.Sell, Symbol3, _volumeInUnits3, "SELL");
                if (Positions.Find("BUY") != null)
                {
                    foreach (var openedPosition in Positions.FindAll("BUY"))
                    {
                        ClosePosition(openedPosition);
                    }
                }
            }
        }
        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }
    }
}
Thanks!

galafrin
05 Apr 2022, 23:12
RE:
Multi-symbols already works under Backtest. 4.1, so no Backtest regression under 4.2, is a thing
@galafrin