PanagiotisCharalampous's avatar
PanagiotisCharalampous
26 follower(s) 0 following 1006 subscription(s)
Replies

PanagiotisCharalampous
20 May 2024, 05:57

Hi there,

Thank you for reporting this issue. Unfortunately we were not able to reproduce this behavior. Could you please send us some troubleshooting information the next time this happens? Please paste a link to this discussion inside the text box before you submit it.

Best regards,

Panagiotis
 


@PanagiotisCharalampous

PanagiotisCharalampous
20 May 2024, 05:56

Hi there,

If you go to the Algo tab in your mobile application, you should be able to see all your algos and start them.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
20 May 2024, 05:47

RE: RE: RE: RE: New Bot

serebryana3 said: 

PanagiotisCharalampous said: 

serebryana3 said: 

PanagiotisCharalampous said: 

Hi there,

Can you record a video demonstrating the exact steps you are following to encounter this issue?

Best regards,

Panagiotis

Hi there, 

Here is the link to video 

 

Thanks

 

 

Can you share the code you are pasting?

using System;
using System.Collections.Generic;
using System.Threading;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo
{
   [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
   public class SampleTradingPanel : Robot
   {
       [Parameter("Vertical Position", Group = "Panel alignment", DefaultValue = VerticalAlignment.Top)]
       public VerticalAlignment PanelVerticalAlignment { get; set; }

       [Parameter("Horizontal Position", Group = "Panel alignment", DefaultValue = HorizontalAlignment.Left)]
       public HorizontalAlignment PanelHorizontalAlignment { get; set; }

       [Parameter("Risk_default", Group = "x", DefaultValue = 1.5, MinValue = 0.1, Step = 0.1)]
       public double Risk { get; set; }

       [Parameter("Risk_step", Group = "x", DefaultValue = 0.5, MinValue = 0.1)]
       public double Risk_step { get; set; }

 

       protected override void OnStart()
       {
           var tradingPanel = new TradingPanel(this, Symbol, Chart, Risk, Risk_step);

           var border = new Border
           {
               VerticalAlignment = PanelVerticalAlignment,
               HorizontalAlignment = PanelHorizontalAlignment,
               Style = Styles.CreatePanelBackgroundStyle(),
               Margin = "20 20 20 20",
               Width = 245,
               Child = tradingPanel
           };

           Chart.AddControl(border);

           Chart.MouseUp += tradingPanel.Chart_MouseUp;
           Chart.KeyDown += tradingPanel.Chart_KeyDown;
       }
   }

   public class TradingPanel : CustomControl
   {
       private TextBox Input { get; set; }
       private Button Limit { get; set; }
       private Button Market { get; set; }

       private readonly Robot _robot;
       private readonly Symbol _symbol;
       Chart _chart;
       private double RiskStep { get; set; }
       private bool UsePercent { get; set; }
       LimitOrderState LimitState { get; set; }
       bool IsLong { get; set; }
       double LimitStopLoss { get; set; }

       MarketOrderState MarketState { get; set; }
       double MarketStopLoss { get; set; }

       public TradingPanel(Robot robot, Symbol symbol, Chart chart, double riskDef, double riskStep)
       {
           _robot = robot;
           _symbol = symbol;
           _chart = chart;
           RiskStep = riskStep;
           AddChild(CreateContentPanel(riskDef));
       }

       internal void Chart_MouseUp(ChartMouseEventArgs obj)
       {
           try
           {
               #region Limit
               if (LimitState == LimitOrderState.DetectingStopPrice)
               {
                   LimitStopLoss = obj.YValue;
                   LimitState = LimitOrderState.PlacingLimitOrder;
                   Limit.Text = "ORDER";
                   if (obj.YValue > _symbol.Ask)
                       IsLong = false;
                   else if (obj.YValue < _symbol.Ask)
                       IsLong = true;
                   _chart.DrawHorizontalLine("StopLine", obj.YValue, Color.Red);
               
               }
               else if (LimitState == LimitOrderState.PlacingLimitOrder)
               {
                   _chart.RemoveObject("StopLine");
                   double volume;

                   if (UsePercent)
                   {
                       volume = _symbol.VolumeForProportionalRisk(ProportionalAmountType.Balance, double.Parse(Input.Text), Math.Abs((obj.YValue - LimitStopLoss) / _symbol.PipSize));
                       volume = volume * _robot.Account.FreeMargin / _robot.Account.Balance;
                       volume = _symbol.NormalizeVolumeInUnits(volume, RoundingMode.ToNearest);
                   }
                   else
                   {
                       volume = _symbol.VolumeForFixedRisk(double.Parse(Input.Text), Math.Abs((obj.YValue - LimitStopLoss) / _symbol.PipSize));
                       volume = volume * _robot.Account.FreeMargin / _robot.Account.Balance;
                       volume = _symbol.NormalizeVolumeInUnits(volume, RoundingMode.ToNearest);
                   }


                   _robot.PlaceLimitOrderAsync(IsLong ? TradeType.Buy : TradeType.Sell, _symbol.Name, volume, obj.YValue, "CustomPanel", Math.Abs(obj.YValue - LimitStopLoss) / _symbol.PipSize, null,
                       (TradeResult result) =>
                       {
                           if (result != null && !result.IsSuccessful)
                           {
                               LimitState = LimitOrderState.Default;
                               Limit.Text = "LIMIT";
                           }
                       });
                   LimitState = LimitOrderState.PlacingTakeProfit;
                   Limit.Text = "TAKE";
               }
               else if (LimitState == LimitOrderState.PlacingTakeProfit)
               {
                   _robot.ModifyPendingOrderAsync(_robot.PendingOrders[^1], _robot.PendingOrders[^1].TargetPrice, _robot.PendingOrders[^1].StopLossPips, Math.Abs(obj.YValue - _robot.PendingOrders[^1].TargetPrice) / _symbol.PipSize,
                       (TradeResult result) =>
                       {
                           if (result == null || !result.IsSuccessful)
                           {
                               LimitState = LimitOrderState.Default;
                               Limit.Text = "LIMIT";
                           }
                       });

                   LimitState = LimitOrderState.Default;
                   Limit.Text = "LIMIT";
               }
               #endregion

               #region Market
               if (MarketState == MarketOrderState.DetectingStopPrice)
               {
                   MarketStopLoss = obj.YValue;

                   double volume;
                   double volume1;
                   if (UsePercent)
                   {
                       volume = _symbol.VolumeForProportionalRisk(ProportionalAmountType.Balance, double.Parse(Input.Text), Math.Abs((_symbol.Ask - MarketStopLoss) / _symbol.PipSize));
                       volume1 = volume;
                       volume = volume * _robot.Account.FreeMargin / _robot.Account.Balance;
                       volume = _symbol.NormalizeVolumeInUnits(volume, RoundingMode.ToNearest);
                   }
                   else
                   {
                       volume = _symbol.VolumeForFixedRisk(double.Parse(Input.Text), Math.Abs((_symbol.Ask - MarketStopLoss) / _symbol.PipSize));
                       volume1 = volume;
                       volume = volume * _robot.Account.FreeMargin / _robot.Account.Balance;
                       volume = _symbol.NormalizeVolumeInUnits(volume, RoundingMode.ToNearest);
                   }

                   TradeType type = TradeType.Buy;

                   if (MarketStopLoss > _symbol.Ask)
                       type = TradeType.Sell;

                   var res = _robot.ExecuteMarketOrder(type, _symbol.Name, volume);

                   if (res != null)
                   {
                       _robot.ModifyPositionAsync(res.Position, MarketStopLoss, null, null);

                       _robot.Print($"volume {volume1}");
                       _robot.Print($"res.Position.VolumeInUnits {res.Position.VolumeInUnits}");
                       double dif = Math.Abs(volume1 - res.Position.VolumeInUnits) / volume1;
                       _robot.Print($"dif {dif}");

                       if (dif > 0.2d)
                       {
                           _robot.Print($"Разница между рассчитанным и исполненным объемом {Math.Round(dif,2) * 100}%");
                           _robot.Notifications.PlaySound(SoundType.Announcement);
                       }
                   }

                   MarketState = MarketOrderState.PlacingTakeProfit;
                   Market.Text = "STOP";
               }
               else if (MarketState == MarketOrderState.PlacingTakeProfit)
               { 
                   var lastPosition = _robot.Positions[^1];
                   if (lastPosition != null)
                   {
                       double newTakeProfitPrice = obj.YValue;
                       _robot.ModifyPositionAsync(lastPosition, lastPosition.StopLoss, newTakeProfitPrice,
                           (TradeResult result) =>
                           {
                               if (result == null || !result.IsSuccessful)
                               {
                                   _robot.Print("Failed to modify the take profit: {0}", result.Error);
                               }
                               else
                               {
                                   _robot.Print("Take profit successfully modified.");
                               }
                           });
                   }
                   else
                   {
                       _robot.Print("No open positions found.");
                   }

                   MarketState = MarketOrderState.Default;
                   Limit.Text = "MARKET";
               }
               #endregion
           }
           catch
           {
               LimitState = LimitOrderState.Default;
               Limit.Text = "LIMIT";

               MarketState = MarketOrderState.Default;
               Market.Text = "MARKET";
           }
       }

               internal void Chart_KeyDown(ChartKeyboardEventArgs obj)
               {
                   if (obj.Key == Key.Escape)
                   {
                       _chart.RemoveObject("StopLine");
                       LimitState = LimitOrderState.Default;
                       Limit.Text = "LIMIT";
                       MarketState = MarketOrderState.Default;
                       Market.Text = "MARKET";
                   }
       }


       private Grid CreateContentPanel(double riskDef)
       {
           var grid = new Grid(1, 2)
           {
               Margin = 10
           };
           var gridLeft = new Grid(1, 3);

           Input = CreateInput(riskDef);
           gridLeft.AddChild(Input, 0, 0);

           var percentMoneySwitchButton = CreateSwitchButton("$", Styles.CreateGreenButtonStyle());
           gridLeft.AddChild(percentMoneySwitchButton, 0, 1);

           var gridLeftInner = new Grid(2, 1);

           var plusButton = CreatePlusMinusButton("+", Styles.CreateGreenButtonStyle());
           gridLeftInner.AddChild(plusButton, 0, 0);

           var minusButton = CreatePlusMinusButton("-", Styles.CreateGreenButtonStyle());
           gridLeftInner.AddChild(minusButton, 1, 0);

           gridLeft.AddChild(gridLeftInner, 0, 2);

           var gridRight = new Grid(1, 2);

           var limitButton = CreateLimitButton("LIMIT", Styles.CreateGreenButtonStyle());
           gridRight.AddChild(limitButton, 0, 0);

           var marketButton = CreateMarketButton("MARKET", Styles.CreateGreenButtonStyle());
           gridRight.AddChild(marketButton, 0, 1);

           grid.AddChild(gridLeft, 0, 0);
           grid.AddChild(gridRight, 0, 1);

           return grid;
       }

       private TextBox CreateInput(double riskDef)
       {
           var newInput = new TextBox
           {
               Margin = "2",
               Text = riskDef.ToString(),
               Style = Styles.CreateInputStyle()
           };

           return newInput;
       }

       private Button CreateSwitchButton(string text, Style style)
       {
           var button = new Button
           {
               Text = text,
               Style = style,
               Height = 28,
               Margin = "2"
           };

           button.Click += (button) =>
           {
               if (button.Button.Text == "%")
               {
                   button.Button.Text = "$";
                   UsePercent = false;
               }
               else
               {
                   button.Button.Text = "%";
                   UsePercent = true;
               }
           };

           return button;
       }

       private Button CreatePlusMinusButton(string text, Style style)
       {
           var button = new Button
           {
               Text = text,
               Style = style,
               Height = 12,
               VerticalContentAlignment = VerticalAlignment.Center,
               HorizontalContentAlignment = HorizontalAlignment.Center,
               Margin = "2"
           };

           if (text == "+")
               button.Click += args =>
               {
                   if (double.TryParse(Input.Text, out double buf))
                       Input.Text = (buf + RiskStep).ToString();
               };
           else
               button.Click += args =>
               {
                   if (double.TryParse(Input.Text, out double buf))
                       Input.Text = (buf - RiskStep).ToString();
               };

           return button;
       }

       private Button CreateLimitButton(string text, Style style)
       {
           var button = new Button
           {
               Text = text,
               Style = style,
               VerticalContentAlignment = VerticalAlignment.Center,
               HorizontalContentAlignment = HorizontalAlignment.Center,
               Margin = "2"
           };

           button.Click += (button) =>
           {
               if (LimitState == LimitOrderState.Default)
                   LimitState = LimitOrderState.DetectingStopPrice;

               MarketState = MarketOrderState.Default;
               Market.Text = "MARKET";

               if (button.Button.Text == "LIMIT")
                   button.Button.Text = "STOP";
           };

           Limit = button;

           return button;
       }

       private Button CreateMarketButton(string text, Style style)
       {
           var button = new Button
           {
               Text = text,
               Style = style,
               VerticalContentAlignment = VerticalAlignment.Center,
               HorizontalContentAlignment = HorizontalAlignment.Center,
               Margin = "2"
           };

           button.Click += (button) =>
           {
               if (MarketState == MarketOrderState.Default)
                   MarketState = MarketOrderState.DetectingStopPrice;

               LimitState = LimitOrderState.Default;
               Limit.Text = "LIMIT";

               if (button.Button.Text == "MARKET")
                   button.Button.Text = "STOP";
           };

           Market = button;

           return button;
       }


       enum LimitOrderState
       {
           Default,
           DetectingStopPrice,
           PlacingLimitOrder,
           PlacingTakeProfit
       }

       enum MarketOrderState
       {
           Default,
           DetectingStopPrice,
           PlacingTakeProfit
       }
   }

   public static class Styles
   {
       public static Style CreatePanelBackgroundStyle()
       {
           var style = new Style();
           style.Set(ControlProperty.CornerRadius, 3);
           style.Set(ControlProperty.BackgroundColor, GetColorWithOpacity(Color.FromHex("#292929"), 0.85m), ControlState.DarkTheme);
           style.Set(ControlProperty.BackgroundColor, GetColorWithOpacity(Color.FromHex("#FFFFFF"), 0.85m), ControlState.LightTheme);
           style.Set(ControlProperty.BorderColor, Color.FromHex("#3C3C3C"), ControlState.DarkTheme);
           style.Set(ControlProperty.BorderColor, Color.FromHex("#C3C3C3"), ControlState.LightTheme);
           style.Set(ControlProperty.BorderThickness, new Thickness(1));

           return style;
       }


       public static Style CreateInputStyle()
       {
           var style = new Style(DefaultStyles.TextBoxStyle);
           style.Set(ControlProperty.BackgroundColor, Color.FromHex("#1A1A1A"), ControlState.DarkTheme);
           style.Set(ControlProperty.BackgroundColor, Color.FromHex("#111111"), ControlState.DarkTheme | ControlState.Hover);
           style.Set(ControlProperty.BackgroundColor, Color.FromHex("#E7EBED"), ControlState.LightTheme);
           style.Set(ControlProperty.BackgroundColor, Color.FromHex("#D6DADC"), ControlState.LightTheme | ControlState.Hover);
           style.Set(ControlProperty.CornerRadius, 3);
           return style;
       }

       public static Style CreateGreenButtonStyle()
       {
           return CreateButtonStyle(Color.FromHex("#009345"), Color.FromHex("#10A651"));
       }


       private static Style CreateButtonStyle(Color color, Color hoverColor)
       {
           var style = new Style(DefaultStyles.ButtonStyle);
           style.Set(ControlProperty.Padding, new Thickness(2, 0, 2, 0));
           style.Set(ControlProperty.BackgroundColor, color, ControlState.DarkTheme);
           style.Set(ControlProperty.BackgroundColor, color, ControlState.LightTheme);
           style.Set(ControlProperty.BackgroundColor, hoverColor, ControlState.DarkTheme | ControlState.Hover);
           style.Set(ControlProperty.BackgroundColor, hoverColor, ControlState.LightTheme | ControlState.Hover);
           style.Set(ControlProperty.ForegroundColor, Color.FromHex("#FFFFFF"), ControlState.DarkTheme);
           style.Set(ControlProperty.ForegroundColor, Color.FromHex("#FFFFFF"), ControlState.LightTheme);
           return style;
       }

       private static Color GetColorWithOpacity(Color baseColor, decimal opacity)
       {
           var alpha = (int)Math.Round(byte.MaxValue * opacity, MidpointRounding.AwayFromZero);
           return Color.FromArgb(alpha, baseColor);
       }
   }
}

 

 

 

Hi there,

Unfortunately I cannot reproduce this problem. The code you pasted builds fine for me.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:44

RE: RE: Robot Backtesting doesnt work for all pairs!

DR.SHADI_JARRAR said: 

PanagiotisCharalampous said: 

Hi there,

Can you please provide more information about the issue? What do you mean when you say it doesn't work? Can you share the source code as well as steps to reproduce?

Best regards,

Panagiotis

simply the cbot doesnt excute any positions in all pairs except in indices. here is the result of backtesting when used with Japan225 for example:

 

On the other hand, for usdjpy backtesting this is the result: 

 

 

 

Here is the code of the cbot: 

 

using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using System.Linq;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class YarabRobot : Robot
    {
                // تحديد الثوابت والمراجع
        private Yarabindicator _Yarabindicator;
        private bool tradeExecutedThisHour = false;
        private double initialLotSize = 0.01;
        private double currentLotSize = 0.01; 
        private bool previousPositionInLoss = false; 
        private bool IsNewHour()
        {
            return Server.Time.Minute == 0 && Server.Time.Second == 0;
        }

                // استدعاء المؤشر
        protected override void OnStart()
        {
            // Initialize the dLagema indicator
            _Yarabindicator = Indicators.GetIndicator<Yarabindicator>(3, 100, 60,1, 7,17);
        }

                // طريقة البار لفتح الصفقات

                 protected override void OnBar()
        {
                    int index = MarketSeries.Close.Count - 1;
                    
            // السماح بفتح الصفقات لمرة واحدة فقط بمجرد بداية الساعة                 
                if (IsNewHour())
                tradeExecutedThisHour = false;
            
            // اشتري بهذه الشروط واعلن اتمام فتح صفقة
            if ((Bars.ClosePrices[index-1] > _Yarabindicator.DLagEMAs[index-1]&&Bars.ClosePrices[index-2] < _Yarabindicator.DLagEMAs[index-2]) )
            {
                ExecuteMarketOrder(TradeType.Buy, Symbol, currentLotSize, "Open BUY Position", null,null,null, "Buy");
                tradeExecutedThisHour = true;
            }
            // بيع بهذه الشروط واعلن اتمام فتح صفقة
            else if ((Bars.ClosePrices[index-1] < _Yarabindicator.DLagEMAs[index-1]&&Bars.ClosePrices[index-2] > _Yarabindicator.DLagEMAs[index-2]))
            {
                ExecuteMarketOrder(TradeType.Sell, Symbol, currentLotSize, "Open SELL Position",null, null,null, "Sell");
                tradeExecutedThisHour = true;  
                
            }
         }    
         
         
                // طريقة التيك لاغلاق الصفقات
        protected override void OnTick()
        {
                    int index = Bars.ClosePrices.Count - 1;


            // أغلق صفقة الشراء باحدى الحالتين التاليتين
            if (Bars.HighPrices[index ] > _Yarabindicator.sr[index ]||Bars.LowPrices[index ] < _Yarabindicator.DLagEMAs2[index ] )
            {
                var buyPositions = Positions.Where(p => p.TradeType == TradeType.Buy).ToList();
                foreach (var position in buyPositions)
                    
                    if (position.GrossProfit < 0)
                    {
                    currentLotSize=currentLotSize*1;
                    ClosePosition(position);
                    }
                    else if (position.GrossProfit > 0)
                    {
                    currentLotSize=initialLotSize;
                    ClosePosition(position);
                    }
            }

            // أغلق صفقة الشراء باحدى الحالتين التاليتين
            if (Bars.LowPrices[index ] < _Yarabindicator.sr[index ]||Bars.HighPrices[index ] > _Yarabindicator.DLagEMAs2[index ])
            {
                var sellPositions = Positions.Where(p => p.TradeType == TradeType.Sell).ToList();
                foreach (var position in sellPositions)
 
                    if (position.GrossProfit < 0)
                    {
                    currentLotSize=currentLotSize*1;
                    ClosePosition(position);
                    }
                    else if (position.GrossProfit > 0)
                    {
                    currentLotSize=initialLotSize;
                    ClosePosition(position);
                    }
            }     
        }
       }
      }
 

You seem to use lots instead of units as volume. That's probably the reason.


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:42

RE: RE: Disable Platform Software Auto Update

ctid6168533 said: 

PanagiotisCharalampous said: 

Hi RayAdam,

There is no option to disable updates for cTrader. 

Best Regards,

Panagiotis

hi Panagiotis, 

there should be a feature to block update. this is a platform we use to trade money and we can't risk our trades with new versions specially when they still have problems. there should be an update acknowlegment.. now i am not able to handle my Algos properly with very slow optimizations and optimization status not appearing on the left screen as before .. I am using a Dell R720 server with dual processors total 56 cores and 256 RAM yet the optimization is extremly slow compared to previous version ! 

Hi there,

If you don't want to use the update, you can use your broker's version which has not been updated yet.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:40

Hi there,

More updates for updates for manual trading will be released in future releases.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:37

Hi there,

Can you share the cBot code so that we can check?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:34

Hi all,

You can still use your broker's cTrader which has not been updated yet.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
18 May 2024, 06:31

Hi there,

Can you please send us a screenshot of the message as well as the IP of your device?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 11:46

RE: RE: Cannot open copy strategies anymore on mobile devices (iPhone / iPad) after latest update

Kaspricci said: 

PanagiotisCharalampous said: 

Hi there,

Thank you for reporting this issue. Please send us some troubleshooting information the next time this happens by tapping seven times on the logo inside the main menu. Please paste a link to this discussion inside the text box before you submit it.

Best regards,
 

Hi. I tapped 7 times on the logo and was asked to submit the information. I did. But there was not text field to enter the link of this discussion. Same for iPad. 

Hi there,

Can you please provide us an approximate time when you sent the troubleshooting?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 11:23

RE: RE: Why is backtesting SO slow after the update? yesterday it was fine before I updated and now my cBot is ultra slow

fahim36912 said: 

PanagiotisCharalampous said: 

Hi there,

Can you share your cBot code so that we can reproduce the issue?

Best regards,

Panagiotis

Is there a way to share this privately?

You can send it to community@ctrader.com


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 10:43

Hi there,

Can you share the code so that we can investigate further?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 10:41

Hi there,

Can you please provide more information about the issue? What do you mean when you say it doesn't work? Can you share the source code as well as steps to reproduce?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 10:37

Hi there,

Can you share your cBot code so that we can reproduce the issue?

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 10:35

Hi there,

It's a known issue and it will be fixed soon.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 10:34

RE: I use spotware

1179259534 said: 

ctrader-open-api python package

I'm testing application using demo account

I can't trade ‘gold’ in spotware either

Hi there,

It's hard to help you if you don't answer my questions.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 07:51

Hi there,

Thank you for reporting this issue. Please send us some troubleshooting information the next time this happens by tapping seven times on the logo inside the main menu. Please paste a link to this discussion inside the text box before you submit it.

Best regards,
 


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 07:49

Hi there,

Make sure it's checked in the Viewing Options.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 07:48

Hi there,

Talk to your broker about this.

Best regards,

Panagiotis


@PanagiotisCharalampous

PanagiotisCharalampous
17 May 2024, 07:48

RE: RE: v5.0.19 Logs: search & filter - No longer possible ??

ncel01 said: 

PanagiotisCharalampous said: 

Hi there,

Search was removed. Now you can open log file as txt files and search there

Best regards,

Panagiotis

 

Panagiotis,

That I've noticed. Is this considered an improvement? 

With the built-in search function only the search results that matched the search were showing. There was also a filter (trading, information, warning, error).

I don't think that such features are available in notepad or similar app.

Regarding backtesting: I see the option of having a built-in search/ filter feature of much higher applicability  than an option to save the log as a .txt file.

In fact, I see both these options as complementary and not as incompatible.

Please note that, among other, it is not very practical to have to open external applications to check backtest data on every backtest iteration.

I can already tell you that, in my case, this will be a huge drawback when backtesting, since I am still expecting thousands of iterations to come.

Hi, 

I will forward your feedback to the product team.

Best regards,

Panagiotis


@PanagiotisCharalampous