Documentazione

Applicazioni

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

Esempio di commissione minima

Si tratta di un metodo semplice di calcolo delle commissioni: utilizza le commissioni in $ per lotto e le moltiplica per la dimensione effettiva dell'operazione. Se la commissione finale è inferiore alla soglia, viene utilizzata la commissione minima. È possibile scaricare lo snippet qui.

 

 

Passo 1 - Clonare la nuova colonna Commercio

Aprire CodeEditor, nel Navigatore sotto Builtin/Snippets/Trading/Commissions, trovare lo snippet SizeBased, fare clic con il tasto destro e clonarlo. Nella cartella User/Snippets/Trading/Commission, si vedrà lo snippet clonato che potrà essere modificato.

 

 

Passo 2 - Definizione dei parametri

A questo punto è necessario specificare i parametri da utilizzare per il calcolo. Nel nostro caso, specifichiamo una commissione per l'intero lotto e una commissione minima nel caso in cui l'importo della commissione sia inferiore al minimo specificato.

@ClassConfig(name="Commissione basata sulla dimensione con valore minimo", display="#Commission# con minimo #MinimumComission#")
@Help("<b>Commissione per operazione con valore minimo</b><br/>Utilizzato principalmente per le azioni o il Forex").
public class MinimumComission extends CommissionsMethod {

    @Parametro(defaultValue="0", minValue=-100000d, name="Commissione", maxValue=100000d, step=1d, category="Default")
    @Help("Commissione in $ per lotto completo")
    public double Commissione;

    @Parametro(defaultValue="0,5", minValue=0, name="MinimumComission", maxValue=100000d, step=1d, category="Default")
    @Help("Commissione minima in $ per compravendita")
    public double MinimumComission;

 

Passo 3 - Implementazione del metodo computeCommissionsOnOpen

 

A questo punto si hanno due possibilità. Calcolare la commissione quando si apre un'operazione, utilizzando il metodo computeCommissionsOnOpen, oppure calcolare la commissione quando si chiude un'operazione, utilizzando il metodo computeCommissionsOnClose. Entrambi i metodi hanno come argomenti: ILiveOrder order , double tickSize, double pointValue.

Nel nostro caso, utilizziamo la prima opzione e modifichiamo questo metodo per calcolare la commissione minima quando la commissione calcolata è inferiore al minimo impostato.

    @Override
    public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        // la commissione è in $ per lotto completo
        double result = 0;
        double comission = Commission * order.getSize();
        if(comission<MinimumComission){risultato = MinimumComission;}
        altrimenti risultato = Commissione * order.getSize();
        
        restituire il risultato;
    }
    //------------------------------------------------------------------------

    @Override
    public double computeCommissionsOnClose(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        return 0;
    }
    
}

 

Passo 4 - Compilazione e utilizzo dello snippet

Dopo aver riavviato StrategyQuant X, vediamo il nuovo metodo di calcolo delle commissioni nella sezione Dati.

 

Nella figura sottostante, si può notare che la commissione per lotto dovrebbe essere in realtà $10, ma poiché abbiamo impostato la commissione minima sopra, la commissione finale è $20 per operazione.

 

 

Codice completo dello snippet

 

/*
 * 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 ALTRE 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.Trading.Commissions;

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

@ClassConfig(name="Commissione basata sulla dimensione con valore minimo", display="$ #Ccommissione# per trade")
@Help("<b>Commissione per operazione con valore minimo</b><br/>Utilizzato principalmente per le azioni o il Forex").
public class MinimumComission extends CommissionsMethod {

    @Parametro(defaultValue="0", minValue=-100000d, name="Commissione", maxValue=100000d, step=1d, category="Default")
    @Help("Commissione in $ per lotto completo")
    public double Commissione;

    @Parametro(defaultValue="0,5", minValue=0, name="Commissione minima", maxValue=100000d, step=1d, category="Default")
    @Help("Commissione minima in $ per compravendita")
    public double MinimumComission;

    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        // la commissione è in $ per lotto completo
        double result = 0;
        double comission = Commission * order.getSize();
        if(comission<MinimumComission){result = MinimumComission;}
        else result = Commission * order.getSize();
        
        return result; 
    }
    //------------------------------------------------------------------------

    @Override
    public double computeCommissionsOnClose(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        return 0;
    }
    
}

 

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

Abbonarsi
Notificami
0 Commenti
Feedback in linea
Visualizza tutti i commenti