Vai al contenuto

Tipi di parametri in cTrader Algo

In questo articolo e nel video corrispondente dimostreremo come puoi dichiarare e usare parametri personalizzabili nei tuoi cBot e indicatori. Svilupperemo un semplice indicatore e ti mostreremo come configurare i parametri dall'interfaccia utente di cTrader. Spiegheremo anche che tipo di parametri puoi usare in un cBot o indicatore cTrader e illustreremo come vengono dichiarati e utilizzati nel tuo codice.

Parametri personalizzabili

I parametri personalizzabili sono valori configurabili che possono essere impostati quando si aggiunge, si avvia o si utilizza un algoritmo. Ti consentono, insieme ad altri utenti, di personalizzare il comportamento di cBot, indicatori e plugin senza modificare il codice sorgente.

Usare i parametri in cBot, indicatori e plugin

  • Per i cBot, puoi configurare variabili o impostazioni che influenzano l'esecuzione, come i livelli di stop loss e take profit.
  • Per gli indicatori, puoi configurare variabili che influenzano gli output dell'indicatore, come i periodi considerati o la fonte di dati da utilizzare.
  • Per i plugin puoi utilizzare variabili di configurazione, come opzioni dell'interfaccia utente o chiavi API, che determinano il modo in cui il plugin interagisce con l'interfaccia o con i servizi esterni.

Come spiegato in precedenza, cTrader supporta i seguenti tipi di parametri:

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color
  • DateTime
  • DateOnly
  • TimeSpan
  • Symbol
  • Symbol[] (multi-symbol)
  • Enum[] (multi-enum)
  • TimeFrame[] (multi-period)

Nota

Gli algoritmi Python utilizzano parametri personalizzabili dichiarati nei loro file .cs.

Creare un indicatore semplice con parametri

Per dimostrare come puoi utilizzare i parametri negli indicatori personalizzati, creeremo un nuovo indicatore e lo chiameremo Standard Deviation.

Per calcolare la deviazione standard dobbiamo prima calcolare la media mobile del prezzo. Successivamente, dichiareremo i parametri necessari per un indicatore di media mobile partendo dal periodo della media mobile.

1
public int MaPeriod { get; set; }

Qualsiasi proprietà pubblica che abbia uno dei tipi supportati può diventare un parametro dell'indicatore. Per trasformare la nostra proprietà MaPeriod in un parametro, tutto ciò che dobbiamo fare è aggiungere la dichiarazione richiesta.

1
2
[Parameter("MA Period")]
public int MaPeriod { get; set; }

L'attributo Parameter indica a cTrader di presentare questa proprietà come parametro nel pannello dei parametri dell'indicatore utilizzando il nome definito ("MA Period").

Come mostrato di seguito, l'attributo Parameter consente anche di definire alcune proprietà del parametro come il nome visualizzato, il valore predefinito, il gruppo in cui questo parametro verrà inserito, i valori massimo e minimo, nonché il passo con cui il parametro cambierà quando vengono premute le frecce su e giù (solo per i valori numerici).

1
2
[Parameter("SMA Period", DefaultValue = 14, Group = "MA", MaxValue = 100, MinValue = 1, Step = 1)]
public int MaPeriod { get; set; }

Adesso aggiungeremo il resto dei parametri necessari per un indicatore di media mobile. Il parametro MaType ci aiuterà a determinare il tipo di media mobile. È un enum che apparirà come menu a discesa nell'interfaccia utente di cTrader.

1
2
[Parameter("MA Type", Group = "MA")]
public MovingAverageType MaType { get; set; }

Il parametro Source darà agli utenti la possibilità di specificare l'origine dei dati per il nostro indicatore di media mobile. Questo parametro è di tipo DataSeries.

1
2
[Parameter("Source", Group = "MA")]
public DataSeries Source { get; set; }

Ora che i parametri richiesti sono stati dichiarati, definiremo e inizializzeremo la nostra media mobile.

1
2
3
4
5
6
private MovingAverage movingAverage;

protected override void Initialize()
{
    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);
}

A questo punto siamo pronti per implementare il calcolo della nostra deviazione standard. Il modello di codice predefinito contiene già la proprietà Output che possiamo utilizzare per visualizzare i risultati del calcolo.

1
2
[Output("Result", LineColor = "Orange")]
public IndicatorDataSeries Result { get; set; }

Ultimo ma non meno importante, implementeremo il calcolo della deviazione standard nel metodo Calculate().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public override void Calculate(int index)
{
    var average = movingAverage.Result[index];

    double sum = 0;

    for (var period = 0; period < MaPeriod; period++)
    {
        sum += Math.Pow(Source[index - period] - average, 2.0);
    }

    Result[index] = Math.Sqrt(sum / MaPeriod);
}

Se aggiungiamo il nostro indicatore a un grafico, dovremmo vedere tutti i nostri parametri nella finestra Aggiungi istanza.

Aggiungere parametri aggiuntivi

Una volta completata la nostra deviazione standard, possiamo anche aggiungere una linea orizzontale che fungerà da soglia visiva per l'indicatore. A questo scopo dovremo aggiungere altri parametri.

Il primo sarà un parametro booleano che determinerà se la nostra linea verrà mostrata o meno.

1
2
[Parameter("Show Line", DefaultValue = true, Group = "Line")]
public bool ShowLine { get; set; }

Il parametro LineLevel ci consentirà di determinare il livello di prezzo al quale la linea deve essere disegnata.

1
2
[Parameter("Line Level", DefaultValue = 0.001, Step = 0.001, Group = "Line")]
public double LineLevel { get; set; }

Aggiungeremo anche un parametro che consente di scegliere il colore della linea.

1
2
[Parameter("Line Color", DefaultValue = "Blue", Group = "Line")]
public Color LineColor { get; set; }

Con tutti i parametri necessari in posizione, possiamo scrivere il codice per disegnare la linea sul grafico a cui è collegato il nostro indicatore.

1
2
3
4
if (ShowLine)
{
    Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
}

Se compiliamo nuovamente l'indicatore e aggiungiamo una nuova istanza, saremo in grado di nascondere/mostrare la linea, spostarla verso l'alto o verso il basso e selezionare il colore di nostra scelta come colore della linea.

Come mostrato nell'esempio seguente, i parametri possono anche essere utilizzati per garantire che il nostro indicatore venga mostrato solo quando viene aggiunto a grafici per un periodo di tempo specifico.

1
2
[Parameter("Timeframe")]
public TimeFrame TF { get; set; }

Nel metodo Initialize() controlleremo il periodo di tempo del grafico a cui è collegato il nostro indicatore. Se non è uguale al valore del parametro TF, impediremo la visualizzazione dell'indicatore.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void Initialize()
{
    if (TimeFrame != TF)
        return;

    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);

    if (ShowLine)
    {
        Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
    }
}

Ci auguriamo che questa guida sia stata utile per comprendere i parametri e il loro funzionamento nel trading algoritmico di cTrader.