Documentação
Aplicações
Última atualização em 21. 12. 2021 por clonex / Ivan Hudec
Exemplo de Comissão Mínima
Conteúdo da página
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