Vai al contenuto

Sessioni di trading

Dal rilascio di cTrader Windows 4.5, l'API include l'interfaccia MarketSessions. Ti consente di ottenere informazioni sulle sessioni di mercato correnti e utilizzare questi dati nei tuoi cBot e indicatori.

Sessioni di trading nello sviluppo di algoritmi

Il tipo MarketSession è un enum con valori che rappresentano varie sessioni di trading (come Singapore o London).

A sua volta, la proprietà MarketSessions è di tipo MarketSession. Per ottenere tutte le sessioni di mercato correnti, usala come segue.

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

Il valore della proprietà MarketSessions dovrebbe corrispondere alle sessioni visualizzate nel campo Sessioni di trading nell'angolo in basso a sinistra dell'interfaccia utente di cTrader.

Image title

Puoi usare il metodo HasFlag per verificare se le sessioni correnti contengono una sessione specifica.

 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;

        }
    }
}

Puoi anche gestire l'evento MarketSessionsChanged per rilevare e reagire a qualsiasi cambiamento nelle sessioni di mercato. La classe MarketSessionChangedEventArgs ha due proprietà, ovvero NewSessions e PreviousSessions, che funzionano come segue:

  • NewSessions contiene tutte le sessioni correnti incluse eventuali sessioni appena iniziate. Il valore di NewSessions è sempre uguale al valore della proprietà MarketSessions di un cBot o indicatore.
  • PreviousSessions contiene anche tutte le sessioni correnti ma contiene anche eventuali sessioni passate appena terminate. Il suo valore è uguale al valore della proprietà MarketSessions di un cBot o indicatore prima che venisse attivato MarketSessionsChanged.

Per uno sguardo più dettagliato su come funzionano NewSessions e PreviousSessions, fai riferimento all'esempio seguente.

 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() { }
    }
}

Nel log dovresti vedere due nuove voci per ogni cambio di sessione. Queste voci ti informeranno su quali erano le sessioni di trading passate e quali sono ora.

Sessioni di trading durante il backtesting

La proprietà MarketSessions funziona sia in ambienti live che di backtesting. Durante il backtesting, questa proprietà conterrà le sessioni relative ai tempi di backtest scelti. In altre parole, puoi usarla per accedere alle sessioni di trading che erano attive durante un periodo di trading storico specifico.