Symbol for SmallChartProvider not loaded

Created at 14 Jun 2019, 14:18
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
BJ

bjornvandekerkhof

Joined 13.06.2019

Symbol for SmallChartProvider not loaded
14 Jun 2019, 14:18


Hello,

A cBot I use and works on other platforms crashes on a certain one and it gives this log:

 

Does anyone know what the reason is of this and how I can solve this issue?

 

Thanks in advance.

Best regards, Bjorn.


@bjornvandekerkhof
Replies

PanagiotisCharalampous
14 Jun 2019, 14:24

Hi Bjorn,

Can you post the complete cBot code?

Best Regards,

Panagiotis


@PanagiotisCharalampous

bjornvandekerkhof
14 Jun 2019, 14:48

RE:

Panagiotis Charalampous said:

Hi Bjorn,

Can you post the complete cBot code?

Best Regards,

Panagiotis

 

Hello Panagiotis,

It's the same code from yesterday I am working with which I am testing over several platforms, they work on all just that one gives the error.

Best regards, Bjorn.

Code:


using System;
using System.Linq;
using System.Text;
using cAlgo.API;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class DayTradeG1 : Robot
    {
        [Parameter("News Hour", DefaultValue = 14, MinValue = 0, MaxValue = 23)]
        public int NewsHour { get; set; }
        [Parameter("News Minute", DefaultValue = 30, MinValue = 0, MaxValue = 59)]
        public int NewsMinute { get; set; }
        [Parameter("Pips away", DefaultValue = 10)]
        public int PipsAway { get; set; }
        [Parameter("Take Profit", DefaultValue = 50)]
        public int TakeProfit { get; set; }
        [Parameter("Stop Loss", DefaultValue = 10)]
        public int StopLoss { get; set; }
        [Parameter("Volume", DefaultValue = 100000, MinValue = 10)]
        public int Volume { get; set; }
        [Parameter("Seconds Before", DefaultValue = 10, MinValue = 1)]
        public int SecondsBefore { get; set; }
        [Parameter("Seconds Timeout", DefaultValue = 10, MinValue = 1)]
        public int SecondsTimeout { get; set; }
        [Parameter("One Cancels Other")]
        public bool Oco { get; set; }
        [Parameter("ShowTimeLeftNews", DefaultValue = false)]
        public bool ShowTimeLeftToNews { get; set; }
        [Parameter("ShowTimeLeftPlaceOrders", DefaultValue = true)]
        public bool ShowTimeLeftToPlaceOrders { get; set; }
        [Parameter("Label", DefaultValue = "Label")]
        public string Label { get; set; }
        private bool _ordersCreated;
        private DateTime _triggerTimeInServerTimeZone;

        protected override void OnStart()
        {
            Positions.Opened += OnPositionOpened;
            Timer.Start(1);
            var triggerTimeInLocalTimeZone = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, NewsHour, NewsMinute, 0);
            if (triggerTimeInLocalTimeZone < DateTime.Now)
                triggerTimeInLocalTimeZone = triggerTimeInLocalTimeZone.AddDays(1);
            _triggerTimeInServerTimeZone = TimeZoneInfo.ConvertTime(triggerTimeInLocalTimeZone, TimeZoneInfo.Local, TimeZone);
        }
        protected override void OnTimer()
        {
            var remainingTime = _triggerTimeInServerTimeZone - Server.Time;
            DrawRemainingTime(remainingTime);
            if (!_ordersCreated)
            {
                var sellOrderTargetPrice = Symbol.Bid - PipsAway * Symbol.PipSize;
                ChartObjects.DrawHorizontalLine("sell target", sellOrderTargetPrice, Colors.Red, 1, LineStyle.DotsVeryRare);
                var buyOrderTargetPrice = Symbol.Ask + PipsAway * Symbol.PipSize;
                ChartObjects.DrawHorizontalLine("buy target", buyOrderTargetPrice, Colors.Blue, 1, LineStyle.DotsVeryRare);
                if (Server.Time <= _triggerTimeInServerTimeZone && (_triggerTimeInServerTimeZone - Server.Time).TotalSeconds <= SecondsBefore)
                {
                    _ordersCreated = true;
                    var expirationTime = _triggerTimeInServerTimeZone.AddSeconds(SecondsTimeout);
                    PlaceStopOrder(TradeType.Sell, Symbol, Volume, sellOrderTargetPrice, Label, StopLoss, TakeProfit, expirationTime);
                    PlaceStopOrder(TradeType.Buy, Symbol, Volume, buyOrderTargetPrice, Label, StopLoss, TakeProfit, expirationTime);
                    ChartObjects.RemoveObject("sell target");
                    ChartObjects.RemoveObject("buy target");
                }
            }
            if (_ordersCreated && !PendingOrders.Any(o => o.Label == Label))
            {
                Print("Orders expired");
                Stop();
            }
        }
        private void DrawRemainingTime(TimeSpan remainingTimeToNews)
        {
            if (ShowTimeLeftToNews)
            {
                if (remainingTimeToNews > TimeSpan.Zero)
                {
                    ChartObjects.DrawText("countdown1", "Time left to news: " + FormatTime(remainingTimeToNews), StaticPosition.TopLeft);
                }
                else
                {
                    ChartObjects.RemoveObject("countdown1");
                }
            }
            if (ShowTimeLeftToPlaceOrders)
            {
                var remainingTimeToOrders = remainingTimeToNews - TimeSpan.FromSeconds(SecondsBefore);
                if (remainingTimeToOrders > TimeSpan.Zero)
                {
                    ChartObjects.DrawText("countdown2", "Time left to place orders: " + FormatTime(remainingTimeToOrders), StaticPosition.TopRight);
                }
                else
                {
                    ChartObjects.RemoveObject("countdown2");
                }
            }
        }
        private static StringBuilder FormatTime(TimeSpan remainingTime)
        {
            var remainingTimeStr = new StringBuilder();
            if (remainingTime.TotalHours >= 1)
                remainingTimeStr.Append((int)remainingTime.TotalHours + "h ");
            if (remainingTime.TotalMinutes >= 1)
                remainingTimeStr.Append(remainingTime.Minutes + "m ");
            if (remainingTime.TotalSeconds > 0)
                remainingTimeStr.Append(remainingTime.Seconds + "s");
            return remainingTimeStr;
        }
        private void OnPositionOpened(PositionOpenedEventArgs args)
        {
            var position = args.Position;
            if (position.Label == Label && position.SymbolCode == Symbol.Code)
            {
                if (Oco)
                {
                    foreach (var order in PendingOrders)
                    {
                        if (order.Label == Label && order.SymbolCode == Symbol.Code)
                        {
                            CancelPendingOrderAsync(order);
                        }
                    }
                }
                Stop();
            }
        }
    }
}

 


@bjornvandekerkhof

PanagiotisCharalampous
14 Jun 2019, 14:53

Hi Bjorn,

Thanks. Can you also tell us the platform and the cBot parameters used to reproduce this problem?

Best Regards,

Panagiotis


@PanagiotisCharalampous

bjornvandekerkhof
14 Jun 2019, 15:04 ( Updated at: 21 Dec 2023, 09:21 )

RE:

Hello Panagiotis,

The platform is: Pepperstone cTrader

Parameters from the cBot: 

 

Best regards, Bjorn.


@bjornvandekerkhof

PanagiotisCharalampous
18 Jun 2019, 10:41

Hi Bjorn,

I ran the cBot for some time but could not reproduce the issue. Do you still get this exception or was it something temporary? If yes, can you please provide us with the exact steps you follow to reproduce this problem?

Best Regards,

Panagiotis


@PanagiotisCharalampous