Détection de 5 chiffres - page 2

 
7bit:
J'essaie d'écrire un code infaillible qui ne se casse pas.

Si vous cherchez un code infaillible, alors je ne parierais pas sur la structure de fichier symbols.raw. C'est une structure de fichier 'interne' et non documentée. Il n'y a aucune garantie qu'elle ne changera pas dans les futures versions.

 

Bonjour 7bit,

Je pense que vous avez raison d'essayer de créer un code à l'épreuve des balles....... mais il y aura toujours des limites.

Il suffit de regarder le flux de démonstration de The Collective FX, où ils testent un flux indépendant combiné de différents fournisseurs de liquidités (par opposition à un flux unique agrégé de plusieurs sources), chacun avec son propre suffixe de paire de devises (avons-nous enfin trouvé une utilité au suffixe ?), pour réaliser l'ampleur du problème. Cela signifie qu'au sein d'une même plateforme, vous pourrez choisir entre EURUSD_fx ou EURUSDm ou EURUSD_dbfx à votre guise. Rien que cela va créer un trou énorme dans votre stratégie, car certains de ces prix sont à 4 chiffres et d'autres à 5 chiffres.

Le "if (Digits == 3 || Digits == 5)" est à peu près le plus complet que vous puissiez trouver car il fonctionne sur la simple prémisse que vous n'avez que 2 types de courtiers : ceux qui ont des flux de pip entiers et ceux qui ont des flux de 1/10ème de pips. Ce cas couvre les paires de devises et les courtiers 2/3/4/5.

Pour ma propre information, avez-vous vu un cas qui serait une exception ? Dans le cas de l'or, il a toujours été coté à 2 chiffres et les nouveaux courtiers à 1/10ème de pips le cotent à 3 chiffres, donc même ce cas est bien couvert.

Je suggérerais de traiter simplement toutes les exceptions que vous trouvez comme telles et peut-être de coder en dur ce problème particulier plutôt que d'essayer de trouver une solution de fortune.

 
kennyhubbard:


Dans le cas de l'or, la cotation a toujours été à 2 chiffres et les nouveaux courtiers à 1/10ème de pip le cotent à 3 chiffres, donc même ce cas est bien couvert.

J'ai vu l'or coté avec 1 chiffre sur un courtier à 4 chiffres. Je ne connais pas le nom du courtier car c'était lorsque nous testions mon générateur de signaux IRC dans un canal IRC, mais l'un de mes testeurs a effectué des transactions sur l'or et les cotations étaient à 1 chiffre. Je lui ai demandé et il a dit que son courtier avait 4 chiffres.

C'est à ce moment précis que j'ai décidé que l'approche "3 ou 5" devait être fondamentalement défectueuse et que j'ai commencé à chercher quelque chose de mieux.
 
7bit:
J'ai vu de l'OR coté avec 1 chiffre sur un courtier à 4 chiffres. [...] C'est à ce moment précis que j'ai décidé que l'approche "3 ou 5" devait être fondamentalement défectueuse et que j'ai commencé à chercher quelque chose de mieux.

Sur Alpari UK, qui est généralement un courtier à 3/5 chiffres, l'or est coté à 2DP avec une taille de tick de 0,05. J'ai vu une référence quelque part sur ce forum à quelqu'un qui négociait des bons du Trésor américain cotés à 3DP. Cependant, dans un tel cas, la taille du tick n'aurait pas été de 0,001.

Une solution possible consiste à vérifier que la précision d'un symbole est de 3/5 chiffres et que la taille du tick est de 0,001/0,00001. Sinon, en fonction de ce que vous essayez d'obtenir, vous pouvez essayer de détecter les paires de devises en vérifiant que les six premiers caractères sont constitués de deux symboles de devises connus (c'est-à-dire en utilisant une liste codée en dur de devises reconnues). Vous pourriez également utiliser MODE_PROFITCALCMODE pour détecter les symboles forex, par opposition aux futures/equities/etc, mais je soupçonne que cela ne soit pas fiable pour tous les courtiers.

 
Quelque part entre LotSize, TickSize, TickValue, Point, Margin, etc... il y a peut-être un ratio pour résoudre ceci...
Je suis trop TDA pour le découvrir :)), mais si quelqu'un est intéressé, voici quelques liens auxquels je me réfère

- de Ais : LotSize,
- de fbj : Levier, marge, etc.
 
La théorie de la solution se trouve au bas de la page 1, à moins que vous ne la trouviez tellement stupide que vous n'avez pas pris la peine de la commenter.
 
Ruptor:
La théorie de la solution se trouve en bas de la page 1, à moins que vous la trouviez tous si stupide que vous n'avez pas pris la peine de la commenter.

Personnellement, je n'ai pas compris votre message précédent. Je pense que la question originale de 7bit demande comment gérer des scénarios tels que le suivant : "Il y a un paramètre externe où l'utilisateur entre une valeur en pips. Dans certains cas, la taille du pip que l'utilisateur a en tête est différente du MODE_TICKSIZE indiqué par le courtier - par exemple, le courtier a une taille de tick de 0,00001 mais l'utilisateur appelle un pip 0,0001. Existe-t-il un moyen fiable de lire l'esprit de l'utilisateur et de déterminer quand la valeur du pip qu'il a saisie doit être ajustée, et de combien ? Il n'existe pas de réponse purement mathématique à cette question dans le sens que vous semblez suggérer. Il s'agit d'une question de convention semi-arbitraire selon laquelle un pip sur par exemple EURUSD est généralement considéré comme étant de 0,0001 malgré le fait que la plupart des courtiers citent le symbole à 5DP.

EDIT : ...c'est pourquoi l'or, etc. est si délicat, parce qu'il y a moins de conventions convenues. Sur Alpari UK, l'or se déplace par incréments de 0,05. Si vous faisiez un sondage auprès des traders et demandiez combien de pips cela représente, je pense que vous obtiendriez un nombre raisonnable de votes pour chacune des quatre réponses suivantes : 5, 1, 0,5 et 0,05.

 
Ruptor:
Ne s'agit-il pas simplement (peut-être pas si simple en termes de mathématiques) de déterminer ce qu'un point représente par rapport à un prix donné, puis de décider dans quel chiffre il se trouve par rapport aux chiffres du prix ?
Une façon simple d'y parvenir pourrait être de prendre un prix, d'ajouter un point et de le comparer à votre multiplicateur + le même prix ; si le résultat n'est pas le même, augmentez votre multiplicateur en boucle jusqu'à ce qu'ils correspondent.

Rupteur,

Tu l'as dit de façon si subtile que je n'ai pas dû comprendre la première fois que je l'ai lu. Je n'ai toujours pas compris :)). Pourriez-vous élaborer ?

Certains courtiers comme GCI listent aussi des symboles futurs comme S&P 500, IBM, Intel et même Disney... comment cela s'applique-t-il alors ?

 
Bonjour cameofx
Une image vaut mille mots ou un code dans ce cas. pipx est ce que vous devez multiplier par Point pour obtenir 1/10000 th pour un point qui est la valeur habituelle pour le commerce.
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
Il n'est toujours pas infaillible si la devise monte ou descend de 10 fois sa valeur par rapport à sa paire mais il est imperméable aux chiffres des courtiers en forex je pense.
 
Ruptor:
[...] Ce n'est toujours pas infaillible si la devise monte ou descend de 10 fois sa valeur par rapport à sa paire mais c'est imperméable aux chiffres des courtiers en forex je pense.

Je suis franchement déconcerté par cela. Par exemple, si le prix de l'USDJPY tombait en dessous de 90, alors ce code commencerait à rapporter différentes valeurs de pipx sur un courtier 3/5DP.

En ce moment, avec l'USDJPY à environ 92,5, et avec un courtier 3/5DP où Point = 0,001, alors tmpx/pipx sont évalués comme suit :

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil() arrondit tmpx à 10
  • pipx est arrondi à 10

Si le cours de l'USDJPY tombait en dessous de 90 (par exemple 89,5), l'évaluation se ferait comme suit :

.
  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil() arrondit tmpx à 9
  • pipx reste fixé à 1, et non à 10

En d'autres termes, pour des raisons que je ne comprends pas du tout, la définition d'un pip par ce code est sensible aux changements de prix, et son multiplicateur passe d'un ordre de grandeur à un autre en fonction du prix, et non (simplement) en fonction des paramètres du courtier. Il aurait donné des résultats différents à différents moments au cours de la semaine dernière. Sur un courtier 2/4DP, pipx serait resté à 1 tout au long de la semaine, plutôt que de varier entre 1 et 10.
Raison: