New to Algos in cTrade need coding help please

Created at 07 Nov 2024, 06:00
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!
MI

michaelkearney213

Joined 06.11.2022

New to Algos in cTrade need coding help please
07 Nov 2024, 06:00


Hi,

 

I've worked with algos a bit, but i'm no coder, and i'm new to cTrader algo and c#. I used chat GPT and then just seaarched and fixed build errors to create my first simple algo, but it is not trading. I've looked at a sample algo and there about a million more lines of code i dont understand, and probably never will. I'm sure i'm missing setup code. Can someone please help?

 

// Import necessary namespaces
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo.Robots
{
    // Define the bot class
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class EMAcBotPreviousBarWithSLTP : Robot
    {
        // Define the EMAs as indicators
        private ExponentialMovingAverage _ema20;
        private ExponentialMovingAverage _ema50;
        private ExponentialMovingAverage _ema100;

        // Define parameters for the bot
        [Parameter("Volume", DefaultValue = 1, MinValue = 1)]
        public int Volume { get; set; }

        [Parameter("Stop Loss (pips)", DefaultValue = 1.00, MinValue = 0.1)]
        public double StopLoss { get; set; } // Stop loss in pips

        [Parameter("Take Profit (pips)", DefaultValue = 3.00, MinValue = 0.1)]
        public double TakeProfit { get; set; } // Take profit in pips

        // Called when the bot starts
        protected override void OnStart()
        {
            // Initialize the EMAs with the specified periods
            _ema20 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, 20);
            _ema50 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, 50);
            _ema100 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, 100);
        }

        // Called on each new tick (every time a new bar is formed)
        protected override void OnBar()
        {
            // Make sure there are at least two bars (to check the previous one)
            if (Bars.ClosePrices.Count < 2)
                return;

            // Get values of the previous bar (bar at index 1)
            double previousClose = Bars.ClosePrices[1];  // Close of the previous bar
            double previousEma20 = _ema20.Result[1];       // 20-period EMA on the previous bar
            double previousEma50 = _ema50.Result[1];       // 50-period EMA on the previous bar
            double previousEma100 = _ema100.Result[1];     // 100-period EMA on the previous bar

            // Check if the conditions for a buy are met
            if (previousClose > previousEma20 &&    // Previous close > 20 EMA
                previousEma20 > previousEma50 &&    // 20 EMA > 50 EMA
                previousEma50 > previousEma100)     // 50 EMA > 100 EMA
            {
                // If conditions are met, execute a buy order
                if (Positions.Find("BuyPosition") == null) // Prevent opening multiple buy positions 
                {
                    // Calculate the Stop Loss and Take Profit in price units (not pips)
                    double stopLossPrice = Symbol.Bid - StopLoss * Symbol.PipSize;
                    double takeProfitPrice = Symbol.Bid + TakeProfit * Symbol.PipSize;

                    // Open a market buy order with the specified volume, SL and TP
                    ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "BuyPosition", stopLossPrice, takeProfitPrice);
                }
            }
        }
    }
}


@michaelkearney213
Replies

PanagiotisCharalampous
07 Nov 2024, 06:58

Hi there,

If you don't know how to program, it's better to assign the job to a professional.

Best regards,

Panagiotis


@PanagiotisCharalampous