Start trading

how to make cBot opens multiple positions to overcome the broker maximum position size limit of 100 indices?

Created at 01 Jul 2022, 10:07
cTrader Reddit community
cTrader Discord
RA

RadoWay

Joined 07.06.2022

how to make cBot opens multiple positions to overcome the broker maximum position size limit of 100 indices?
01 Jul 2022, 10:07


how to make this cBot opens multiple positions to overcome the broker maximum position size limit of 100 indices?

here is the code:

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
    {
        #region Parameters
        [Parameter("Volume", DefaultValue = 100)]
        public double Volume { get; set; }

        [Parameter("Period", DefaultValue = 14, Group = "Simple Moving Average")]
        public int SMAPeriod { get; set; }

        [Parameter("Period", DefaultValue = 14, Group = "Relative Strength Index")]
        public int RSIPeriod { get; set; }
        #endregion

        #region Private Variables
        RelativeStrengthIndex _rsi;
        SimpleMovingAverage _sma;
        #endregion

        #region Methods
        protected override void OnStart()
        {
            // Put your initialization logic here
            _rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, RSIPeriod);
            _sma = Indicators.SimpleMovingAverage(Bars.ClosePrices, SMAPeriod);
        }

        protected override void OnBar()
        {
            // Put your core logic here
            if (Positions.Count(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Buy) == 0 && Bars.ClosePrices.Last(1) > _sma.Result.Last(1) && Bars.OpenPrices.Last(1) < _sma.Result.Last(1))
            {
                foreach (var position in Positions.Where(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Sell))
                    position.Close();

                ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "");
            }

            if (Positions.Count(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Sell) == 0 && Bars.ClosePrices.Last(1) < _sma.Result.Last(1) && Bars.OpenPrices.Last(1) > _sma.Result.Last(1))
            {
                foreach (var position in Positions.Where(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Buy))
                    position.Close();

                ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "");
            }

            if (_rsi.Result.Last(1) < 70)
            {
                foreach (var position in Positions.Where(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Buy))
                    position.Close();
            }

            if (_rsi.Result.Last(1) > 30)
            {
                foreach (var position in Positions.Where(p => p.SymbolName == SymbolName && p.TradeType == TradeType.Sell))
                    position.Close();
            }
        }

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


@RadoWay