OnPositionClosed event is triggered multiple time while backtesting a cBot

Created at 04 Sep 2020, 12:51
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!
xabbu's avatar

xabbu

Joined 20.07.2020

OnPositionClosed event is triggered multiple time while backtesting a cBot
04 Sep 2020, 12:51


Dear Panagiotis,

I need some help, if possible:

while programming a cBot, I use the following part of code:

 

private void OnPositionsClosed(PositionClosedEventArgs args)
        {

            if (args.Reason == PositionCloseReason.TakeProfit)
            {
                Print("Take Profit eingetreten");
                foreach (var _pos in Positions)
                {
                    ModifyPosition(_pos, _pos.EntryPrice, _pos.TakeProfit);
                }
            }

            if (args.Reason == PositionCloseReason.StopLoss)
            {
                Print("StopLoss eingetreten");

            }
        }

 

But if an event like TakeProfit or StopLoss has occurred, the statement is printed or executed multiple time, as show in the screenshot:

 

This happens while I'm on visual backtesting...

Kindest regards,


@xabbu
Replies

PanagiotisCharalampous
04 Sep 2020, 12:56

Hi xabbu,

Please provide us with the complete cBot code.

Best Regards,

Panagiotis 

Join us on Telegram

 


@PanagiotisCharalampous

xabbu
04 Sep 2020, 13:02

RE:

here it is, and many thanks again for your always ultrafast responses:

 

using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
using System.Threading;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class QuestionToPanagiotis : Robot
    {

        public double _initialTradeVolume { get; set; }


        
        private double getATRPips()
        {

            return _atr.Result.LastValue / Symbol.PipSize;
        }
    }
}

 


@xabbu

xabbu
07 Sep 2020, 10:56

Dear Panagiotis,

I don't want to be to pushy, did you have any idea for me resolving this issue / behavior so that I can move on with my cBot? Because the event is triggered multiple time, any statement I would like to be executed is also executed multiple time...

Kindest regards and many thanks for your support


@xabbu

PanagiotisCharalampous
07 Sep 2020, 11:11

Hi xabbu,

Your problem is here

        protected override void OnBar()
        {

            Positions.Closed += OnPositionsClosed;

On each bar you add a new event handler on the event. This is why the method is executed multiple times. You should do this only once in the OnStart() method

Best Regards,

Panagiotis 

Join us on Telegram


@PanagiotisCharalampous

xabbu
07 Sep 2020, 11:35

RE:

great, thank you very much Panagiotis, now it works finally - have a great week

 


@xabbu