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?
Non riesco a farlo funzionare con la build 138
Per la build 138, è necessario aggiornare la riga :
@Override
pubblico doppio calcola dimensione di negoziazione(StrategiaBase strategia, Simbolo di stringa, byte tipo di ordine, doppio prezzo, doppio sl, doppio tickSize, doppio puntoValore, doppio dimensionePasso) lanci Eccezione {
Ottimo, ma sarebbe fantastico se potesse funzionare su strategie di stock-picking
Salve, ho avuto problemi di compilazione del mio codice. Qualche consiglio? Sto lavorando con la versione 142. package SQ_MoneyManagement; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; import java.util.List; import java.util.Calendar; import java.util.TimeZone; @ClassConfig(name=”GestionRRVariable”, display=”RRVariable Diario: #Lots# lots”) @trdtrd(“Gestión de riesgo: 0.5% base → x1.5 tras ganancia, reset tras pérdida; pausa si -4%/ +8% diario.”) public class GestionRRVariable extends MoneyManagementMethod { @Parameter(name=”Lots”, defaultValue=”0.1″, minValue=0.01, maxValue=100, step=0.1) @trdtrd(“Número de lotes fijo (solo por compatibilidad con SQX).”) public double Lots; // Parámetros private final double baseRiskPct = 0,5; private final double multiplier = 1,5; private final double maxDailyLossPct = 4,0; private final double maxDailyGainPct = 8,0; private... Leggi il resto "