Documentation

Dernière mise à jour le 19. 6. 2015 par Mark Fric

Créer une nouvelle fonction d'analyse d'hypothèses

QuantAnalyzer 4 peut être étendu pour utiliser vos propres valeurs statistiques personnalisées, les méthodes What If, Equity ou Monte Carlo, de nombreuses autres parties du programme peuvent également être étendues par des snippets...

Toutes ces méthodes dans le programme sont entièrement dynamiques, chaque méthode (y compris les méthodes par défaut) est une classe Java indépendante. extrait - mettre en œuvre 1 ou 2 fonctions simples qui manipulent les commandes.
Vous pouvez vous inspirer de la façon dont les méthodes existantes sont fabriquées lorsque vous mettez en œuvre votre propre idée.

Pour étendre QuantAnalyzer, vous devez utiliser la fonction intégrée QuantEditor. Il s'agit d'un éditeur de code qui vous permet de créer et de modifier des classes qui seront ensuite utilisées dans QuantAnalyzer.
Le principe est très similaire à celui des indicateurs personnalisés dans votre plateforme de trading, mais le codage est beaucoup plus simple.

Exemple - création d'une nouvelle fonction What -If

Les cas "What If" vous permettent de tester des scénarios hypothétiques - par exemple, que se passerait-il si vous n'effectuiez des transactions que du lundi au jeudi ? Ou si vous ne faisiez qu'une seule transaction par jour ?

Avec QuantEditor, vous pouvez créer vos propres cas comme ceux-ci. Dans notre exemple, nous allons créer un cas simple qui prend une transaction sur deux.
Ce scénario n'est pas très utile, mais il montre à quel point il est simple d'ajouter de nouvelles fonctionnalités aux scénarios d'hypothèses.

Nous commencerons par ouvrir QuantEditor dans la barre d'outils.

QuantEditor s'ouvre dans une nouvelle fenêtre. Comme nous voulons créer un nouveau cas d'analyse d'hypothèses, nous cliquons sur nouveau dans la barre d'outils QE. Nous choisirons l'option What If et nommerons notre fichier TakeEverySecondTrade.

Après avoir cliqué sur OK, l'éditeur crée une nouvelle classe en utilisant un modèle de travail pour la classe d'hypothèses qui contient déjà le code générique de la classe d'hypothèses.

La classe ne possède que deux méthodes - le constructeur TakeEverySecondTrade() et fonction filtre() qui filtre la liste des commandes en fonction de nos critères.

Examinons d'abord le constructeur.
Son nom est identique à celui de notre fichier et il est appelé au début lorsque cette classe est chargée.

En général, il faut définir le nom de la classe - c'est sous ce nom qu'elle apparaîtra dans les options d'hypothèses de l'analyseur d'EA. Dans notre cas, nous utiliserons "Take Every Second Trade".
Si notre classe a besoin de certains paramètres, nous pouvons les définir ici en utilisant des appels tels que addIntParameter(), addFloatParameter, addComboBoxParameter().
Vous trouverez la description de toutes ces fonctions dans la section Aide de QuantEditor.

Dans notre cas, nous n'avons pas besoin de paramètres et notre constructeur ressemblera à ceci :

public TakeEverySecondTrade() {
   setName("Prendre une transaction sur deux") ;
   setFormatedName("Prendre une transaction sur deux") ;
}

Nous devons maintenant définir notre filtre() fonction. C'est dans cette fonction que nous devons spécifier ce que nous attendons de la classe.
Cette fonction est appelée lorsque vous sélectionnez cette hypothèse. Elle reçoit la liste de tous les ordres triés par heure d'ouverture. Vous pouvez manipuler la liste des ordres ou un ordre particulier, ou encore supprimer un ordre de la liste si vous le souhaitez.

Le code de base (illustré ci-dessous) ne fait rien, il parcourt simplement la liste des commandes sans rien faire.

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

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

// todo - votre action personnalisée
// les ordres peuvent être ignorés ou manipulés ici
}
}

Dans notre cas, nous voulons supprimer une commande sur deux dans la liste, de sorte qu'il ne reste que la moitié des commandes dans la liste, ce que nous pouvons faire avec le code suivant :

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

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

// si la variable isSecondOrder = true, l'ordre sera supprimé des résultats.
if(isSecondOrder) i.remove() ;

// la variable isSecondOrder prend la valeur opposée, de true à false, de false à true
isSecondOrder = !isSecondOrder ;
}
}

Explication du code :
- Nous créons d'abord la variable isSecondOrder et lui attribuons la valeur false.
- puis, au fur et à mesure que nous parcourons les commandes, nous vérifions si cette variable est vraie et, si c'est le cas, nous supprimons la commande.
- après chaque vérification, nous fixons la variable à la valeur opposée (de faux à vrai, de vrai à faux) et nous passons à l'ordre suivant

Ce code supprimera effectivement une commande sur deux de la liste des commandes.

Nous y sommes. Nous en avons terminé.

Nous pouvons maintenant cliquer sur Compiler et notre nouvelle classe devrait être compilée sans erreur.

Revenez maintenant à l'EA Analyzer, allez à Et si et vous devriez voir la nouvelle fonctionnalité que nous venons de mettre en place :

Appliquez-le à une stratégie et vous devriez voir qu'elle n'aura que la moitié des transactions.

Dans cet exemple, nous avons montré comment EA Analyzer 3 permet d'ajouter de nouvelles fonctions personnalisées. Et si ? fonction. Vous pouvez créer de nouvelles Monte Carlo ou Contrôle des fonds propres d'une manière très similaire.

Si vous créez une fonction intéressante, n'hésitez pas à la partager sur notre site. forum avec d'autres.

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