Caractéristiques du langage mql5, subtilités et techniques - page 8

 

Il est dit dans l'aide

ENUM_SYMBOL_CALC_MODE

Identifiant

Description

Formule

SYMBOLE_CALC_MODE_FOREX

Mode Forex - calcul des bénéfices et des marges pour le Forex

Marge : Lots*Taille_contrat/Levage

Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots

SYMBOLE_CALC_MODE_FUTURES

Mode Futures - calculer la marge et le profit pour les futures

Marge : Lots *InitialMargin*Percentage/100

Profit : (prix de clôture - prix d'ouverture) * prix du pic / taille du pic * lots.

SYMBOLE_CALC_MODE_CFD

Mode CFD - calcul de la marge et du bénéfice pour CFD

Marge : Lots *Taille du contrat*Prix du marché*Pourcentage/100

Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots

SYMBOLE_CALC_MODE_CFDINDEX

Mode index CFD - calcul de la marge et du bénéfice pour les index CFD

Marge : (Lots*Taille du contrat*Prix du marché)*Prix du pic/Taille du pic

Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots

SYMBOLE_CALC_MODE_CFDLEVERAGE

Mode Levier CFD - calcul de la marge et du profit pour les CFD lorsque l'on négocie avec un levier.

Marge : (Lots*Taille du contrat*Prix du marché*Pourcentage)/Levage

Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots

SYMBOL_CALC_MODE_EXCH_STOCKS

Mode échange - calcul de la marge et du profit pour la négociation de titres en bourse

Marge : Lots*Taille du contrat*Prix ouvert

Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots

SYMBOLE_CALC_MODE_EXCH_FUTURES

Mode Futures - calcul de la marge et du profit pour la négociation de contrats à terme sur la bourse.

Marge : Lots*InitialMargin ou Lots*MaintenanceMargin

Profit : (prix de clôture - prix d'ouverture)*Lots*TickPrice/TickSize

SYMBOLE_CALC_MODE_EXCH_FUTURES_FORTS

Mode FORTS Futures - calcul de la marge et du profit pour la négociation de contrats à terme sur FORTS. La taille de la marge peut être diminuée par la valeur MarginDiscount selon les règles suivantes :

1. Si le prix d'une position longue (ordre d'achat) est inférieur au prix calculé, MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2. Si le prix d'une position courte (ordre de vente) est supérieur au prix de règlement, alors MarginDiscount = Lots*((PriceOrder-PriceSettle)*TickPrice/TickSize)

où :

    • PriceSettle - prix de règlement (compensation) de la session précédente ;
    • PriceOrder - prix moyen pondéré d'une position ou prix d'ouverture spécifié dans l'ordre (commande) ;
    • TickPrice - prix du tick (coût du changement de prix d'un point) ;
    • TickSize - taille du tick (pas minimum de changement de prix)

Marge : Lots*InitialMargin ou Lots*MaintenanceMargin

Profit : (prix de clôture - prix d'ouverture)*Lots*TickPrice/TickSize

SYMBOLE_CALC_MODE_SERV_COLLATÉRAL

Mode collatéral - l'instrument est utilisé comme un actif non négociable dans le compte de négociation. La valeur de marché de la position ouverte est calculée sur la base du volume, du prix actuel du marché, de la taille du contrat et du ratio de liquidité. La valeur est comptabilisée dans les actifs, qui sont ajoutés aux capitaux propres. Par conséquent, les positions ouvertes sur ces instruments augmentent la marge libre et servent de garantie supplémentaire pour les positions ouvertes sur les instruments négociés.

Marge : non

Bénéfice : non

Valeur marchande : Lots*Taille du contrat*Prix du marché*Taux d'équité

 
fxsaber:

Il est dit dans l'aide.

Avec tout le respect que je vous dois, j'ai l'intention de vous ramener à votre lecture

P.S.

Vous pouvez l'obtenir, mais si nous utilisons l'AUDCAD, nous obtiendrons la marge en monnaie AUD, alors que le compte est libellé en dollars. Si vous utilisez le prix AUDUSD, vous obtiendrez le montant de marge requis, mais ce n'est pas universel et mauvais, car il y a des comptes avec des préfixes et des suffixes, et là commence toute une histoire. Il se peut aussi qu'il n'y ait tout simplement aucune paire ouverte dans l'aperçu du marché et que le calcul soit une impasse.

Un programme qui fonctionne avec de l'argent (selon les développeurs) ne peut pas le calculer. L'ancien, mauvais et lent mt4 pouvait fonctionner avec de l'argent, mais le nouveau et fantaisiste mt5 ne le peut pas. Comment cela ?

 
fxsaber

Utilisez cette formule à partir du lien :

Par exemple, si nous calculons la garantie pour CADJPY, nous obtenons la garantie en CAD.

SymbolInfoDouble("CADJPY",SYMBOL_TRADE_CONTRACT_SIZE) / AccountInfoInteger(ACCOUNT_LEVERAGE)*0.7625 // СADUSD

Je peux voir0.7625, c'est le prix CADUSD mais le terminal n'a même pas cette paire dans ses calculs.

Est-il si difficile de transférer la fonction"MODE_MARGINREQUIRED" vers mt5 en utilisant la méthode du "copier-coller", facilitant ainsi la vie des développeurs ?

 
Artyom Trishkin:
J'aimerais que le calcul soit indépendant du type de programme.
Les développeurs pensent que le calcul de la marge (et certaines autres fonctions d'information) est une fonction commerciale et devrait être interdit dans les indicateurs. J'ai lancé un fil de discussion sérieux sur ce sujet - ses modérateurs l'ont immédiatement coupé, comme d'habitude, de manière anonyme. Maintenant je m'en fiche, j'ai posté un indicateur châtré sans marge dans KB.
 
Vitaly Muzichenko:

Avec tout le respect que je vous dois, j'ai l'intention de vous ramener à votre lecture

Je l'admets, j'étais inattentif. D'une certaine manière, j'ai toujours trouvé le calcul des marges inutile. Surtout dans les indicateurs. Où peut-elle être nécessaire dans les indicateurs ?

Je pense que la solution est très simple. Quand je serai libre, j'y réfléchirai.

 
Vitaly Muzichenko:

Vous pouvez l'obtenir, mais si nous utilisons AUDCAD, nous obtiendrons la marge en monnaie AUD, et le compte est libellé en dollars. Si nous utilisons le prix AUDUSD, nous obtenons la marge requise, mais ce n'est pas universel et mauvais, car il y a des comptes avec des préfixes et des suffixes et là commence toute une histoire. Il se peut aussi qu'il n'y ait tout simplement aucune paire ouverte dans l'aperçu du marché et que le calcul tombe à l'eau.

Et quel sera le rendement des quatre si l'AUDUSD ne figure pas dans l'aperçu du marché ?

Pour la tâche spécifique de réflexion sur la marge dans l'indicateur, il est possible de construire une béquille, en tenant compte des préfixes et des suffixes (ou en utilisant un conseiller auxiliaire). Il y a tout pour le commerce.

 
Andrey Khatimlianskii:

Et quel sera le rendement des quatre si l'AUDUSD ne figure pas dans l'aperçu du marché ?

Pour la tâche spécifique de l'affichage des marges dans l'indicateur, on peut construire une béquille qui prend en compte les préfixes et les suffixes (ou utiliser un EA auxiliaire). Et pour le commerce, tout semble être là.

Four retournera"MODE_MARGINREQUIRED" )

Alexey Volchanskiy:
Je pense que le calcul de la marge (et autre chose à partir de fonctions informationnelles) est une fonction de trading et devrait être interdit dans les indicateurs. J'ai lancé un fil de discussion sérieux sur ce sujet - ses modérateurs l'ont immédiatement coupé, de manière anonyme comme toujours. Maintenant je m'en moque, j'ai posté un indicateur châtré sans marge dans KB.

Est-ce vraiment du commerce ? ))) Bien que oui, les tirs ne sont pas interdits. Je me demande ce qu'il négocie, s'il ouvre ou ferme, ou s'il modifie simplement les ordres ?

fxsaber:

Je l'admets, j'étais inattentif. Je n'ai jamais eu besoin de calculer les marges. De plus, il n'est pas nécessaire dans les indicateurs. Où cela peut être nécessaire dans les indicateurs ?

Je pense que la solution est très simple. Quand je serai libre, je l'inventerai.

En plus de la MA et des stochastiques, il existe des indicateurs informatifs. Par exemple, l'indicateur d'information permet de connaître le dépôt avant de faire une transaction (observer MM), de calculer le lot et de voir s'il correspond aux conditions de votre TS ou non pour entrer dans la transaction et attendre un autre signal. Et ce n'est qu'un seul exemple de son utilisation.

 
fxsaber:

Je pense que la solution est très simple. Je trouverai une solution quand je serai libre.

La solution est venue immédiatement.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) /
        (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Il s'agit d'un calcul pour le FOREX. Le reste est par analogie.
 
fxsaber:
La solution est venue tout de suite.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
         SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
C'est le calcul pour le FOREX. Le reste est similaire.
Merci beaucoup, il y a toujours un bug avec les paires de yens.
 
Vitaly Muzichenko:
Merci beaucoup, il y a toujours un bug avec les paires de yens.
Oui, j'ai un peu déconné. Maintenant, c'est correct.