Documentação

Aplicações

Última atualização em 21. 12. 2021 por clonex / Ivan Hudec

Exemplo de Comissão Mínima

Este é um método simples de cálculo de comissões - ele usa comissões em $ por lote e o multiplica pelo tamanho real do comércio. Se a comissão final estiver abaixo do limite, então é usada a comissão mínima. Você pode baixar o snippet aqui.

 

 

Passo 1 - Clonar nova coluna Comércio

Open CodeEditor, no Navigator em Builtin/Snippets/Trading/Comissões, encontre o fragmento SizeBased Snippet, clique nele com o botão direito do mouse e clone-o. Na pasta User/Snippets/Trading/Comission, você verá o trecho clonado que você pode editar.

 

 

Passo 2 - Definir Parâmetros

Neste ponto, é necessário especificar os parâmetros a serem utilizados para o cálculo. Em nosso caso, especificamos uma comissão para o lote inteiro e uma comissão mínima, caso o valor da comissão seja inferior ao mínimo especificado.

@ClassConfig(name="Size Based Comission with Minimum Value", display="#Comission# with Minimum #MinimumComission#")
@Help("<b>Comissão por comércio com valor mínimo</b><br/>Usado principalmente para ações, ou Forex").
classe pública Comissão Mínima Estende o Método das Comissões {

    @Parameter(defaultValue="0", minValue=-100000d, name="Commission", maxValue=100000d, step=1d, category="Default")
    @Help("Comissão em $ por lote completo")
    Comissão pública dupla;

    @Parameter(defaultValue="0.5", minValue=0, name="MinimumComission", maxValue=100000d, step=1d, category="Default")
    @Help("Minimum Commission in $ per Trade")
    público duplo MínimoComissão;

 

Passo 3 - Implementar o método computeCommissionsOnOpen

 

Neste ponto, você tem duas opções. Ou calcular a comissão quando você abre uma negociação, usando o método computeCommissionsOnOpen, ou calcular a comissão quando você fecha uma negociação, usando o método computeCommissionsOnClose. Ambos os métodos têm como argumentos: Pedido ILiveOrder , duplo tickSize, duplo pontoValor.

Em nosso caso, usamos a primeira opção e modificamos este método para computar a comissão mínima quando a comissão computada é menor que o mínimo que estabelecemos.

    @Override
    Compute public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) lança Exceção {
        // a comissão é em $ por lote completo
        resultado duplo = 0;
        dupla comissão = Comissão * order.getSize();
        if(comission<MinimumComission){resultado = MinimumComission;}
        outro resultado = Comissão * order.getSize();
        
        resultado do retorno;
    }
    //------------------------------------------------------------------------

    @Override
    Compute public double computeCommissionOnClose(ILiveOrder order, double tickSize, double pointValue) lança Exceção {
        retornar 0;
    }
    
}

 

Passo 4 - Compilar trecho e utilizá-lo

Após reiniciar o StrategyQuant X, vemos o novo método de cálculo de comissões na seção Dados.

 

Na figura abaixo, você pode ver que a comissão por lote deve ser de fato $10, mas como estabelecemos a comissão mínima acima, a comissão final é de $20 por comércio.

 

 

Código completo do snippet

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Todos os direitos reservados.
 *
 * O código neste arquivo foi feito de boa fé de que é correto e faz o que deve ser feito.
 * Se você encontrou um erro neste código OU se você tem uma sugestão de melhoria OU você quer incluir
 * seu próprio trecho de código em nossa biblioteca padrão, por favor entre em contato conosco:
 * https://roadmap.strategyquant.com
 *
 * Este código só pode ser usado dentro dos produtos StrategyQuant.
 * Todo proprietário de licença válida (gratuita, experimental ou comercial) de qualquer produto StrategyQuant
 * é permitido usar livremente, copiar, modificar ou fazer trabalhos derivados deste código sem limitações,
 * para ser usado em todos os produtos StrategyQuant e compartilhar suas modificações ou trabalhos derivados
 * com a comunidade StrategyQuant.
 *
 * O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA,
 * INCLUINDO MAS NÃO LIMITADO ÀS GARANTIAS DE COMERCIABILIDADE, ADEQUAÇÃO A UM DETERMINADO
 * PROPÓSITO E NÃO-INFRAÇÃO. EM NENHUMA HIPÓTESE OS AUTORES SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS
 * OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU OUTRO, DECORRENTE DE,
 * FORA OU EM CONEXÃO COM O SOFTWARE OU COM O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
 *
 */
pacote SQ.Trading.Commissions;

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

@ClassConfig(name="Size Based Comission with Minimum Value", display="$ #Commission# per trade")
@Help("<b>Comissão por comércio com valor mínimo</b><br/>Usado principalmente para ações, ou Forex").
classe pública Comissão Mínima Estende o Método das Comissões {

    @Parameter(defaultValue="0", minValue=-100000d, name="Commission", maxValue=100000d, step=1d, category="Default")
    @Help("Comissão em $ por lote completo")
    Comissão pública dupla;

    @Parameter(defaultValue="0.5", minValue=0, name="Minimum Comission", maxValue=100000d, step=1d, category="Default")
    @Help("Minimum Commission in $ per Trade")
    público duplo MínimoComissão;

    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    Compute public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) lança Exceção {
        // a comissão é em $ por lote completo
        resultado duplo = 0;
        dupla comissão = Comissão * order.getSize();
        if(comissão<MinimumComission){result = MinimumComission;}
        else result = Commission * order.getSize();
        
        return result; 
    }
    //------------------------------------------------------------------------

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

 

Este artigo foi útil? O artigo foi útil O artigo não foi útil

Assine
Notificação de
0 Comentários
Feedbacks em linha
Ver todos os comentários