Vai al contenuto

Parametri personalizzabili negli algoritmi Python

Quando sviluppi bot di trading Python, indicatori tecnici o plugin, potresti aver bisogno di aggiungere e configurare parametri personalizzabili. Questo articolo spiega come dichiarare e utilizzare parametri personalizzabili in un algoritmo Python per cTrader.

Nota

Il modello di esecuzione per gli algoritmi Python di cTrader prevede un motore .NET/C#, che richiede che tutti i parametri personalizzabili siano dichiarati all'interno di file .cs. Ogni volta che crei un algoritmo Python in cTrader, viene generato automaticamente un file .cs per quell'algoritmo e salvato nella cartella pertinente.

Posizione

La posizione del file .cs per un algoritmo Python dipende dal tipo di algoritmo, che sia un cBot, un indicatore o un plugin, nonché dal nome dell'algoritmo.

  • Per i cBot: Documents/cAlgo/Sources/Robots/{cBot-name}/{cBot-name}/
  • Per gli indicatori: Documents/cAlgo/Sources/Indicators/{Indicator-name}/{Indicator-name}/
  • Per i plugin: Documents/cAlgo/Sources/Indicators/{Plugin-name}/{Plugin-name}/

Puoi seguire queste istruzioni per individuare il file .cs per un algoritmo Python:

  1. Fai clic con il pulsante destro del mouse sull'algoritmo in cTrader Windows o Mac, quindi seleziona Mostra nella cartella.

  2. Naviga attraverso {name-of-algorithm}/{name-of-algorithm}, quindi identifica il file .cs (file sorgente C#) dall'elenco dei file.

Il file .cs ha in genere lo stesso nome dell'algoritmo, con tutti gli spazi rimossi. Ad esempio, un algoritmo denominato Amazing Aroon cBot genera un file AmazingArooncBot.cs.

Suggerimento

Nella stessa cartella puoi accedere al codice Python principale per il tuo algoritmo, salvato in un file .py come Amazing Aroon cBot_main.py. Il file Python segue una semplice convenzione di denominazione:

  • Per i cBot: cBot-name_main.py
  • Per gli indicatori: Indicator-name_main.py
  • Per i plugin: Plugin-name_main.py

Contenuto

Apri il file .cs in qualsiasi editor di testo o codice, come NotePad o Visual Studio Code, e dovresti vedere un codice simile a questo:

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

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public partial class AmazingArooncBot : Robot
{
    [Parameter("Volume (Lots)", DefaultValue = 0.01)]
    public double VolumeInLots { get; set; }

    [Parameter("Stop Loss (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double StopLossInPips { get; set; }

    [Parameter("Take Profit (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double TakeProfitInPips { get; set; }

    [Parameter("Label", DefaultValue = "AmazingArooncBot")]
    public string Label { get; set; }

    [Parameter("Periods", DefaultValue = 25, Group = "Aroon", MinValue = 2)]
    public int Periods { get; set; }
}

Nota

Vedrai una classe vuota se hai creato il tuo cBot Python da zero senza utilizzare un modello.

Qualsiasi parametro dichiarato nel file .cs può essere utilizzato nel file Python principale, che contiene il codice visualizzato nell'editor di codice. Il codice Python principale seguente illustra l'utilizzo dei parametri personalizzabili:

 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class AmazingArooncBot():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.aroon = api.Indicators.Aroon(api.Periods)

    def on_bar_closed(self):
        if self.aroon.Up.Last(0) > self.aroon.Down.Last(0) and self.aroon.Up.Last(1) < self.aroon.Down.Last(1):
            self.close_positions(TradeType.Sell)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        elif self.aroon.Up.Last(0) < self.aroon.Down.Last(0) and self.aroon.Up.Last(1) > self.aroon.Down.Last(1):
            self.close_positions(TradeType.Buy)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)

    def get_bot_positions(self):
        return api.Positions.FindAll(api.Label)

    def close_positions(self, tradeType):
        for position in self.get_bot_positions():
            if position.TradeType != tradeType:
                continue
            api.ClosePosition(position)

Vantaggi

Il vantaggio principale dei parametri personalizzabili è che appaiono come campi modificabili nell'interfaccia utente di tutte le app cTrader, inclusi cTrader Windows, Mac, Web e Mobile. I valori in questi campi possono essere modificati facilmente per soddisfare qualsiasi esigenza o operazione, senza la necessità di accedere o modificare il codice sorgente dell'algoritmo.

In cTrader Store, i venditori utilizzano spesso parametri personalizzabili per garantire che gli acquirenti di algoritmi siano in grado di adattare gli algoritmi ai loro obiettivi e flussi di lavoro.

Image title