Creato un cBot che utilizza il CRTIndicator per impostare i livelli di stop loss e take profit.
L'idea è di usare i livelli CRT (alto, medio, basso) di una candela precedente (specificata da CandleIndex) per impostare lo stop loss e il take profit per un nuovo trade.
Passaggi:
- Creeremo un cBot che apre un trade (acquisto o vendita) basato su una condizione (che definiremo come parametro per il test).
- Utilizzeremo il CRTIndicator per ottenere i livelli da una candela precedente (l'indice della candela è impostato dall'utente).
- Per un trade di acquisto, imposteremo lo stop loss al CRT basso e il take profit al CRT alto della candela di riferimento.
- Per un trade di vendita, imposteremo lo stop loss al CRT alto e il take profit al CRT basso della candela di riferimento.
Tuttavia, nota che il CRTIndicator che abbiamo calcola solo i livelli per ogni candela e li traccia.
Dobbiamo accedere all'indicatore dal cBot e ottenere i valori per la candela specifica di nostro interesse.
Progettiamo il cBot:
Parametri:
- CandleIndex: quale candela precedente usare (0 = corrente, 1 = precedente, ecc.)
- TradeType: possiamo impostare un parametro per scegliere tra Acquisto e Vendita per il test, oppure possiamo usare un segnale (come un incrocio di medie mobili) per decidere.
Per semplicità, creiamo un parametro per scegliere il tipo di trade.
Ma nota: nel trading live useremmo alcune condizioni per entrare. Creeremo un cBot semplice che apre un trade sulla candela corrente se non c'è una posizione aperta.
Assumeremo di fare trading sul timeframe del grafico.
Passaggi nel cBot:
- Controlla se abbiamo una posizione aperta. Se no, considera di aprirne una.
- Ottieni i valori del CRTIndicator per il CandleIndex specificato (che è una candela passata rispetto alla corrente).
- Per un trade di Acquisto:
Stop Loss = CRT Basso della candela di riferimento
Take Profit = CRT Alto della candela di riferimento - Per un trade di Vendita:
Stop Loss = CRT Alto della candela di riferimento
Take Profit = CRT Basso della candela di riferimento
Tuttavia, nota che l'indicatore calcola per ogni indice. Stiamo tracciando gli stessi valori per ogni indice (perché stiamo usando un offset fisso di CandleIndex).
Ma nel cBot vogliamo ottenere i livelli dall'indicatore al momento attuale (la candela completata più recente) per il CandleIndex specificato.
Importante: il metodo Calculate dell'indicatore viene chiamato per ogni indice, e memorizza i valori per la candela di riferimento (indice - CandleIndex) all'indice corrente.
Quindi se vogliamo ottenere i livelli CRT per una candela storica specifica, possiamo semplicemente leggere la serie di output dell'indicatore all'indice di quella candela?
Ma nota: gli output dell'indicatore sono allineati con l'indice corrente. In realtà, l'indicatore sta tracciando lo stesso valore per ogni barra perché stiamo impostando:
CRTHigh[index] = crtHigh; // dove crtHigh è l'alto della candela (index - CandleIndex)
Quindi se siamo all'indice 100 e CandleIndex=1, stiamo ottenendo l'alto dell'indice 99 e tracciandolo all'indice 100.
Questo significa che se vogliamo i livelli CRT per la candela che è CandleIndex barre fa, possiamo ottenere l'output dell'indicatore alla barra corrente (indice) e questo ci darà i livelli di CandleIndex barre fa.
Ma aspetta, nel cBot eseguiremo OnBar o OnTick. Siamo interessati alla barra completata più recente (indice = MarketSeries.Close.Count - 2) e la candela che vogliamo è (indice corrente - CandleIndex).
In alternativa, possiamo modificare l'indicatore per emettere i livelli allo stesso indice della candela di riferimento, ma allora dovremmo spostare il tracciato di CandleIndex.
Tuttavia, l'indicatore attuale è progettato per tracciare i livelli alla barra corrente da una barra precedente. Quindi se impostiamo CandleIndex=1, allora ad ogni barra stiamo tracciando i livelli della barra precedente.
Come possiamo usarlo nel cBot:
Aggiungeremo l'indicatore al cBot e poi otterremo i valori per la barra più recente (indice = MarketSeries.Close.Count - 1) e questo ci darà i livelli di CandleIndex barre fa.
Esempio:
Indice barra corrente = ultima barra (indice = MarketSeries.Close.Count - 1)
Quindi l'output dell'indicatore a questo indice (CRTHigh[MarketSeries.Close.Count-1]) è l'alto della barra (indice corrente - CandleIndex).
Ma nota: il metodo Calculate dell'indicatore viene chiamato per ogni barra storica e poi per ogni nuova barra. Quindi la serie di output per l'ultima barra avrà il valore che vogliamo.
Codifichiamo il cBot:
Avremo parametri:
[Parameter("Indice Candela", DefaultValue = 1, MinValue = 0)]
public int CandleIndex { get; set; }
[Parameter("Tipo di Trade", DefaultValue = TradeType.Buy)]
public TradeType SelectedTradeType { get; set; }
[Parameter("Volume (Lotti)", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Volume { get; set; }
Creeremo anche un'istanza del CRTIndicator.
Passaggi in OnBar:
se non c'è una posizione, allora apri una nuova posizione con stop loss e take profit impostati dall'output dell'indicatore per la barra corrente (che corrisponde ai livelli di CandleIndex barre fa).
Tuttavia, nota: l'output dell'indicatore per la barra corrente (ultima barra) è impostato ai livelli di (indice barra corrente - CandleIndex). Ma quando siamo all'inizio, dobbiamo assicurarci di avere abbastanza barre.