Documentación

Aplicaciones

Última actualización el 18. 5. 2020 by Mark Fric

ForceIndex Bloques de señales

Nuestro nuevo ForceIndex indicador se implementa, pero como se mencionó anteriormente, sólo está disponible Indicadores aleatorios sección Señales. Esto significa que se combinará al azar con todas las comparaciones y valores numéricos aleatorios.

En StrategyQuant X usted debe preferir el uso de señales - esas son condiciones predefinidas utilizando un indicador, por ejemplo:

Indicador al alza
El indicador cae

El indicador cruza por encima del nivel
El indicador cruza por debajo del nivel

Utilizar señales predefinidas como esta tiene muchas ventajas, una de ellas es que disminuye los niveles de libertad y le permite especificar condiciones que tengan algún sentido real en el trading. SQ utilizará entonces estas condiciones predefinidas en lugar de tratar de generar toda la condición al azar.

A continuación le mostraremos cómo puede crear sus propias señales que utilicen algún indicador ya implementado, en nuestro caso ForceIndex. Para este ejemplo implementaremos dos señales simples:

ForceIndex es mayor que cero - debería sugerir una tendencia alcista
ForceIndex es inferior a cero - debería sugerir tendencia bajista

 

Paso 1 - Creación de una nueva señal en el Editor de Código

Al igual que el indicador, la señal es un snippet que debe programarse en SQ. Abra CodeEditor, haga clic en Crear nuevo y cree un nuevo fragmento con el nombre ForceIndexAboveZero. Elija Señal como tipo de fragmento, y ForceIndex como indicador en el que se basa la señal.

Esto creará un nuevo fragmento ForceIndexAboveZero.java y lo coloca en la carpeta SQ -> Bloques -> Indicadores -> FoceIndex.

Cuando vamos a revisar el código se puede notar el código es mucho más simple que el código para el indicador en sí. También tiene parámetros, que deben coincidir con los parámetros del indicador, y luego sólo un método OnBlockEvaluate() que debe devolver verdadero o falso dependiendo de si la señal es válida o falsa.

Tenga en cuenta que la plantilla de señales estándar puede no coincidir con su indicador, como en este caso. Si intenta compilarlo recibirá errores de compilación, porque la llamada del indicador Strategy.Indicators.ForceIndex(Input, Period) en el método OnBlockEvaluate() no utiliza todos los parámetros requeridos.

En los siguientes pasos modificaremos la plantilla defaukt para que funcione con ForceIndex

 

 

Implementar parámetros ForceIndex correctos

Si miras el indicador ForceIndex verás que tiene parámetros: Chart, Period, MAMethod, AppliedPrice.

Debemos copiar los mismos parámetros también a nuestra nueva señal:

public class ForceIndexAboveZero extends ConditionBlock {

    @Parámetro
    public ChartData Gráfico;

    @Parameter(defaultValue="10", isPeriod = true, minValue=2, maxValue=1000, step=1)
    public int Periodo;

    @Parameter(name="Método", defaultValue="0")
    @Editor(type=Editors.Selection, values="Simple=0,Exponencial=1,Suavizado=2,Lineal ponderado=3")
    public int MAMétodo;

    @Parámetro(defaultValor="0")
    @Editor(type=Editors.Selection, values="Cierre=0,Apertura=1,Máximo=2,Mínimo=3,Mediana=4,Típico=5,Ponderado=6")
    public int PrecioAplicado;

 

o, alternativamente, es posible que desee omitir algunos de los parámetros, y utilizar su valor fijo en su lugar. Crear un parámetro significa que será editable en el Asistente y que SQ podrá generar valores aleatorios para este parámetro.

Hay un parámetro más que deberíamos añadir:

    @Parámetro
    public int Turno;

A diferencia del fragmento de indicador, el parámetro Desplazamiento en las señales no se utiliza por defecto y debe añadirse explícitamente.

 

Implementar el método OnBlockEvaluate

A continuación se muestra una implementación del método OnBlockEvaluate() para nuestra señal. Como se puede ver, es bastante simple - sólo tiene que obtener el indicador llamando Strategy.Indicator.ForceIndex(...) con los parámetros adecuados, y luego acaba de obtener su valor en Shift especificado y compararlo con cero.

    @Override
    public boolean OnBlockEvaluate() lanza TradingException {

        ForceIndex indicador = Strategy.Indicators.ForceIndex(Chart, Period, MAMethod, AppliedPrice);
        double value = indicator.Value.getRounded(Shift);

        return (valor > 0);
    }

Esto es todo, nuestra nueva señal ya está terminada, podemos pulsar en Compilar y debería compilarse con éxito.

 

Implementar ForceIndexBelowZero

Del mismo modo, deberíamos aplicar también ForceIndexBajoCero. La única diferencia con la señal anterior es que la comparación en OnBlockEvaluate() será opuesto:

return (valor < 0);

Ahora compila también la segunda señal y reinicia SQ. Cuando veas los bloques de construcción deberías ver una nueva sección para ForceIndex en señales, con nuestras dos nuevas señales:

 

 

 

¿Le ha resultado útil este artículo? El artículo era útil El artículo no era útil

Suscríbase a
Notificar a
0 Comentarios
Feedbacks de Inline
Ver todos los comentarios