Répondre

Ninjatrader Stop Order Rounding Problem

8 réponses

xlhuang1995

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 8 ans #114993

J'étais en train d'exécuter SQ et j'ai trouvé quelques candidats intéressants pour l'EURUSD. J'ai donc exporté ces stratégies vers ninjatrader mais lorsque je les ai testées dans ninjatrader, elles n'ont effectué aucune transaction avec seulement quelques ordres stop annulés à 1,0000 pour l'entrée (voir la capture d'écran ci-jointe). Ces stratégies utilisaient toutes un ordre d'entrée stop. 

 

Dans le code, j'ai trouvé que SQ utilisait price = roundprice() pour le prix d'entrée. J'ai donc ajouté Print(price) sur la ligne suivante et il a imprimé des lignes de 1 lorsque j'ai relancé le backtest.

 

J'ai ensuite supprimé roundprice() et laissé le prix non arrondi. De manière surprenante, les prix ont été arrondis correctement en fonction de mon ticksize (même sans roundprice()).

 

Ensuite, j'ai calculé roundprice() avec mon cerveau, selon SQMangedStrategy, qui est également passé par round() et _round (), et j'ai obtenu le prix correct. Cependant, la stratégie a continué à me donner 1.00000 lorsque j'ai exécuté le backtest.

 

Cela n'a aucun sens. Je n'arrive pas à comprendre pourquoi il me donne toujours 1,00000 alors que le prix correct devrait être quelque chose comme 1,42365.

 

BTW, mon ticksize était de 0.00005. Je travaillais sur Interactive Brokers.

 

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 8 ans #136454

J'ai essayé de reproduire votre problème en utilisant les données des contrats à terme 6E (tick size 0.00005) et une stratégie générée aléatoirement en utilisant uniquement l'ordre à cours limité et le problème se pose également pour moi. Aucune transaction n'a été exécutée, seuls les ordres ayant un prix limite de 1,0000. Mark va examiner ce qui peut être fait.

0

xlhuang1995

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 8 ans #136613

Oui, je pense que j'en suis arrivé au point. Il s'agit d'un bug dans la SQManagedStrategy, une stratégie importée dans NT par SQ.

 

Lorsque NT calcule le nombre de décimales dans la taille du tick, il est CONÇU pour diviser la taille du tick au niveau de la décimale. Dans mon exemple, 0.00005 devient 0 et 00005. Il prend ensuite ce dernier et compte le nombre de chiffres qu'il y a.

 

Cependant, la taille du tick que NT obtient, puis divise, est en NOTATION SCIENTIFIQUE. Il ne peut donc pas la diviser au niveau de la virgule car il n'y a pas de virgule dans 5E10-5. C'est ce qui cause le problème.

 

J'ai joué avec le code de SQManagedStrategy, et j'ai corrigé ce problème moi-même. C'était une correction facile, mais je ne comprends pas comment les ingénieurs de SQ ont pu faire une erreur aussi stupide. Et comment les gens peuvent-ils utiliser SQ pour générer des stratégies forex avec une petite taille de tick à utiliser dans NT ? Ou bien personne n'utilise SQ avec NT ?

0

mabi

Client, bbp_participant, communauté, 261 réponses.

Visiter le profil

Il y a 8 ans #136706

"StrategyQuant supporte désormais pleinement la plateforme de trading NinjaTrader ! ? ?

0

kazex

Client, bbp_participant, communauté, 6 réponses.

Visiter le profil

Il y a 7 ans #143048

J'ai exactement le même problème, quelle est la modification à apporter à SQManagedStrategy pour le résoudre ?

 

Merci.

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 7 ans #143051

Bonjour,

 

ceci pourrait aider à résoudre le problème

 

Dans NT, ouvrez Tools -> Edit NinjaScript -> Edit Strategy, trouvez SQManagedStrategy et trouvez la méthode Initialize().
Il y a une ligne :

string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0') ;           

le remplacer par une ligne :

string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0') ;

et il devrait commencer à fonctionner correctement.

0

mabi

Client, bbp_participant, communauté, 261 réponses.

Visiter le profil

Il y a 7 ans #143078

Merci Tomas. Ce que je ne comprends pas, c'est pourquoi le modèle sur lequel SQ génère le code n'est pas mis à jour.

0

kazex

Client, bbp_participant, communauté, 6 réponses.

Visiter le profil

Il y a 7 ans #143087

Bonjour,

ceci pourrait aider à résoudre le problème

Dans NT, ouvrez Tools -> Edit NinjaScript -> Edit Strategy, trouvez SQManagedStrategy et trouvez la méthode Initialize().
Il y a une ligne :

string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0') ;

le remplacer par une ligne :

string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0') ;

et il devrait commencer à fonctionner correctement.

J'ai fait le changement mais le problème persiste, j'ai imprimé le prix et les valeurs semblent avoir du sens mais les transactions entre SQ et NT sont différentes, cela n'arrive pas avec les ordres de marché, seulement avec les ordres stop (ordre d'entrée ou stop trailing).

Enviado desde mi iPhone utilizando Tapatalk

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

il y a 6 ans #143275

Veuillez m'envoyer le fichier de stratégie STR à [email protected]. Je dois vérifier pourquoi cela se produit avec votre stratégie, merci.

0

Affichage de 8 réponses de 1 à 8 (sur un total de 8)