Documentação

Aplicações

Última atualização em 18. 5. 2020 por Mark Fric

Blocos de sinal ForceIndex

Nosso novo ForceIndex é implementado, mas, como mencionado anteriormente, está disponível apenas na seção Sinais de Indicadores Aleatórios. Isto significa que ele será combinado aleatoriamente com todas as comparações e valores numéricos aleatórios.

No StrategyQuant X você deve preferir usar sinais - são condições pré-definidas usando um indicador, por exemplo:

O indicador está subindo
O indicador está caindo

Indicador cruza acima do nível
Indicador cruza abaixo do nível

O uso de sinais predefinidos como este tem muitas vantagens, uma delas é que diminui os níveis de liberdade e permite especificar condições que fazem algum sentido real na negociação. A SQ utilizará então essas condições pré-definidas em vez de tentar gerar a condição inteira aleatoriamente.

Abaixo mostraremos como você pode criar seus próprios sinais que utilizam alguns indicadores já implementados - no nosso caso, o ForceIndex. Para este exemplo, vamos implementar dois sinais simples:

A ForceIndex é maior que zero - deve sugerir tendência de alta
ForceIndex é inferior a zero - deve sugerir tendência de queda

 

Passo 1 - Criação de novo sinal no Editor de Código

Tal como o indicador, o sinal é um snippet que deve ser programado no SQ. Abra CodeEditor, clique em Create new e crie um novo snippet com o nome ForceIndexAboveZero. Escolha Sinal como tipo snippet, e ForceIndex como indicador no qual o sinal se baseia.

Isto criará um novo snippet ForceIndexAboveZero.java e a coloca em SQ -> Blocos -> Indicadores -> pasta FoceIndex.

Quando revisaremos o código, você poderá notar que o código é muito mais simples do que o código para o próprio indicador. Ele também tem parâmetros, que devem corresponder a parâmetros de indicador, e então apenas um método OnBlockEvaluate() que deve retornar verdadeiro ou falso, dependendo se o sinal é válido ou falso.

Observe que o modelo de sinais padrão pode não corresponder ao seu indicador, como é neste caso. Se você tentar compilá-lo, receberá erros de compilação, pois a chamada do indicador Strategy.Indicators.ForceIndex(Input, Period) no método OnBlockEvaluate() não utiliza todos os parâmetros necessários.

Nas próximas etapas modificaremos o modelo de defaukt para que ele funcione com o ForceIndex

 

 

Implementar parâmetros ForceIndex corretos

Se você olhar para o indicador ForceIndex, você notará que ele tem parâmetros: Gráfico, Período, MAMethod, Preço Aplicado.

Devemos copiar os mesmos parâmetros também para nosso novo sinal:

classe pública ForceIndexAboveZero estende ConditionBlock {

    @Parameter
    gráfico público Gráfico de dados;

    @Parameter(defaultValue="10", isPeriod = true, minValue=2, maxValue=1000, step=1)
    período de intenção pública;

    @Parameter(name="Method", defaultValue="0")
    @Editor(tipo=Editores.Seleção, valores="Simples=0,Exponencial=1,Alisado=2,Linear ponderado=3")
    público no MAMethod;

    @Parameter(defaultValue="0")
    @Editor(tipo=Editores.Seleção, valores="Fechado=0,Aberto=1,Alto=2,Baixo=3,Mediana=4,Típico=5,Ponderado=6")
    público int. Preço aplicado;

 

ou, alternativamente, você pode querer omitir alguns dos parâmetros e usar seu valor fixo em seu lugar. Criar um parâmetro significa que ele será editável no Wizard e o SQ será capaz de gerar valores aleatórios para este parâmetro.

Há mais um parâmetro que devemos acrescentar:

    @Parameter
    público int Shift;

Em contraste com o indicador, o parâmetro Shift nos sinais não é usado por padrão e tem que ser explicitamente adicionado.

 

Implementar o método OnBlockEvaluate

Abaixo está uma implementação do método OnBlockEvaluate() para nosso sinal. Como você pode ver, é bastante simples - você só tem que obter o indicador chamando Strategy.Indicator.ForceIndex(...) com parâmetros apropriados, e então apenas obter seu valor no Shift especificado e compará-lo com zero.

    @Override
    public boolean OnBlockEvaluate() joga TradingException {

        Indicador ForceIndex = Estratégia.Indicadores.ForceIndex(Gráfico, Período, MAMethod, Preço Aplicado);
        valor duplo = indicador.Value.getRounded(Shift);

        retorno (valor > 0);
    }

Isto é tudo, nosso novo sinal está agora terminado, podemos clicar em Compile e ele deve ser compilado com sucesso.

 

Implementar ForceIndexBelowZero

Da mesma forma, devemos implementar também ForceIndexBelowZero. A única diferença em relação ao sinal anterior é que a comparação em OnBlockEvaluate() método será o oposto:

retorno (valor < 0);

Agora compilar também o segundo sinal e depois reiniciar o SQ. Quando você olhar os blocos de construção, você deve ver uma nova seção para o ForceIndex em sinais, com nossos dois novos sinais:

 

 

 

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