Vai al contenuto

Tipi principali di cBot

I cBot sono strumenti versatili che, a seconda del loro codice e della loro logica, possono svolgere vari ruoli e funzioni che vanno dal trading completamente automatizzato al supporto per l'implementazione di strategie di trading manuale. In questo articolo e nel video corrispondente definiremo i tipi principali di cBot, delineeremo le loro differenze principali ed elencheremo alcune best practice per la creazione e l'utilizzo di cBot di vari tipi.

In linea di massima, esistono quattro tipi principali di cBot.

Nota

Le categorie seguenti differiscono esclusivamente in base ai comportamenti dei cBot. Nessuna categoria è specificata all'interno del codice effettivo del cBot. Inoltre, alcuni sviluppatori possono anche creare classificazioni personalizzate di cBot.

  • Strategie di trading automatizzate - come suggerisce il nome, i cBot di questo tipo eseguono strategie di trading in modo autonomo. Ad esempio, un cBot Three black crows & three white soldiers piazza un nuovo ordine di acquisto dopo aver incontrato tre candele verdi consecutive e un nuovo ordine di vendita quando si trova di fronte a tre candele rosse consecutive.
  • Script - i cBot appartenenti a questo tipo eseguono un'azione all'avvio e si interrompono dopo il completamento dell'esecuzione. Ad esempio, un cBot script può stabilire uno stop loss per tutte le posizioni attualmente aperte indipendentemente dalla loro direzione, volume o strumento.
  • Assistenti di trading - sono progettati per eseguire un'azione utile che è complementare a una strategia di trading manuale o automatica. Ad esempio, un cBot di questo tipo può gestire i tuoi trailing stop loss utilizzando regole personalizzate diverse dalla funzionalità di trailing stop loss integrata offerta da cTrader.
  • Pannelli di trading - i cBot di questo tipo non operano in modo autonomo; invece, creano controlli personalizzati che possono essere utilizzati per vari scopi. Ad esempio, un cBot può avviare una WebView di un aggregatore di notizie Forex integrando pulsanti di acquisto e vendita personalizzati nonché un selettore di simboli all'interno della WebView, consentendo all'utente di operare senza lasciare il sito di notizie.

Nelle sottosezioni seguenti discutiamo ciascuno dei tipi sopra indicati in dettaglio, delineandone vantaggi e limitazioni e suggerendo vari casi d'uso.

Strategie di trading algoritmico

I cBot appartenenti al tipo di strategia di trading automatizzata sono complessi ma potenti. Devono implementare correttamente una strategia di trading includendo tutti i suoi aspetti come la gestione del rischio, il dimensionamento delle posizioni e l'analisi tecnica.

Puoi creare una semplice strategia di trading automatizzata in meno di due minuti semplicemente sostituendo il modello predefinito del nuovo cBot con il codice seguente.

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

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicTrendBot : Robot
    {
        protected override void OnBar()
        {
            if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "FollowTrend");
            }
            else if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000, "FollowTrend");
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicTrendBot():
    def on_bar(self):
        if api.Bars.ClosePrices.Last(1) > api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 1000, "FollowTrend")
        elif api.Bars.ClosePrices.Last(1) < api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, 1000, "FollowTrend")

Il cBot apre una nuova posizione su ogni barra. Una posizione long viene aperta se il prezzo è aumentato nella barra precedente rispetto alla barra prima di essa. Al contrario, una posizione short viene aperta se il prezzo è sceso.

Backtesting e ottimizzazione

Le strategie di trading automatizzate includono in genere molti elementi e parametri variabili. Di conseguenza, tali cBot spesso devono essere sottoposti a backtesting e ottimizzazione approfonditi prima di essere avviati su conti reali. Fortunatamente, cTrader fornisce strumenti integrati in grado di gestire il backtesting e l'ottimizzazione per te.

Strumento da riga di comando cTrader (CLI)

Le strategie di trading automatizzate in genere devono essere eseguite per lunghi periodi di tempo in modo da poter reagire a vari segnali di analisi tecnica. Per risparmiare sul consumo di RAM e CPU in questi casi, puoi avviare i cBot tramite cTrader CLI senza mai aprire cTrader Windows (nota che è possibile avviare qualsiasi cBot tramite cTrader CLI, non solo i cBot di questo tipo).

Script

Gli script sono in genere necessari per eseguire un'azione che sarebbe difficile o dispendiosa in termini di tempo da eseguire manualmente. Queste azioni vengono in genere eseguite all'avvio del cBot in modo da poter avviare uno script, osservare i risultati del suo funzionamento e quindi interrompere la sua istanza in caso di successo per risparmiare sul consumo di RAM e CPU.

Ad esempio, uno script può chiudere tutte le posizioni il cui profitto lordo supera 50 unità della valuta di deposito del conto di un trader. In effetti, lo script fungerebbe da take profit universale per tutte le posizioni aperte che puoi attivare in qualsiasi momento. Ecco come apparirebbe il codice per questo script.

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

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

        protected override void OnStart()
        {
            foreach (var position in Positions) 
            {
                if (position.GrossProfit > 50) 
                {
                    ClosePosition(position);
                }
            }
            Stop();
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicScriptBot():
    def on_start(self):
        for position in api.Positions:
            if position.GrossProfit > 50:
                api.ClosePosition(position)
        api.Stop()

Dopo aver avviato il cBot, dovremmo vedere diverse posizioni redditizie che vengono gradualmente chiuse.

Interruzione degli script

Poiché gli script devono eseguire un'azione specifica una sola volta, puoi istruire cTrader a chiudere immediatamente uno script dopo che l'esecuzione è stata completata con successo. Come mostrato nell'esempio precedente, puoi farlo chiamando il metodo Stop().

Assistenti di trading

Lo scopo degli assistenti di trading è eseguire regolarmente azioni utili. Sebbene ciò li renda simili agli script, gli script eseguono un'azione solo all'avvio dell'istanza. Al contrario, gli assistenti di trading sono progettati per reagire continuamente alle condizioni di mercato o ad altri fattori ed eseguire operazioni in risposta a determinati pattern.

Ad esempio, considera un cBot che copre automaticamente le tue posizioni non appena le apri. Il codice per questo cBot potrebbe apparire come segue.

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;

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

    {
        private bool hasHedgedPosition = false;

        protected override void OnStart()
        {
            Positions.Opened += Positions_Opened;
        }

        private void Positions_Opened(PositionOpenedEventArgs args) 
        {
            if (!hasHedgedPosition) 
            {
                hasHedgedPosition = true;
                var position = args.Position;
                var oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
                ExecuteMarketOrder(oppositeTradeType, SymbolName, position.VolumeInUnits / 2);
            }
            else 
            {
                hasHedgedPosition = false;            
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicAssistantBot():
    def on_start(self):
        self.hasHedgedPosition = False
        api.Positions.Opened += self.positions_opened

    def positions_opened(self, args):
        if not self.hasHedgedPosition:
            self.hasHedgedPosition = True
            position = args.Position
            opposite = TradeType.Sell if position.TradeType == TradeType.Buy else TradeType.Buy
            api.ExecuteMarketOrder(opposite, api.SymbolName, position.VolumeInUnits / 2)
        else:
            self.hasHedgedPosition = False

All'apertura di una posizione, il cBot tenta immediatamente di aprirne un'altra nella direzione opposta; il volume di questa nuova posizione è esattamente la metà del volume della posizione originale.

Nota che stiamo utilizzando il campo hasHedgedPosition per evitare un ciclo infinito in modo che il cBot copra una nuova posizione solo una volta.

Funzioni di callback

Gli assistenti di trading utilizzano spesso funzioni di callback che fungono da gestori per vari eventi. Per scoprire quali eventi puoi gestire per una determinata classe, apri la documentazione API integrata, cerca la classe richiesta e vai alla sezione Events nell'indice.

Pannelli di trading

I pannelli di trading visualizzano controlli personalizzati che attivano varie azioni quando si interagisce con essi. In genere forniscono miglioramenti alla qualità della vita rispetto all'interfaccia utente predefinita di cTrader. Ad esempio, un cBot può visualizzare un pulsante Buy che, quando viene cliccato, esegue un ordine di mercato per un volume predefinito in cTrader.

Per creare un cBot di questo tipo, utilizza semplicemente il codice 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
25
26
27
28
29
30
31
32
using System;
using cAlgo.API;

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

        Button buttonBuyOrder;

        protected override void OnStart()
        {

            buttonBuyOrder = new Button
            {
                Text = "Buy",
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            buttonBuyOrder.Click += ButtonBuyOrder_Click;

            Chart.AddControl(buttonBuyOrder);
        }

        private void ButtonBuyOrder_Click(ButtonClickEventArgs args) 
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicPanelBot():
    def on_start(self):
        self.buttonBuyOrder = Button()
        self.buttonBuyOrder.Text = "Buy"
        self.buttonBuyOrder.HorizontalAlignment = HorizontalAlignment.Center
        self.buttonBuyOrder.VerticalAlignment = VerticalAlignment.Center
        self.buttonBuyOrder.Click += self.button_buy_order_click
        api.Chart.AddControl(self.buttonBuyOrder)

    def button_buy_order_click(self, args):
        api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 10000)

Cliccando sul pulsante Buy, viene piazzato un nuovo ordine di mercato per 10.000 unità. Il posizionamento comodo del pulsante consente di reagire rapidamente a nuove opportunità di mercato.

Combinare i pannelli di trading con altri tipi di cBot

I pannelli di trading forniscono controlli dell'interfaccia utente personalizzati che ti consentono di eseguire varie operazioni. Puoi utilizzarli insieme ad altri tipi di cBot. Ad esempio, un pannello di trading potrebbe includere un pulsante Hedge personalizzato che, quando cliccato, esegue l'hedging di tutte le posizioni attualmente aperte, in modo simile all'esempio dell'assistente di trading riportato sopra.

Tutte e quattro le categorie di cBot hanno usi validi e possono essere combinate a seconda delle tue preferenze. Ad esempio, puoi avviare contemporaneamente una strategia di trading automatizzata e un assistente di trading per ottenere i migliori risultati possibili. Puoi sperimentare con cBot di vari tipi per assicurarti che il tuo approccio preferito al trading venga eseguito completamente e senza errori.

Image title