Vai al contenuto

Gestione programmatica degli indicatori tecnici

I trader spesso si affidano a una combinazione di trading manuale e assistenti di trading automatizzati, in particolare indicatori personalizzati. Tuttavia, in molti casi, questi assistenti sono completamente inconsapevoli l'uno dell'altro e non possono reagire alle azioni e agli output reciproci.

Fortunatamente cTrader offre un mezzo conveniente per gestire gli indicatori dei grafici in modo programmatico. Utilizzando questa funzionalità puoi creare assistenti dinamici che leggono i dati dagli indicatori che gli utenti aggiungono a un grafico.

Puoi anche fare in modo che un algoritmo aggiunga, rimuova o modifichi le impostazioni degli indicatori in base a determinate condizioni, permettendoti di offrire più valore ai tuoi utenti e aprire nuove strade per la monetizzazione.

Questa guida API spiega come puoi gestire gli indicatori dei grafici in modo programmatico in diverse condizioni.

Gestione degli indicatori dei grafici in un minuto!

  • Gestendo gli indicatori dei grafici in modo programmatico puoi regolare le impostazioni degli indicatori (ad esempio lo spessore della linea) a seconda di determinate condizioni.
  • I cBot possono accedere a qualsiasi indicatore che alleghi manualmente a un grafico, leggere i loro dati e fare trading di conseguenza.
  • I tuoi algoritmi possono aggiungere indicatori ai grafici o rimuoverli automaticamente, facendoti risparmiare tempo.
  • La gestione programmatica degli indicatori dei grafici è possibile per tutti gli indicatori personalizzati.

Aggiungere e rimuovere indicatori in modo programmatico

Puoi aggiungere facilmente qualsiasi indicatore a cui hai accesso chiamando il seguente metodo.

1
ChartIndicator ChartIndicators.Add(string name, params object[] parameterValues)

Il metodo prende il nome dell'indicatore come primo parametro e poi prende tutti i parametri di quell'indicatore in sequenza (ad esempio, "Simple Moving Average", "High", 25).

Nota

Il metodo accetterà il nome di qualsiasi indicatore a cui hai accesso.

Nota

Qualsiasi parametro DataSeries deve essere specificato come stringa negli argomenti del metodo.

Nota

Se alcuni parametri non sono specificati, il metodo utilizzerà i valori predefiniti. Se alcuni parametri non sono validi, il metodo invocherà il gestore OnException per il tuo algoritmo.

Dopo l'esecuzione del metodo, l'indicatore richiesto verrà immediatamente aggiunto a un grafico e potrai gestirlo utilizzando il valore restituito dal metodo. Ad esempio, puoi rimuoverlo chiamando il metodo ChartIndicators.Remove().

1
2
3
var newIndicator = ChartIndicators.Add("Simple Moving Average", "High", 25);
...
ChartIndicators.Remove(newIndicator);

Ecco un semplice cBot che utilizza entrambi i metodi per aggiungere un indicatore Bollinger Bands personalizzato a un grafico ogni volta che il valore Average True Range (ATR) supera una soglia specifica. Se il valore ATR scende al di sotto della soglia, l'indicatore viene rimosso.

 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
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class ChartIndicatorsTest : Robot
    {

        private AverageTrueRange _aTR;
        private ChartIndicator _customBollingerBands;

        protected override void OnStart()
        {
            _aTR = Indicators.AverageTrueRange(14, MovingAverageType.Exponential);
            ChartIndicators.Add("Average True Range");
        }

        protected override void OnBar()
        {
            if (_aTR.Result[Bars.Count - 1] >= 0.0002) 
            {
                _bollingerBands = ChartIndicators.Add("Custom BB");
            } else if (_bollingerBands != null)
            {
                ChartIndicators.Remove(_bollingerBands);
            }
        }

    }
}

Modificare le impostazioni degli indicatori

L'interfaccia ChartIndicator fornisce accesso diretto a tutte le principali impostazioni degli indicatori tramite le seguenti proprietà:

  • ChartIndicator.Type, che ottiene il tipo di un indicatore.
  • ChartIndicator.Parameters, che ottiene un elenco di tutti i parametri dell'indicatore.
  • Lines, che ottiene un elenco di tutte le linee prodotte da un indicatore.

Poiché gli indicatori sono aiuti visivi, puoi migliorarli modificando le loro impostazioni a seconda delle condizioni di mercato. L'indicatore seguente cerca di fare esattamente questo.

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Indicator(AccessRights = AccessRights.None, IsOverlay = true)]
    public class ColourMovingAverage : Indicator
    {

        private MovingAverage _fastMA;
        private ChartIndicator _chartMA;
        private const int __lineThickness = 4;


        protected override void Initialize()
        {
            _fastMA = Indicators.MovingAverage(Bars.OpenPrices, 10, MovingAverageType.Exponential);
            _chartMA = ChartIndicators.Add("Exponential Moving Average", "Open", 10);
        }

        public override void Calculate(int index)
        {
            var line = _chartMA.Lines[0];

            if (Symbol.Bid > _fastMA.Result[index]) 
            {
                line.Color = Color.Green;
                line.Thickness = __lineThickness;
            } else 
            {
                line.Color = Color.Red;
                line.Thickness = __lineThickness;
            }
        }
    }
}

A seconda che il prezzo corrente di un simbolo sia sopra o sotto l'Exponential Moving Average, la linea dell'indicatore cambia colore e spessore. In alcuni casi (ad esempio, reagire rapidamente ai trend in cambiamento), un aiuto visivo aggiuntivo può fare tutta la differenza.

Gestire eventi aggiuntivi

L'interfaccia ChartsIndicators espone anche diversi eventi che puoi gestire per gestire in modo programmatico gli indicatori dei grafici:

  • IndicatorAdded, che viene attivato ogni volta che un nuovo indicatore viene aggiunto a un grafico.
  • IndicatorRemoved, che viene attivato ogni volta che un indicatore viene rimosso da un grafico.
  • IndicatorModified, che viene attivato ogni volta che le impostazioni di un indicatore vengono regolate.

Questi eventi sono preziosi per gli sviluppatori di plugin. Tramite i plugin puoi creare nuovi elementi dell'interfaccia utente di cTrader che modificano i propri contenuti a seconda che un utente aggiunga, rimuova o modifichi gli indicatori.

Gestione degli indicatori in diverse modalità

Ecco come funziona la gestione degli indicatori nelle diverse modalità e strumenti di cTrader.

Modalità/strumento Come funziona
Backtesting non visivo Tutti gli indicatori aggiunti tramite ChartIndicators saranno visualizzati sul grafico al termine del backtesting.
Backtesting visivo e Market Replay Tutto funziona in tempo reale come previsto.
Ottimizzazione Tutte le operazioni funzioneranno ma non verranno apportate modifiche al grafico al termine del backtesting.
cTrader CLI Tutte le operazioni funzionano come previsto ma non vengono apportate modifiche ai grafici.

La gestione programmatica degli indicatori del grafico è ideale per qualsiasi sviluppatore che desideri offrire algoritmi che migliorino o semplifichino il lavoro con gli indicatori. Sfruttando questa funzionalità, puoi fornire prodotti di alta qualità e di valore ai tuoi utenti.

Image title