Skip to content

Plugin.Optimization

property · Plugin · cAlgo.API Since 5.9

DesktopCLICloud

Provides access to cBot parameter optimization.

Environment behaviour

CLI — not supported. Plugins cannot run in the CLI: ctrader-cli runs cBots only.

Cloud — not supported. Plugins cannot run in the cloud: it runs cBots only.

Definition

public Optimization Optimization {get;}
api.Optimization: Optimization

Returns Optimization

Examples

using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    public partial class Test : Plugin
    {
        protected override void OnStart()
        {
            if (AlgoRegistry.Get("Sample Trend cBot", AlgoKind.Robot) is not RobotType robotType)
                return;

            var settings = new OptimizationSettings(
                new DateTime(2025, 1, 1), new DateTime(2025, 2, 1), 100000,
                new[] { new OptimizationCriterion(OptimizationCriterionType.NetProfit, OptimizationCriterionDirection.Maximize) })
            {
                DataMode = BacktestingDataMode.M1,
                Method = OptimizationMethod.Grid
            };

            var process = Optimization.Start(
                robotType, "EURUSD", TimeFrame.Hour, settings,
                new OptimizationIntegerParameter("SlowPeriods", min: 5, max: 50, step: 5));

            process.Completed += args => Print($"Optimization completed. Best pass: {args.BestPass?.Id}");
        }
    }
}
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *
from System import DateTime

class Test():
    def on_start(self):
        algoType = api.AlgoRegistry.Get("Sample Trend cBot", AlgoKind.Robot)
        if algoType is None:
            return

        robotType = RobotType(algoType)

        criteria = [OptimizationCriterion(OptimizationCriterionType.NetProfit, OptimizationCriterionDirection.Maximize)]
        settings = OptimizationSettings(DateTime(2025, 1, 1), DateTime(2025, 2, 1), 100000, criteria)
        settings.DataMode = BacktestingDataMode.M1
        settings.Method = OptimizationMethod.Grid

        process = api.Optimization.Start(
            robotType, "EURUSD", TimeFrame.Hour, settings,
            OptimizationIntegerParameter("SlowPeriods", 5, 50, 5))

        process.Completed += lambda args: print(f"Optimization completed")
{
  "AccessRights": "None"
}