Documentazione

Applicazioni

Ultimo aggiornamento il 21. 12. 2021 da clonex / Ivan Hudec

Volatilità ATR Dimensionamento semplice

In situazioni in cui la volatilità a breve termine è in aumento o in diminuzione, può avere senso modificare la dimensione della posizione. Nel seguente tutorial vi mostreremo un semplice snippet in StrategyQuant X x che consente di aumentare/diminuire la dimensione di un trade. Snippet da scaricare qui.

Passo 1 - Creare un nuovo snippet per la gestione del denaro

Aperto Editor di codice, fare clic su Creare un nuovo e scegliere Gestione del denaro  in fondo alla pagina. Nome ATRVolatilitàDimensionamento.

Questo creerà un nuovo snippet ATRVolatilitàDimensionamento.java in cartella Utente/Snippets/SQ/Gestione del denaro

 

 

Passo 2 - Definizione dei parametri

A questo punto, definiamo i parametri che utilizzeremo in seguito quando implementeremo lo snippet. In questo caso, definiremo i seguenti parametri

  • Dimensione - il valore predefinito per la dimensione dell'operazione.
  • Moltiplicatore - Moltiplicatore che verrà utilizzato per modificare la dimensione dell'operazione.
  • FastATR - Periodo ATR veloce
  • SlowATR - Periodo ATR lento

 

@ClassConfig(name="Dimensionamento volatilità ATR", display="Dimensionamento volatilità ATR: lotti #Size# con moltiplicazione #Multiplier#")
@Help("<b>Dimensionamento della volatilità ATR</b>")
@Description("Dimensionamento della volatilità ATR, #Size# e #Multiplier#")
@Ordine di ordinamento(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parametro(defaultValue="0,1", minValue=0,01d, name="Dimensione ordine", maxValue=1000000d, step=0,1d, category="Default")
    @Help("Dimensione dell'ordine (numero di lotti per il forex)")
    public double Dimensione;

    @Parametro(defaultValue="0.1", minValue=0.01d, name="Moltiplicatore", maxValue=1000, step=0.1d, category="Default")
    @Help("Moltiplicatore")
    public double Moltiplicatore;

    @Parametro(defaultValue="5", minValue=2, name="Periodo ATR veloce", maxValue=480, step=1, category="Default")
    @Help("Periodo ATR veloce")
    public int FastATR;

    @Parametro(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Periodo ATR lento")
    public int SlowATR;

 

 

Passo 3 - Implementazione del metodo double computeTradeSize

In questo metodo si specifica la dimensione del lotto. I parametri del metodo sono degni di nota.

  • StrategyBase strategy è la classe base della strategia, da cui si dipartono classi derivate che implementano funzioni aggiuntive.
    Simbolo di stringa: il simbolo con cui è stata ordinata la strategia.
  • byte orderType
  • doppio prezzo - il prezzo all'apertura dello scambio
  • doppio sl - stop loss
  • double tickSize Dimensione del tick
  • double pointValue - valore del punto.

Con questo metodo possiamo eseguire calcoli più semplici, ma anche più complessi. Nel nostro caso, impostiamo il prezzo di chiusura precedente e due diversi valori di ATR. Se l'ATR a breve termine è superiore all'ATR a lungo termine, modifichiamo la dimensione della posizione.

 

@Override
public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
    
    double tradeSize;
    // ottenere la chiusura precedente
    double prevClose = strategy.MarketData.Chart(symbol).Close(1);
    // otteniamo l'ATR arrotondato con un periodo più lento
    double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATR, 1), 5);
    // ottenere un ATR arrotondato con un periodo più veloce
    double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATR, 1), 5);
    // se la volatilità a breve è in aumento, modificare la dimensione dell'operazione
    se(fastValueATR>slowValueATR){
        tradeSize = Size*Multiplier;

    }
    // altrimenti non fare nulla
    else tradeSize = Size;
    // restituisce la dimensione dell'operazione
    restituire tradeSize;
    
}

Fase 4 - Utilizzo dello snippet ATR Volatility Sizing

Dopo aver riavviato SQX, troverete il nuovo frammento nella scheda Gestione denaro.

Nel grafico sottostante è possibile osservare la variazione delle dimensioni degli scambi.

 

 

 

Codice commentato

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Tutti i diritti riservati.
 *
 * Il codice contenuto in questo file è stato realizzato in buona fede, in modo che sia corretto e faccia ciò che dovrebbe.
 * Se avete trovato un bug in questo codice O avete un suggerimento di miglioramento O volete includere
 * un vostro frammento di codice nella nostra libreria standard, contattateci all'indirizzo:
 * https://roadmap.strategyquant.com
 *
 * Questo codice può essere utilizzato solo all'interno dei prodotti StrategyQuant.
 * Ogni proprietario di una licenza valida (gratuita, di prova o commerciale) di un qualsiasi prodotto StrategyQuant
 * è autorizzato a utilizzare, copiare, modificare o fare lavori derivati da questo codice senza limitazioni,
 * da utilizzare in tutti i prodotti StrategyQuant e condividere le sue modifiche o i suoi lavori derivati con la comunità StrategyQuant.
 * con la comunità StrategyQuant.
 *
 * IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIE DI ALCUN TIPO, ESPRESSE O IMPLICITE,
 * INCLUSE, A TITOLO ESEMPLIFICATIVO E NON ESAUSTIVO, LE GARANZIE DI COMMERCIABILITÀ, DI IDONEITÀ PER UN PARTICOLARE
 * SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI POTRANNO ESSERE RITENUTI RESPONSABILI PER QUALSIASI RECLAMO, DANNO
 * O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, CHE IN UN ILLECITO O ALTRO, DERIVANTI DA,
 * DA O IN RELAZIONE AL SOFTWARE O ALL'USO O AD ALTRI RAPPORTI CON IL SOFTWARE.
 *
 */
pacchetto SQ.MoneyManagement;

importare com.strategyquant.lib.*;
importare com.strategyquant.datalib.*;
importare com.strategyquant.tradinglib.*;

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing: #Size# lotti con moltiplicazione #Multiplier#")
@Help("<b>Dimensionamento della volatilità ATR</b>")
@Description("Dimensionamento della volatilità ATR, #Size# e #Multiplier#")
@Ordine di ordinamento(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parametro(defaultValue="0,1", minValue=0,01d, name="Dimensione ordine", maxValue=1000000d, step=0,1d, category="Default")
    @Help("Dimensione dell'ordine (numero di lotti per il forex)")
    public double Dimensione;

    @Parametro(defaultValue="0.1", minValue=0.01d, name="Moltiplicatore", maxValue=1000, step=0.1d, category="Default")
    @Help("Moltiplicatore")
    public double Moltiplicatore;

    @Parametro(defaultValue="5", minValue=2, name="Periodo ATR veloce", maxValue=480, step=1, category="Default")
    @Help("Periodo ATR veloce")
    public int FastATRPeriod;

    @Parametro(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Periodo ATR lento")
    public int SlowATRPeriod;



    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
        
        double tradeSize;
        // ottenere la chiusura precedente
        double prevClose = strategy.MarketData.Chart(symbol).Close(1);
        // otteniamo l'ATR arrotondato con un periodo più lento
        double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATRPeriod, 1), 5);
        // ottenere un ATR arrotondato con un periodo più veloce
        double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATRPeriod, 1), 5);
        // se la volatilità a breve sale, modificare la dimensione dell'operazione
        se(fastValueATR&gt;slowValueATR){
            tradeSize = Size*Multiplier;

        }
        // altrimenti la dimensione è uguale alla dimensione predefinita
        altrimenti tradeSize = Dimensione;
        // restituisce la dimensione dell'operazione
        restituire tradeSize;

 

Questo articolo è stato utile? L'articolo è stato utile L'articolo non è stato utile

Abbonarsi
Notificami
6 Commenti
Il più vecchio
Più recente I più votati
Feedback in linea
Visualizza tutti i commenti
Emmanuel
6. 1. 2022 11:56

Eccellente !!!!!!!!!!!!!!

binhsir
15. 1. 2022 2:05 pm

Questo è esattamente ciò di cui ho bisogno. Grazie clonex

Kaveh Karimi
1. 3. 2022 21:39

Ciao, come posso compilare questo file nell'editor di codice? Grazie mille per l'attenzione.

Signor Omi
3. 11. 2023 5:03 am

Grazie clonex / Ivan Hudec.

Non so perché non riesco a salvare la mia strategia con il formato mq5. L'errore è "Uno o più blocchi utilizzati dalla strategia non sono implementati nel codice MQL", "L'inclusione del modello non è riuscita (per il valore del parametro "MoneyManagement/ATRVolatilitySizing_variables.tpl").

Potreste aiutarmi a risolvere il problema?

Last edited 5 mesi fa by Mr Omi
Emmanuel
13. 2. 2024 1:17 pm

I can not make it work with build 138

Emmanuel
13. 2. 2024 1:27 pm

For build 138 , we need to update the line :
@Override
    public doppio computeTradeSize(StrategyBase strategy, String symbol, byte orderType, doppio prezzo, doppio sl, doppio tickSize, doppio pointValue, doppio sizeStep) throws Exception {