Creating a cBot that compounds the investment amount

Created at 18 Sep 2018, 21:14
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!
WI

willd7781

Joined 18.09.2018

Creating a cBot that compounds the investment amount
18 Sep 2018, 21:14


Im trying to code a cBot that insead of having a parameter that simply allows me to set the amount of units that i wish to buy i would like the code to get the account ballance and the equity. however having limmited coding expericance, especiallly when coding a cBot, i dont know how to get this data from cTrader. I assume that it is stored in an API. I though maybe loaing the API "using System;"  I would find it. If anyone could tell me how to access account data such as this it would be much appricated. 

Also as the API's that cAlgo has added to c# are very specific and is there a guide anywhere to learn how to code cBots? 

 

Thank you,

Will


@willd7781
Replies

PanagiotisCharalampous
19 Sep 2018, 11:09

Hi Will,

Thanks for posting in our forum. You can get balance and equity information from Account.Balance and Account.Equity properties.

Best Regards,

Panagiotis


@PanagiotisCharalampous

Jonkey
26 Sep 2018, 14:07

Hope this helps, its a good starting point for that sort of a robot...

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
    {
        // ######################################################################################################## PARAMETERS ##########
        [Parameter("Vol as %", DefaultValue = false)]
        public bool volPercentBool { get; set; }

        [Parameter("Vol %", DefaultValue = 1, MinValue = 1, Step = 1)]
        public int volPercent { get; set; }

        [Parameter("Vol Qty", DefaultValue = 50000, MinValue = 1000, Step = 1000)]
        public int volQty { get; set; }

        [Parameter("StopLoss Pips", DefaultValue = 10.0, Step = 0.1)]
        public double slPips { get; set; }

        [Parameter("Allowable Slippage", DefaultValue = 0.5, MinValue = 0.5, Step = 0.1)]
        public double marketRangePips { get; set; }

        // ########################################################################################################### VARIABLES ##########

        private int volume;

        // ################################################################################################## CALCULATE VOLUME ##########
        private int CalculateVolume(double stopLossPips)
        {

            int result;
            switch (volPercentBool)
            {
                case true:
                    double costPerPip = (double)((int)(Symbol.PipValue * 10000000)) / 100;
                    double posSizeForRisk = (Account.Balance * volPercent / 100) / (stopLossPips * costPerPip);
                    double posSizeToVol = (Math.Round(posSizeForRisk, 2) * 100000);
                    Print("costperppip = {0}, posSizeFoprRisk = {1}, posSizeLotsToVol = {2}", costPerPip, posSizeForRisk, posSizeToVol);
                    result = (int)Symbol.NormalizeVolumeInUnits(posSizeToVol, RoundingMode.ToNearest);
                    result = result > 150000 ? 150000 : result;
                    Print("{0}% of Account Balance used for Volume! Volume equals {1}", volPercent, result);
                    break;
                default:
                    result = volQty;
                    Print("Volume Quantity Used! Volume equals {0}", result);
                    break;
            }
            return result;
        }

        // ########################################################################################################### ON START ##########
        protected override void OnStart()
        {
            // Put your initialization logic here
            volume = CalculateVolume(slPips);
        }

        protected override void OnTick()
        {
            // Put your core logic here
        }

        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }
    }
}

 


@Jonkey