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){resultado = MinimumComission;}
Caso contrário, o resultado = Comissão * 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


