Documentação

Última atualização em 19. 6. 2015 por Mark Fric

Criar uma nova função de variações hipotéticas

O QuantAnalyzer 4 pode ser ampliado para usar seus próprios valores estatísticos personalizados, métodos What If, Equity ou Monte Carlo, e muitas outras partes do programa também podem ser ampliadas por meio de trechos...

Todos esses métodos no programa são totalmente dinâmicos, cada método (inclusive os padrão) é uma classe Java independente - snippet - implementar 1 ou 2 funções simples que manipulam as ordens.
Você pode se inspirar em como os métodos existentes são feitos ao implementar sua própria ideia.

Para estender o QuantAnalyzer, você precisa usar o QuantEditor. É um editor de código que permite criar e editar classes que serão usadas no QuantAnalyzer.
O princípio é muito semelhante ao trabalho com indicadores personalizados em sua plataforma de negociação, mas a codificação é muito mais simples.

Exemplo - criação de uma nova função What-If

Os casos What If permitem que você teste cenários hipotéticos - por exemplo, e se você aceitasse negociações somente de segunda a quinta-feira? Ou se aceitasse apenas uma negociação por dia?

Com o QuantEditor, você pode criar seus próprios casos como esses. Em nosso exemplo, criaremos um caso simples que considera cada segunda negociação.
Esse cenário não é muito útil, mas mostra como é simples adicionar um novo recurso aos cenários hipotéticos.

Começaremos abrindo o QuantEditor na barra de ferramentas.

O QuantEditor será aberto em uma nova janela. Como queremos criar um novo caso de variações hipotéticas, clicamos em novo na barra de ferramentas do QE. Lá, escolheremos a opção What If e nomearemos nosso arquivo como TakeEverySecondTrade.

Depois de clicar em OK, o editor criará uma nova classe usando um modelo de trabalho para a classe What If que já contém o código genérico da classe What If.

A classe tem apenas dois métodos - construtor TakeEverySecondTrade() e função filtro() que filtra a lista de pedidos de acordo com nossos critérios.

Vamos dar uma olhada no construtor primeiro.
Ele tem o mesmo nome que o nome do nosso arquivo e é chamado no início quando a classe é carregada.

Em geral, devemos definir o nome da classe - ela será exibida nas opções de variações hipotéticas do Analisador de EA com esse nome. Em nosso caso, usaremos "Take Every Second Trade".
Se nossa classe exigir alguns parâmetros, podemos defini-los aqui usando chamadas como addIntParameter(), addFloatParameter, addComboBoxParameter().
A descrição de todas essas funções pode ser encontrada na seção Ajuda do QuantEditor.

No nosso caso, não precisamos de nenhum parâmetro, portanto, nosso construtor terá a seguinte aparência:

public TakeEverySecondTrade() {
   setName("Faça uma negociação a cada dois segundos");
   setFormatedName("Faça uma negociação a cada dois segundos");
}

Agora precisamos definir nosso filtro() function (função). Essa é a função em que devemos especificar o que queremos da classe.
Essa função é chamada quando você seleciona esse caso de variações hipotéticas. Ela recebe uma lista de todas as ordens classificadas por tempo de abertura. Você pode manipular a lista de ordens ou uma ordem específica, ou remover uma ordem da lista, se desejar.

O código básico (mostrado abaixo) não faz nada, apenas percorre a lista de pedidos sem nenhuma ação.

public void filter(SQOrderList originalOrders) throws Exception {
   int parameter = getIntParameterValue("_PARAMETER_");

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
Pedido SQOrder = i.next();

// todo - sua ação personalizada
// as ordens podem ser ignoradas ou manipuladas aqui
}
}

Em nosso caso, queremos remover cada segundo pedido da lista, de modo que apenas metade dos pedidos permaneça na lista, e podemos fazer isso com o código a seguir:

public void filter(SQOrderList originalOrders) {
   boolean isSecondOrder = false;

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
Pedido SQOrder = i.next();

// se a variável isSecondOrder = true, ela removerá a ordem dos resultados
Se (isSecondOrder) i.remove();

// definir a variável isSecondOrder para o valor oposto, de true para false, de false para true
isSecondOrder = !isSecondOrder;
}
}

Explicação do código:
- Primeiro, criamos a variável isSecondOrder e a definimos como false
- Então, à medida que analisamos os pedidos, verificamos se essa variável é verdadeira e, se for, removemos o pedido
- Após cada verificação, definimos a variável com o valor oposto (de falso para verdadeiro, de verdadeiro para falso) e passamos para a próxima ordem

Esse código removerá efetivamente cada segundo pedido da lista de pedidos.

É isso aí. Terminamos.

Agora podemos clicar em Compilação e nossa nova classe deverá ser compilada sem nenhum erro.

Agora, volte para o EA Analyzer e vá para E se e você verá a nova funcionalidade que acabamos de implementar:

Aplique-o em alguma estratégia e você verá que ela terá apenas metade das negociações

Neste exemplo, mostramos como o EA Analyzer 3 possibilita a adição de novos E se função. Você pode criar novas Monte Carlo ou Controle de Equidade de uma forma muito semelhante.

Se você criar alguma função interessante, poderá compartilhá-la em nosso fórum com outros.

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