Backtesting Result Differences

Created at 16 Jan 2016, 01:40
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!
JA

jan-vdh

Joined 16.01.2016

Backtesting Result Differences
16 Jan 2016, 01:40


Hello everyone and thanks for your time in advance, there is something that I don't understand

 

I did a backtest for my algo (which you can find beneath this thread) and the results are so different with different start and end dates.

Let me show you what I mean

The parameters ,inputs, timeframe, currency and everything are the same in both charts

Settings used: Tick data from server , 01/01/2014 to 11/30/2014

And this is the second chart. Settings used: Tick data from server, 01/01/2014 to 12/30/2014 (+1 month)

 

I don't understand why there are such big differences. I checked the first backtest and all trades were closed on October 29th. So basically, shouldn't the results be the same until that point? In both charts?

 

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class Grid : Robot
    {
        [Parameter(DefaultValue = 20)]
        public int PipDifference { get; set; }
        [Parameter(DefaultValue = 20)]
        public int maxGrids { get; set; }
        [Parameter(DefaultValue = 20)]
        public int ProfitperGrid { get; set; }

        protected override void OnStart()
        {
            int curGrid = 1;
            double startprice = Symbol.Ask;
            while (curGrid <= maxGrids / 2)
            {
                PlaceStopOrder(TradeType.Buy, Symbol, Symbol.QuantityToVolume(0.01), startprice + curGrid * PipDifference * Symbol.PipSize);
                curGrid++;
            }
            while (curGrid <= maxGrids)
            {
                PlaceStopOrder(TradeType.Sell, Symbol, Symbol.QuantityToVolume(0.01), startprice - (curGrid - maxGrids / 2) * PipDifference * Symbol.PipSize);
                curGrid++;
            }
        }
        void nochmal()
        {
            int curGrid = 1;
            double startprice = Symbol.Ask;
            while (curGrid <= maxGrids / 2)
            {
                PlaceStopOrder(TradeType.Buy, Symbol, Symbol.QuantityToVolume(0.01), startprice + curGrid * PipDifference * Symbol.PipSize);
                curGrid++;
            }
            while (curGrid <= maxGrids)
            {
                PlaceStopOrder(TradeType.Sell, Symbol, Symbol.QuantityToVolume(0.01), startprice - (curGrid - maxGrids / 2) * PipDifference * Symbol.PipSize);
                curGrid++;
            }
        }
        protected override void OnTick()
        {
            if (Positions.Count == maxGrids)
            {
                foreach (var ps in Positions)
                {
                    ClosePosition(ps, Symbol.QuantityToVolume(0.01));

                }
                Print("Lost Grid");
                nochmal();
            }


            if (Symbol.UnrealizedGrossProfit > ProfitperGrid)
            {
                Print("Won Grid");
                foreach (var ps in Positions)
                {
                    ClosePosition(ps, Symbol.QuantityToVolume(0.01));

                }
                foreach (var ps in PendingOrders)
                {
                    CancelPendingOrder(ps);
                }
                nochmal();
            }
        }

        protected override void OnStop()
        {

        }
    }
}

 


@jan-vdh
Replies

jan-vdh
16 Jan 2016, 05:30 ( Updated at: 21 Dec 2023, 09:20 )

Let me show a clear example. Same parameters, same everything. The trades were opened at the same time, but closed differently.

 


@jan-vdh

mindbreaker
16 Jan 2016, 11:10

This post was removed by moderator.

 


@mindbreaker

jan-vdh
16 Jan 2016, 16:14

RE:

This post was removed by moderator.

 


@jan-vdh

danny.weckhuyzen
17 Jan 2016, 11:00

This post was removed by moderator.


@danny.weckhuyzen

danny.weckhuyzen
17 Jan 2016, 11:04

When I look into your code I see that you are using stop-orders. I've discouvered with this platform that the stoploss and takeprofit is not always correctly set when the entry-price is reached. In my code I especially made an extra routine to correct the stoploss-pips and takeprofit-pips after opening of the order. Regards


@danny.weckhuyzen

jan-vdh
17 Jan 2016, 18:29

RE:

danny.weckhuyzen said:

When I look into your code I see that you are using stop-orders. I've discouvered with this platform that the stoploss and takeprofit is not always correctly set when the entry-price is reached. In my code I especially made an extra routine to correct the stoploss-pips and takeprofit-pips after opening of the order. Regards

Thanks for your reply! But I'm not using Take Profits or Stop Losses in my code

 

But yeah currently I do think aswell that the backtesting system is just not accurate.


@jan-vdh