Topics
16 Nov 2023, 07:42
 1170
 1
15 Nov 2023, 10:36
 2069
 16
Replies

Spotware
18 May 2021, 16:17

Hi shoaibmalek02,

The message seems correct so make sure the password is correct as well. Also make sure you are using the correct host and port.

Best Regards,

Panagiotis 

Join us on Telegram


@Spotware

Spotware
21 Apr 2021, 11:39

Hi alebianchi73,

Did you try disabling the firewall and check if the problem goes away?

Best Regards,

Panagiotis 

Join us on Telegram


@Spotware

Spotware
19 Mar 2021, 10:32

Dear Anatoly,

Thanks for posting your issue. Could you please share some screenshots demonstrating this problem?

Best Regards,

Panagiotis 

Join us on Telegram


@Spotware

Spotware
22 Feb 2021, 11:08

Hi Marko,

Thank you, I have deleted your account.

Best Regards,

Panagiotis 

Join us on Telegram


@Spotware

Spotware
28 Dec 2020, 11:09

Hi Christian,

cTrader Deskop 4.0 will come out soon but .Net Core 5.0 migration will not be a part of this release. We plan to release the migration later next year.

 Best Regards,

Panagiotis 

Join us on Telegram  


@Spotware

Spotware
23 Nov 2020, 12:39

Hi Xiao,

The indicator's developer should have a look at his code. In case it is a cTrader issue and not a problem of the indicator's code, he should let us know.

Best Regards,

Panagiotis 

Join us on Telegram


@Spotware

Spotware
10 Feb 2020, 10:30 ( Updated at: 10 Feb 2020, 10:32 )

Dear Trader,

We are happy to introduce the new cTrader Mobile 3.10 release, encompassing a selection of features, specifically requested by you and your fellow traders, including customizable Fibonacci levels, custom color of Drawings & Indicators, as well as a total of eight additional indicators for a superior technical analysis experience.

Customizable Fibonacci Levels

A feature highly sought-after by many of you, the new addition enables a change of Fibonacci levels according to user preference. 

Customizable Colors of Drawings & Indicators

Drawings & Indicators can now take on any custom color of your choosing.

New Order Screen Button

A new button has been added to the order screen, in order for you to avoid scrolling and place orders more quickly.

New Technical Analysis Indicators 

Another eight indicators have joined the mobile experience for an even more complete on-the-go technical analysis. These include:

  • Alligator
  • Average Directional Movement Index Rating
  • Center Of Gravity
  • Cyber Cycle
  • Fractals
  • Hull Moving Average
  • Polynomial Regression Channels
  • Supertrend

Improved Indicators List and Search 

Last but not least, a recently used indicators’ list for fast addition of favorite indicators has been added, and the search algorithm has been improved for short indicator names.  

The version also includes a series of bug fixes and performance improvements.

To try these new features, please download cTrader Mobile 3.10 Beta via Google Play or App Store.


@Spotware

Spotware
04 Dec 2019, 17:13

This feature has been released. Find more information here


@Spotware

Spotware
04 Dec 2019, 17:12

This feature has been released. Find more information here


@Spotware

Spotware
22 Nov 2019, 16:45

Hi Nick,

This happens because you are using the wrong index for the market series. Line 45 should change to the following

   gbpusdDiff[index] = ((gbpStart - gbpusd.Open[gbpusd.OpenTime.GetIndexByExactTime(MarketSeries.OpenTime[index])]) / (gbpStart)) * 100;

Best Regards,

Panagiotis


@Spotware

Spotware
19 Apr 2019, 17:18

Hi Bruce,

Please make sure third party cookies are not disabled.

Best Regards,

Panagiotis 


@Spotware

Spotware
29 Aug 2018, 09:33 ( Updated at: 21 Dec 2023, 09:20 )

How to Become a Strategy Provider

For your convenience, please find below a step by step guide on how to become a Strategy Provider in cTrader Copy.

  1. To become a Strategy Provider, select a trading account from the Accounts list to the left and click it. The Account profile will expand to the right.

  2. Click Become a Strategy Provider to the upper right of the account profile.

  1. The Become Strategy Provider form will pop-up.
     


 

  1. In this form, specify:

    • Strategy Name - a name of your strategy that will be displayed to the other Investors in the Strategies list.

    • Who can see and copy your strategy - Everyone or Traders with Invitation Links only.

    • Minimum Investment - a minimum amount of funds required to be allocated to a Copy Trading Account to start copying. Type the number in the box or use toggles.

    • Add description to your strategy. Use formatting panel to format the text, add images and links. This description will be displayed to the Investors in the Strategy profile.

For Live accounts, you can also set amount of fees:

  • Volume Fee - an amount you will charge your followers per deal (up to 100 USD).

  • Performance Fee - an amount you will charge your followers on Net profit made using a High-Water Mark model (up to 50%).

  • Management Fee - an amount you will charge for managing the followers’ funds (up to 10% of the followers’ equity).

  1. When done, click Become a Strategy Provider to confirm your action.

Now your strategy is being provided to the Investors - you can see the Provider icon in the account preview.

 


@Spotware

Spotware
29 Aug 2018, 09:31 ( Updated at: 21 Dec 2023, 09:20 )

How To Start Copying in cTrader Copy

For your convenience, please find below a step by step guide on how to start copying in cTrader Copy.

  1. To start copying, select a strategy you would like to copy and click Start Copying to the right. Alternatively, click on a strategy and use the Start Copying button to the upper right of the Strategy profile page.

  2. The Start Copying form will pop-up.

  1. In the Start Copying form, select your account from the drop-down and specify the amount of funds to allocate from it by typing or using toggles. If only one account is linked to your cTrader ID, then there will be no alternative option for account selection. Make sure that the allocated funds amount is equal to or higher than the Minimum Investment specified below.

    * Note that if your account leverage is lower then the Strategy Provider’s leverage, then there’s a chance that your margin will not be enough to copy all the trades of this strategy and you may reach the Stop Out earlier than the Strategy Provider.
     

Hover the cursor over the Information icons to learn the detailed information on the Fees and Conditions before you start.
 

  1. When done, click Start Copying.

Now the allocated funds from your account are converted into a Copy Trading Account and you have started copying the strategy. All the open positions of the strategy have opened for you with the current market rates. The Copy Trading Account is now displayed in the Accounts list under the account you have allocated the funds from.

 

 

Click on a Copy Trading Account preview to proceed to the Investment profile or use the Settings icon to the right to manage it.


@Spotware

Spotware
24 Jul 2018, 16:32 ( Updated at: 23 Jan 2024, 13:16 )

The below cBot has been developed to demonstrate some of the new features of [cTrader Automate API 3.01]. The "LinesTrader cBot" allows traders to draw lines on chart which can be used a break out or retracement lines. If the price crosses a Breakout Line then an order towards the crossing direction is placed. If the price crosses a Retracement Line then an order towards the opposite direction of the crossing is placed.

// -------------------------------------------------------------------------------------------------
//
//    This code is a cAlgo API sample.
//
//    This cBot is intended to be used as a sample and does not guarantee any particular outcome or
//    profit of any kind. Use it at your own risk
//
//    The "LinesTrader cBot" allows traders to draw lines on chart which can be used a break out or retracement lines. 
//    If the price crosses a Breakout Line then an order towards the crossing direction is placed.
//    If the price crosses a Retracement Line then an order towards the opposite direction of the crossing is placed
//
// -------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class LinesTrader : Robot
    {
        private const string HowToUseText = "How to use:\nCtrl + Left Mouse Button - Draw Breakout line\nShift + Left Mouse Button - Draw Retracement line";

        private const string HowToUseObjectName = "LinesTraderText";

        [Parameter("Stop Loss Pips", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double StopLossPips { get; set; }

        [Parameter("Take Profit Pips", DefaultValue = 0.0, MinValue = 0.0, Step = 1)]
        public double TakeProfitPips { get; set; }

        [Parameter("Volume", DefaultValue = 1000, MinValue = 0, Step = 1)]
        public double Volume { get; set; }

        [Parameter("Trade", DefaultValue = true)]
        public bool IsTradingAllowed { get; set; }

        [Parameter("Send Email", DefaultValue = false)]
        public bool IsEmailAllowed { get; set; }

        [Parameter("Email address")]
        public string EmailAddress { get; set; }

        [Parameter("Show How To Use", DefaultValue = true)]
        public bool ShowHowToUse { get; set; }

        private SignalLineDrawManager DrawManager { get; set; }
        private SignalLineRepository SignalLineRepository { get; set; }

        protected override void OnStart()
        {
            DrawManager = new SignalLineDrawManager(Chart);
            SignalLineRepository = new SignalLineRepository(Chart);

            if (ShowHowToUse)
            {
                ShowHowToUseText();
                Chart.MouseDown += OnChartMouseDown;
            }
        }

        protected override void OnTick()
        {
            var lastBarIndex = MarketSeries.Close.Count - 1;
            foreach (var signalLine in SignalLineRepository.GetLines())
                if (signalLine.CanExecute(Symbol.Bid, lastBarIndex))
                {
                    signalLine.MarkAsExecuted();
                    var message = string.Format("{0} Signal line {1}{2} was executed on {3}", Time, signalLine.TradeType, signalLine.SignalType, Symbol.Code);
                    Print(message);

                    if (IsTradingAllowed)
                    {
                        ExecuteMarketOrder(signalLine.TradeType, Symbol, Volume, "LinesTrader cBot", StopLossPips, TakeProfitPips);
                    }
                    if (IsEmailAllowed)
                    {
                        Notifications.SendEmail(EmailAddress, EmailAddress, "LinesTrader Alert", message);
                    }
                }
        }

        protected override void OnStop()
        {
            SignalLineRepository.Dispose();
            DrawManager.Dispose();
        }

        private void OnChartMouseDown(ChartMouseEventArgs args)
        {
            Chart.MouseDown -= OnChartMouseDown;
            HideHowToUseText();
        }

        private void ShowHowToUseText()
        {
            Chart.DrawStaticText(HowToUseObjectName, HowToUseText, VerticalAlignment.Center, HorizontalAlignment.Center, Chart.ColorSettings.ForegroundColor);
        }

        private void HideHowToUseText()
        {
            Chart.RemoveObject(HowToUseObjectName);
        }
    }

    public class SignalLineDrawManager : IDisposable
    {
        private readonly Chart _chart;
        private readonly Color _foregroundColor;
        private ProtoSignalLine _currentProtoSignalLine;
        private const string StatusTextName = "ProtoSignalLineStatus";



        public SignalLineDrawManager(Chart chart)
        {
            _chart = chart;
            _chart.DragStart += OnChartDragStart;
            _chart.DragEnd += OnChartDragEnd;
            _chart.Drag += OnChartDrag;
        }

        private void OnChartDragStart(ChartDragEventArgs args)
        {
            if (args.ChartArea != args.Chart)
                return;

            var signalType = GetSignalType(args);
            if (signalType.HasValue)
            {
                _chart.IsScrollingEnabled = false;
                _currentProtoSignalLine = new ProtoSignalLine(_chart, signalType, args.TimeValue, args.YValue);
                UpdateStatus();
            }
            else
            {
                _currentProtoSignalLine = null;
            }
        }

        private void OnChartDragEnd(ChartDragEventArgs args)
        {
            if (_currentProtoSignalLine != null)
            {
                _currentProtoSignalLine.Complete(args.TimeValue, args.YValue);
                _currentProtoSignalLine = null;

                _chart.IsScrollingEnabled = true;
                _chart.RemoveObject(StatusTextName);
            }
        }

        private void OnChartDrag(ChartDragEventArgs args)
        {
            if (_currentProtoSignalLine != null)
            {
                _currentProtoSignalLine.Update(args.TimeValue, args.YValue);
                UpdateStatus();
            }
        }

        private void UpdateStatus()
        {
            var text = string.Format("Creating {0} line", _currentProtoSignalLine.LineLabel);
            _chart.DrawStaticText(StatusTextName, text, VerticalAlignment.Top, HorizontalAlignment.Left, _chart.ColorSettings.ForegroundColor);
        }

        private SignalType? GetSignalType(ChartDragEventArgs args)
        {
            if (args.CtrlKey && !args.ShiftKey)
                return SignalType.Breakout;
            if (!args.CtrlKey && args.ShiftKey)
                return SignalType.Retracement;

            return null;
        }

        public void Dispose()
        {
            _chart.DragStart -= OnChartDragStart;
            _chart.DragEnd -= OnChartDragEnd;
            _chart.Drag -= OnChartDrag;
        }
    }

    public class SignalLineRepository : IDisposable
    {
        private readonly Chart _chart;
        private readonly Dictionary<string, SignalLine> _signalLines;

        public SignalLineRepository(Chart chart)
        {
            _chart = chart;
            _signalLines = new Dictionary<string, SignalLine>();

            foreach (var chartTrendLine in chart.FindAllObjects<ChartTrendLine>())
                TryAddSignalLine(chartTrendLine);

            _chart.ObjectAdded += OnChartObjectAdded;
            _chart.ObjectRemoved += OnChartObjectRemoved;
            _chart.ObjectUpdated += OnChartObjectUpdated;
        }

        public IEnumerable<SignalLine> GetLines()
        {
            return _signalLines.Values;
        }

        private void TryAddSignalLine(ChartObject chartObject)
        {
            var chartTrendLine = chartObject as ChartTrendLine;
            if (chartTrendLine != null && IsSignalLine(chartTrendLine))
                _signalLines.Add(chartTrendLine.Name, CreateSignalLine(chartTrendLine));
        }

        private void TryRemoveSignalLine(ChartObject chartObject)
        {
            if (_signalLines.ContainsKey(chartObject.Name))
                _signalLines.Remove(chartObject.Name);
        }

        private void OnChartObjectAdded(ChartObjectAddedEventArgs args)
        {
            if (args.Area != args.Chart)
                return;

            TryAddSignalLine(args.ChartObject);
        }

        private void OnChartObjectUpdated(ChartObjectUpdatedEventArgs args)
        {
            if (args.Area != args.Chart)
                return;

            TryRemoveSignalLine(args.ChartObject);
            TryAddSignalLine(args.ChartObject);
        }

        private void OnChartObjectRemoved(ChartObjectRemovedEventArgs args)
        {
            if (args.Area != args.Chart)
                return;

            TryRemoveSignalLine(args.ChartObject);
        }

        private SignalLine CreateSignalLine(ChartTrendLine chartTrendLine)
        {
            var signalType = GetLineSignalType(chartTrendLine);
            var tradeType = GetLineTradeType(chartTrendLine);
            var signalLine = new SignalLine(chartTrendLine, signalType, tradeType);
            return signalLine;
        }

        private bool IsSignalLine(ChartTrendLine line)
        {
            return SignalLineLabels.AllLables.Contains(line.Comment);
        }

        private SignalType GetLineSignalType(ChartTrendLine line)
        {
            var comment = line.Comment;
            if (comment == SignalLineLabels.BuyBreakoutLabel || comment == SignalLineLabels.SellBreakoutLabel)
                return SignalType.Breakout;
            if (comment == SignalLineLabels.BuyRetraceLabel || comment == SignalLineLabels.SellRetraceLabel)
                return SignalType.Retracement;
            throw new ArgumentException();
        }

        private TradeType GetLineTradeType(ChartTrendLine line)
        {
            var comment = line.Comment;
            if (comment == SignalLineLabels.BuyBreakoutLabel || comment == SignalLineLabels.BuyRetraceLabel)
                return TradeType.Buy;
            if (comment == SignalLineLabels.SellBreakoutLabel || comment == SignalLineLabels.SellRetraceLabel)
                return TradeType.Sell;
            throw new ArgumentException();
        }

        public void Dispose()
        {
            _chart.ObjectAdded -= OnChartObjectAdded;
            _chart.ObjectRemoved -= OnChartObjectRemoved;
            _chart.ObjectUpdated -= OnChartObjectUpdated;
        }
    }

    public class ProtoSignalLine
    {

        private static readonly Color BuyLineColor = Color.Green;
        private static readonly Color SellLineColor = Color.Red;

        private readonly Chart _chart;
        private readonly ChartTrendLine _line;
        private readonly SignalType? _signalType;

        public ProtoSignalLine(Chart chart, SignalType? signalType, DateTime startTimeValue, double startYValue)
        {
            _chart = chart;
            _signalType = signalType;

            _line = _chart.DrawTrendLine(string.Format("LinesTrader {0:N}", Guid.NewGuid()), startTimeValue, startYValue, startTimeValue, startYValue, LineColor);

            _line.ExtendToInfinity = true;
            _line.Thickness = 2;
            _line.IsInteractive = true;
        }

        private bool IsPriceAboveLine
        {
            get { return _line != null && _chart.Symbol.Bid >= _line.CalculateY(_chart.MarketSeries.Close.Count - 1); }
        }

        private TradeType LineTradeType
        {
            get { return _signalType == SignalType.Breakout ? (IsPriceAboveLine ? TradeType.Sell : TradeType.Buy) : (IsPriceAboveLine ? TradeType.Buy : TradeType.Sell); }
        }

        private Color LineColor
        {
            get { return LineTradeType == TradeType.Buy ? BuyLineColor : SellLineColor; }
        }

        public string LineLabel
        {
            get { return _signalType == SignalType.Breakout ? (LineTradeType == TradeType.Buy ? SignalLineLabels.BuyBreakoutLabel : SignalLineLabels.SellBreakoutLabel) : (LineTradeType == TradeType.Buy ? SignalLineLabels.BuyRetraceLabel : SignalLineLabels.SellRetraceLabel); }
        }

        private bool CanComplete
        {
            get { return _line.Time1 != _line.Time2 || Math.Abs(_line.Y1 - _line.Y2) >= _chart.Symbol.PipValue; }
        }

        public void Update(DateTime timeValue, double yValue)
        {
            _line.Time2 = timeValue;
            _line.Y2 = yValue;
            _line.Color = LineColor;
        }

        public void Complete(DateTime timeValue, double yValue)
        {
            Update(timeValue, yValue);

            if (CanComplete)
            {
                _line.Comment = LineLabel;
                _line.IsInteractive = true;
            }
            else
            {
                _chart.RemoveObject(_line.Name);
            }
        }
    }

    public class SignalLine
    {
        public TradeType TradeType { get; private set; }
        public SignalType SignalType { get; private set; }

        private readonly ChartTrendLine _chartTrendLine;



        public SignalLine(ChartTrendLine chartTrendLine, SignalType signalType, TradeType tradeType)
        {
            _chartTrendLine = chartTrendLine;
            SignalType = signalType;
            TradeType = tradeType;
        }

        public void MarkAsExecuted()
        {
            _chartTrendLine.Thickness = 1;
            _chartTrendLine.Color = Color.FromArgb(150, _chartTrendLine.Color);
        }

        public bool CanExecute(double price, int barIndex)
        {
            if (_chartTrendLine.Thickness <= 1)
                return false;

            var lineValue = _chartTrendLine.CalculateY(barIndex);

            switch (SignalType)
            {
                case SignalType.Breakout:
                    return CanExecuteForBreakout(price, lineValue);
                case SignalType.Retracement:
                    return CanExecuteForRetrace(price, lineValue);
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }

        private bool CanExecuteForBreakout(double price, double lineValue)
        {
            return TradeType == TradeType.Buy && price > lineValue || TradeType == TradeType.Sell && price < lineValue;
        }

        private bool CanExecuteForRetrace(double price, double lineValue)
        {
            return TradeType == TradeType.Buy && price <= lineValue || TradeType == TradeType.Sell && price >= lineValue;
        }
    }

    public enum SignalType
    {
        Breakout,
        Retracement
    }

    public static class SignalLineLabels
    {
        public const string BuyBreakoutLabel = "BuyBreakout";
        public const string SellBreakoutLabel = "SellBreakout";
        public const string BuyRetraceLabel = "BuyRetracement";
        public const string SellRetraceLabel = "SellRetracement";

        public static readonly string[] AllLables = 
        {
            BuyBreakoutLabel,
            SellBreakoutLabel,
            BuyRetraceLabel,
            SellRetraceLabel
        };
    }
}

@Spotware

Spotware
31 Jan 2018, 12:50

Hi trend_meanreversion,

Thanks for letting us know. Our team is already looking at this. Could you also please tell us your browser/platform and/or mobile device you use?

Best Regards,

 


@Spotware

Spotware
25 Jan 2018, 11:16

Dear Traders,

We would like to inform you that the respective email notifications are now enabled again.

Best Regards,

cTrader Team


@Spotware

Spotware
18 Dec 2017, 12:27

Hi Ales,

We have a good explanation on the types of pending orders and when to use them here.

Best Regards,

Panagiotis


@Spotware

Spotware
13 Dec 2017, 16:08

Hello,

ClOrdID could be gotten from Order Status Request (MsgType(35)=H) and Execution Report (MsgType(35)=8).

Hope it helps.

cTrader Team


@Spotware

Spotware
13 Dec 2017, 15:51

Hello Daio.

We understand you perfectly! We suggest you post this in our jobs section too - /jobs/

Thanks,

cTrader Team


@Spotware

Spotware
13 Dec 2017, 15:49

Hi Tradingu, 

What symbol are you looking at? And which Broker's cTrader are you looking at? 

Thank You.


@Spotware