Documentation

Applications

Dernière mise à jour le 18. 5. 2020 par Mark Fric

ForceIndex Blocs de signaux

Notre nouvelle ForceIndex est implémenté, mais comme mentionné précédemment, il n'est disponible que dans la section Signaux des indicateurs aléatoires. Cela signifie qu'il sera combiné de manière aléatoire avec toutes les comparaisons et les valeurs numériques aléatoires.

Dans StrategyQuant X, vous devriez préférer utiliser des signaux - ce sont des conditions prédéfinies utilisant un indicateur, par exemple :

L'indicateur est en hausse
L'indicateur est en baisse

L'indicateur passe au-dessus du niveau
L'indicateur passe en dessous du niveau

L'utilisation de signaux prédéfinis comme celui-ci présente de nombreux avantages, l'un d'entre eux étant qu'il réduit les niveaux de liberté et vous permet de spécifier des conditions qui ont un sens réel dans le trading. SQ utilisera alors ces conditions prédéfinies au lieu d'essayer de générer l'ensemble des conditions de manière aléatoire.

Nous allons montrer ci-dessous comment vous pouvez créer vos propres signaux qui utilisent un indicateur déjà implémenté - dans notre cas ForceIndex. Pour cet exemple, nous allons mettre en place deux signaux simples :

ForceIndex est supérieur à zéro - devrait suggérer une tendance à la hausse
ForceIndex est inférieur à zéro - devrait suggérer une tendance baissière

 

Étape 1 - Création d'un nouveau signal dans l'éditeur de code

Comme l'indicateur, le signal est un snippet qui doit être programmé dans SQ. Ouvrez CodeEditor, cliquez sur Create new et créez un nouveau snippet avec le nom ForceIndexAboveZero. Choisir Signal comme type d'extrait, et ForceIndex l'indicateur sur lequel le signal est basé.

Cela créera un nouveau snippet ForceIndexAboveZero.java et le place dans le dossier SQ -> Blocks -> Indicators -> FoceIndex.

Lorsque nous examinons le code, nous pouvons remarquer qu'il est beaucoup plus simple que le code de l'indicateur lui-même. Il a également des paramètres, qui doivent correspondre aux paramètres de l'indicateur, et ensuite une seule méthode OnBlockEvaluate() qui doit retourner true ou false selon que le signal est valide ou non.

Veuillez noter que le modèle de signaux standard peut ne pas correspondre à votre indicateur, comme c'est le cas ici. Si vous essayez de le compiler, vous recevrez des erreurs de compilation, car l'appel de l'indicateur Strategy.Indicators.ForceIndex(Input, Period) dans la méthode OnBlockEvaluate() n'utilise pas tous les paramètres requis.

Dans les étapes suivantes, nous allons modifier le modèle defaukt pour qu'il fonctionne avec ForceIndex.

 

 

Mise en œuvre de paramètres ForceIndex corrects

Si vous regardez l'indicateur ForceIndex, vous remarquerez qu'il a des paramètres : Graphique, Période, MAMéthode, PrixAppliqué.

Nous devons copier les mêmes paramètres dans notre nouveau signal :

public class ForceIndexAboveZero extends ConditionBlock {

    @Parameter
    public ChartData Chart ;

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

    @Parameter(name="Method", defaultValue="0")
    @Editor(type=Editors.Selection, values="Simple=0,Exponential=1,Smoothed=2,Linear weighted=3")
    public int MAMethod ;

    @Parameter(defaultValue="0")
    @Editor(type=Editors.Selection, values="Close=0,Open=1,High=2,Low=3,Median=4,Typical=5,Weighted=6")
    public int AppliedPrice ;

 

ou bien vous pouvez omettre certains paramètres et utiliser sa valeur fixe à la place. La création d'un paramètre signifie qu'il sera modifiable dans l'assistant et que SQ pourra générer des valeurs aléatoires pour ce paramètre.

Il y a un paramètre supplémentaire que nous devrions ajouter :

    @Paramètre
    public int Shift ;

Contrairement à l'extrait d'indicateur, le paramètre Shift dans les signaux n'est pas utilisé par défaut et doit être explicitement ajouté.

 

Mise en œuvre de la méthode OnBlockEvaluate

Vous trouverez ci-dessous une implémentation de la méthode OnBlockEvaluate() pour notre signal. Comme vous pouvez le voir, c'est assez simple - il suffit d'obtenir l'indicateur en appelant Strategy.Indicator.ForceIndex(...) avec les paramètres appropriés, puis de récupérer sa valeur à l'heure spécifiée et de la comparer à zéro.

    @Override
    public boolean OnBlockEvaluate() throws TradingException {

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

        return (value > 0) ;
    }

C'est tout, notre nouveau signal est maintenant terminé, nous pouvons cliquer sur Compile et il devrait être compilé avec succès.

 

Mettre en œuvre ForceIndexBelowZero

De la même manière, nous devrions également mettre en œuvre ForceIndexBelowZero. La seule différence avec le signal précédent est que la comparaison en OnBlockEvaluate() sera opposée :

retour (valeur < 0) ;

Maintenant, compilez également le second signal et redémarrez SQ. Lorsque vous regarderez les blocs de construction, vous devriez voir une nouvelle section pour ForceIndex dans les signaux, avec nos deux nouveaux signaux :

 

 

 

Cet article a-t-il été utile ? L'article était utile L'article n'était pas utile

S'abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires