Saltar a contenido

Sesiones de operación

Desde el lanzamiento de cTrader Windows 4.5, la API incluye la interfaz MarketSessions. Le permite obtener información sobre las sesiones de mercado actuales y utilizar estos datos en sus cBots e indicadores.

Sesiones de operación en el desarrollo de algoritmos

El tipo MarketSession es un enum con valores que representan varias sesiones de operación (como Singapore o London).

A su vez, la propiedad MarketSessions es del tipo MarketSession. Para obtener todas las sesiones de mercado actuales, utilícela de la siguiente manera.

1
    Print("Current Sessions: {0}", MarketSessions); 

El valor de la propiedad MarketSessions debe coincidir con las sesiones que se muestran en el campo Sesiones de operación en la esquina inferior izquierda de la interfaz de usuario de cTrader.

Image title

Puede utilizar el método HasFlag para comprobar si las sesiones actuales contienen una sesión específica.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class MarketSessionsTest : Robot
    {
        [Parameter("Working Session", DefaultValue = MarketSession.London)]
        public MarketSession WorkingSession {get; set;}

        protected override void OnTick()
        {

            MarketSession exampleSession = MarketSession.London;

            if (MarketSessions.HasFlag(exampleSession))
              {

                // Insert your preferred method logic here.

              }
                return;

        }
    }
}

También puede manejar el evento MarketSessionsChanged para detectar y reaccionar a cualquier cambio en las sesiones de mercado. La clase MarketSessionChangedEventArgs tiene dos propiedades, a saber, NewSessions y PreviousSessions, que funcionan de la siguiente manera:

  • NewSessions contiene todas las sesiones actuales, incluidas las sesiones que acaban de comenzar. El valor de NewSessions siempre es igual al valor de la propiedad MarketSessions de un cBot o indicador.
  • PreviousSessions también contiene todas las sesiones actuales, pero también contiene las sesiones pasadas que acaban de finalizar. Su valor es igual al valor de la propiedad MarketSessions de un cBot o indicador antes de que se activara MarketSessionsChanged.

Para una mirada más detallada sobre cómo funcionan NewSessions y PreviousSessions, consulte el ejemplo a continuación.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class NewcBot : Robot
    {
        protected override void OnStart()
        {
            MarketSessionsChanged += OnMarketSessionsChanged;
            Print($"Starting sessions: {this.MarketSessions}");
        }

        private void OnMarketSessionsChanged(MarketSessionChangedEventArgs obj)
        {
            Print($"Session(s) changed, previous sessions: {obj.PreviousSessions}");
            Print($"Sessions(s) changed, current sessions: {obj.NewSessions}");
        }

        protected override void OnTick() { }

        protected override void OnStop() { }
    }
}

En el registro, debería ver dos nuevas entradas para cada cambio de sesión. Estas entradas le informarán cuáles eran las sesiones de operación pasadas y cuáles son ahora.

Sesiones de operación durante el backtesting

La propiedad MarketSessions funciona tanto en entornos en vivo como de backtesting. Durante el backtesting, esta propiedad contendrá las sesiones relativas a los tiempos de backtesting elegidos. En otras palabras, puede utilizarla para acceder a las sesiones de operación que estaban activas durante un período de operación histórico específico.