Prix par tuyau - page 6

 
jjc:
J'ajoute une précision au "presque toujours" de Gordon, je ne peux pas penser immédiatement à un instrument forex où ce n'est pas vrai, mais c'est rarement vrai lorsque les courtiers offrent des métaux, des indices, etc. Par exemple, sur le contrat d'or d'Alpari, la TICKSIZE est de 0,05 (et le Point est de 0,01). Pour autant que je sache, MarketInfo(Symbol(),MODE_POINT) = MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS))

jjc, Merci pour votre réponse :

Je pense que c'est parce que nous utilisons le décimal comme convention mathématique pour calculer et percevoir les nombres. Si nous utilisions plutôt l'hexadécimal par exemple, nous n'aurions pas la commodité du point terminé en un. Par exemple, pour convertir le nombre de mètres que représentent 5 cm, il suffit de le multiplier par le facteur de conversion d'un centième. ( 5 cm * 0,01 --> 0,05 m ) -- parcourant un compte complet de 10 [unités de cm] -- dix fois. Mais si nous utilisons un hexadécimal. Nous aurions dû parcourir un compte complet de 6 - 16 fois avec un module de 4.

Un Point est donc un facteur de conversion décimal. Si la convention du marché suggère que, par exemple, le rapport de prix actuel de GBPUSD est de 1,3535, c'est uniquement parce que nous/ils avons jugé que la valeur de conversion décimale de 5e place de l'achat de 1 GBP avec 1,3535 USD est insignifiante pour l'économie commerciale. Mais si le commerce était plus important (en valeur de verges peut-être) et fréquent. Alors, nous/ils chercherions à obtenir le centime le moins significatif que le rapport de prix devrait avoir. Comme 1,3535665, par exemple.

Je suis donc d'accord pour dire que le Point sera toujours = MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS)) comme vous le mettez en équation.

EDIT : Désolé les gars, le premier jet est passé. C'était et c'est toujours trop tard pour le poster. J'espère que c'est mieux...

 
1005phillip:

Inclus dans le fichier rar ci-joint. Je suis sûr que vous aurez des questions sur l'utilisation, n'hésitez pas.

Phillip, je ne peux pas vous remercier assez ! C'est trop génial ! J'ai besoin d'un peu de temps pour comprendre tout ça. Mais à première vue, les commentaires sont tous clairs et je n'ai aucun problème à comprendre le fichier Excel. C'est un ajout précieux à mon arsenal. C'est très généreux de votre part de partager ce morceau de travail à la communauté Phillip. Merci encore !

C'est exact. Mais le pourcentage d'erreur est simplement l'écart en points divisé par le prix demandé (~0,02%-0,05% selon la paire de devises)... cela n'a d'importance que si vous voulez tenir compte du moindre centime.

C'est très intéressant !

Telle que votre question est actuellement rédigée, la réponse facile est oui - chaque croisement sans USD répond à votre critère. Mais je pense que vous vouliez poser une question différente - à savoir, ai-je rencontré un courtier qui propose une paire de devises croisées et qui, en même temps, ne propose pas la paire de devises requise qui contient la devise de contrepartie de la paire croisée et la devise de la dénomination du compte ?

La réponse à cette question est non, et pour une bonne raison, car un courtier ne peut tout simplement pas le faire. La raison pour laquelle un courtier ne peut pas le faire est qu'il est lié par les mêmes connexions de prix fondamentales des équations détaillées ici... en d'autres termes, il doit avoir accès aux mêmes informations de prix afin de calculer et de rapporter les évaluations de vos positions en devises croisées.

Par exemple, disons que vous avez un compte libellé en euros et que vous achetez un lot de GBPUSD. La devise de contrepartie du GBPUSD est l'USD. Ainsi, pour calculer votre profit/perte sur votre position GBPUSD, votre courtier (et vous) devez également connaître le prix de l'EURUSD. (l'EUR est la devise de votre compte, l'USD est la devise de contrepartie de la paire croisée sur laquelle vous avez ouvert une position).

Si le courtier ne propose pas l'EURUSD comme paire, le terminal MT4 ne pourra pas calculer les profits/pertes flottants de votre position sur une base tick-by-tick. Par conséquent, vous ne trouverez jamais un courtier vous offrant la possibilité de négocier une paire croisée (relative à la dénomination de votre compte) sans offrir également la paire de devises primaire qui contient la devise de votre compte.

Oui, votre dernière interprétation de ma question est la bonne. Mauvaise formulation de ma part. Cela ajoutera un peu plus de lumière à la caractéristique des paires de devises. Merci...

camée

 
gordon:
"Un 'Point' (MODE_POINT) est le plus petit changement de prix possible", donc évidemment il doit se terminer par un 1.

Oui, c'est une explication un peu stupide. Mais j'essayais seulement de souligner que le point sera typiquement différent du TICK_SIZE puisque le TICK_SIZE ne se terminera pas toujours par 1. Le courtier le redimensionnera en fonction de ce qu'il considère être la valeur de la fluctuation / valeur économique.

"Comme je l'ai déjà dit, bien que la documentation affirme "Taille de coche en points", c'est évidemment inexact. C'est aussi en termes de prix."

Je ne comprends pas la partie en gras Gordon... Si vous voulez bien m'expliquer...

"MODE_TICKVALUE : Valeur actuelle de la devise du compteur en conversion vers son ratio de base."

Cette définition n'est pas claire... (peut-être que l'anglais n'est pas votre langue maternelle ?).

Oui, c'est ma deuxième langue. Bien que cela ne se soit pas avéré être un obstacle quand il s'agit de produire des chaînes de bavardages absurdes dans le passé ou l'avenir pour cette question :))))

Je vais essayer de l'expliquer dans mon prochain message. Je m'excuse car je n'ai pas beaucoup de temps. Merci beaucoup, comme toujours, Gordon !
 
cameofx:
"Comme je l'ai déjà dit, bien que la documentation affirme "Taille de coche en points", c'est évidemment inexact. C'est aussi en termes de prix."

Je ne comprends pas la partie en gras Gordon... Si vous voulez bien m'expliquer...

Disons que Point = 0.00001. Si MODE_TICKSIZE était en points, alors par exemple nous aurions MarketInfo(Symbol(),MODE_TICKSIZE) retourner 1, ce qui serait interprété comme 1*Point=1*0.00001=0.00001. Mais ce n'est pas ce que renvoie MarketInfo(Symbol(),MODE_TICKSIZE), il renvoie (par exemple) 0.00001, donc il renvoie une valeur qui représente le prix et non les points. La documentation indique "Tick size in points", ce qui est évidemment inexact (probablement une erreur de traduction du russe).
 
SDC:

J'ai lu ce fil avant qu'il ne soit rempli d'informations contradictoires.

BarrowBoy - un changement dans l'offre et/ou la demande.

Rosh - un événement de "nouveau prix".

kminler - chaque tick représente une transaction fermée

puncher - un tick est un pip

Après avoir lu d'autres fils et discussions sur les ticks, je suis arrivé à la conclusion qu'un tick n'a pas de valeur spécifique car tout ce qu'il contient est une nouvelle offre et une nouvelle demande, qui peuvent être différentes d'un pip par rapport au dernier tick, pas de pips différents ou plusieurs pips de différence, donc en soi le tick ne porte aucune différence de prix, seulement un nouveau prix.

Mais maintenant que j'ai cherché comment calculer la valeur d'un pip, je tombe sur MarketInfo MODE_TICKVALUE qui semble être une valeur fixe statique, ce qui en soi contredit ce que la plupart des gens semblent dire à propos d'un tick, à savoir qu'il transmet simplement un changement de prix, sans montant spécifique, alors comment peut-il y avoir une telle chose comme MODE_TICKVALUE, cela n'a aucun sens, à moins que la plupart des gens aient tort et qu'un tick ait en fait une valeur spécifique égale à un pip, mon problème est le manque de documentation appropriée, comment peut-on savoir ce qui est juste et ce qui ne l'est pas, les fils de discussion du forum contiennent quelques informations, dont la plupart sont basées sur des opinions ou des suppositions plutôt que sur des faits, ce qui dans la plupart des cas n'a pas d'importance, mais lorsque l'on essaie d'écrire un programme basé sur des informations aussi sommaires et contradictoires, cela rend la vie très difficile.


Oui, c'est aussi ma préoccupation.

Je reviens juste ici pour suivre mes recherches, je vais devoir relire tout ça demain. J'ai déjà des problèmes de lecture à cause d'un manque de sommeil et de trop de temps passé devant l'ordinateur.

 

Wow, je viens de rattraper tout ce que j'ai lu ici. Je suis vraiment épuisé et je ne sais toujours pas comment aborder le problème.

Donc, je dirai simplement, maintenant que nous semblons comprendre mes préoccupations, que je voudrais une méthode pour calculer avec précision la valeur du mouvement du prix d'une des plus petites valeurs à la suivante (c'est-à-dire de x.0001 à x.0002) selon n'importe quel symbole sur lequel l'EA pourrait être, il devrait calculer l'effet de levier impliqué aussi. (par exemple, si le contrat est de 100 000 et que l'effet de levier est de 400:1, je peux m'attendre à ce que l'EURUSD coûte 10 ou autre.


En retour, j'ai 2 formules de gestion de l'argent de gourous du trading manuel que je peux appliquer en utilisant votre fonction pour obtenir la valeur du pip et créer 2 ensembles de fonctions de gestion de l'argent. Je recherche également d'autres méthodes. L'idée que j'ai en tête est de créer un paquet de gestion de l'argent contenant des choix basés sur divers gourous et l'utilisateur peut choisir celui qui fonctionne pour lui.

Je serais donc très reconnaissant si quelqu'un pouvait trouver une fonction qui me donne la valeur du pip. Honnêtement, je suis surpris que ce ne soit pas déjà une fonction standard dans le MT4.

Si le point est la valeur de disons 1.1234 - 1.1233 et que vous pouvez obtenir la valeur monétaire de ce résultat, alors c'est ce que je recherche. Pour moi, le terme point est aussi bon que le terme pip.

J'aimerais pouvoir modifier la valeur de l'effet de levier, ce qui devrait être un paramètre.

Ok, je suis maintenant debout depuis environ 53 heures, j'ai besoin de me reposer. Nous avons été occupés à marteler nos nouvelles versions et je suis totalement lessivé.

 
LEHayes:

Donc, je dirai simplement, maintenant que nous semblons comprendre mes préoccupations, que je voudrais une méthode pour calculer avec précision la valeur du mouvement du prix de l'une des plus petites valeurs à la suivante (c'est-à-dire de x.0001 à x.0002) en fonction du symbole sur lequel l'EA se trouve.

Eh bien, en résumant partiellement ce qui a été dit sur 6 pages, le plus petit mouvement possible du prix est donné par MODE_TICKSIZE, et sa valeur monétaire par lot entier est donnée par MODE_TICKVALUE. Avec trois mises en garde :

  • MODE_TICKSIZE et MODE_TICKVALUE peuvent varier entre les courtiers en fonction du nombre de décimales utilisées. Par exemple, Alpari (5DP) rapporte TS comme 0.00001 et TV comme 1.00 sur EURUSD. FXDD rapporte TS comme 0.0001, et TV comme 10.00. Les tentatives de standardisation de MODE_TICKSIZE entre les courtiers sont une question distincte, par exemple, comme discuté dans https://www.mql5.com/en/forum/124692.
  • MODE_TICKVALUE varie dans le temps si la devise de cotation du symbole est différente de votre devise de dépôt (par exemple, sur un compte en USD, EURUSD a une TICKVALUE fixe mais USDJPY est flottant).
  • Cloudbreaker a enregistré des cas où le TICKSIZE varie (par exemple, le TICKSIZE est signalé comme étant de 0,0002 et 0,0001 sur des appels successifs, avec une variation correspondante du TICKVALUE). Je n'ai jamais vu cela personnellement, sur 15 courtiers différents.
 
gordon:
Disons que Point = 0,00001. Si MODE_TICKSIZE est en points, alors nous pouvons par exemple demander à MarketInfo(Symbol(),MODE_TICKSIZE) de renvoyer 1, ce qui serait interprété comme 1*Point=1*0.00001=0.00001. Mais ce n'est pas ce que renvoie MarketInfo(Symbol(),MODE_TICKSIZE), il renvoie (par exemple) 0.00001, donc il renvoie une valeur qui représente le prix et non les Points,. Il s'agit manifestement d'une erreur dans la documentation (probablement une erreur dans la traduction du russe).
Je ne suis pas d'accord Gordon, MODE_TICKSIZE est en points -- Point(s) pour être précis. MODE_TICKSIZE sera toujours un multiple X de Point. Que ce soit 1, 2, 5, 35, etc. Le point, à mon avis, est un facteur de conversion double qui nous permet d'atteindre la dernière décimale significative du rapport de prix. Si un courtier juge bon d'offrir la 6ème décimale comme une aubaine à offrir au client, alors le point sera 0,000001 et les chiffres = 6.
Dans ce cas, les chiffres représentent le point en nombre entier.
 
LEHayes:

Donc, je dirai simplement que, maintenant que nous semblons comprendre mes préoccupations, l'offre tient toujours : j'aimerais une méthode pour calculer avec précision la valeur du mouvement du prix d'une des plus petites valeurs à la suivante (c'est-à-dire de x.0001 à x.0002) en fonction de n'importe quel symbole sur lequel l'EA peut se trouver, il devrait également calculer l'effet de levier impliqué. (par exemple, si le contrat est de 100 000 et que l'effet de levier est de 400:1, je peux m'attendre à ce que l'EURUSD coûte 10 ou ce que vous voulez.

Vérifiez les fichiers include contenus dans le fichier rar que j'ai joint à la page 5... il fait les deux, à moins que je ne comprenne mal votre question.

edit : spécifiquement les extraits de code suivants.

Pour le tickvalue en utilisant le fichier include intitulé "Analyze Currency Symbol 2010.06.07.mqh" vous devez :

1. vous appelez la fonction int SymbolType()

int CalculatedSymbolType=SymbolType();

2. appelez la fonction CounterPairForCross()

string CalculatedCounterPairForCross=CounterPairForCross();


3. puis vous calculez la tickvalue au prix du marché actuel pour le symbole :

   switch(CalculatedSymbolType) // Determine the tickvalue for the financial instrument based on the instrument's SymbolType (major, cross, etc)
      {
      case 1   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(Symbol(),MODE_BID),6)," (Tick value in the deposit currency - base)"); break;
      case 2   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - counter)"); break;
      case 3   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
      case 4   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
      case 5   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(CalculatedCounterPairForCross,MODE_BID)*MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Counter to Counter)"); break;
      default  :  Print("Error encountered in the SWITCH routine for calculating tickvalue of financial instrument ",Symbol()); // The expression did not generate a case value
      }


Dans le cas d'un effet de levier, en utilisant le fichier include intitulé "Analyze Currency Symbol 2010.06.07.mqh", vous devez.. :

1. appeler la fonction int SymbolType()
int CalculatedSymbolType=SymbolType();

2. Appelez la fonction BasePairForCross().

string CalculatedBasePairForCross=BasePairForCross();


3. puis vous calculez l'effet de levier spécifique au symbole au cours actuel du marché pour le symbole en appelant SymbolLeverage() :

int   CalculatedLeverage=SymbolLeverage();   // Leverage for USDJPY is set to 100:1
Print("Leverage for ",Symbol()," is set at ",CalculatedLeverage,":1");
 
cameofx:
Je ne suis pas d'accord Gordon, MODE_TICKSIZE est en points -- Point(s) pour être précis. MODE_TICKSIZE sera toujours un multiple X de Point. Que ce soit 1, 2, 5, 35, etc. [...]
Cela semble être une question de sémantique... La convention commune stipule que lorsque nous disons qu'une "valeur est en x", nous voulons dire que x est "l'unité" utilisée. Dans ce cas, le point n' est pas l'unité utilisée, donc MODE_TICKSIZE n' est pas en points. Je suis d'accord pour dire que c'est un multiple de Point, mais c'est juste parce que Point est le plus petit changement de prix possible, donc par définition c'est un multiple de Point.
Raison: