Documentazione
Applicazioni
Ultimo aggiornamento il 21. 12. 2021 da clonex / Ivan Hudec
Volatilità ATR Dimensionamento semplice
Contenuto della pagina
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>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
Eccellente !!!!!!!!!!!!!!
Questo è esattamente ciò di cui ho bisogno. Grazie clonex
Ciao, come posso compilare questo file nell'editor di codice? Grazie mille per l'attenzione.
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?
I can not make it work with build 138
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 {