Souhaits pour MT5 - page 14

 
stringo:
J'ai trouvé et réparé. Merci.

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

Merci pour la correction, presque bon, pourquoi presque...

Dans l'aide, il est dit

start_time [in] L'heure de la barre correspondant au premier élément.

Et le premier élément est 0.

Mais le dernier élément est bien.

Si c'est ainsi que cela a été prévu, veuillez corriger l'aide.

 
vdv2001:

Merci pour la correction, presque bon, pourquoi presque...

Dans l'aide, il est dit

start_time [in] L'heure de la barre correspondant au premier élément.

Et le premier élément est 0.

Mais le dernier élément est bien.

Si c'est comme ça que ça doit être, réparez le problème.

Le problème est que l'heure de début et l'heure de fin dans la variante date à date peuvent être n'importe quoi - dans tous les cas, elles forment une plage. Essayons de rendre cela plus clair dans la documentation
 
stringo:
Le problème est que l'heure de début et l'heure de fin dans le cas d'une date à jour peuvent être quelconques - dans tous les cas, elles forment une plage. Essayons d'établir un schéma plus précis dans la documentation.

En d'autres termes, vous dites que les fonctions Copy* renverront, dans le cas de date à date, tous les éléments sauf celui de départ ? Je dois donc écrire l'expression comme ceci :

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

cette question est très importante pour moi.

 

Veuillez noter que lorsque vous passez à un nouveau jour, c'est le genre de chose qui se produit :

Après la mise à jour, tout se met en place.

Observer la formation de la transition vers un nouveau jour, je remarque souvent ce changement, et la chose la plus intéressante au moment de la formation de la première barre du graphique de mise à jour du jour suivant n'apporte pas de résultats. (Je peux me tromper, mais je pense que mon post précédent y est aussi pour quelque chose).

 

Bild 252.

Menu principal : <Graphique> -<Instruments graphiques> les délais sont affichés.

 
uncleVic:

Malheureusement, la dernière version de CAccountInfo n'a pas été intégrée dans la compilation.

Dans le fichier joint, vous trouverez la méthode FreeMarginCheck (jusqu'à présent uniquement pour SYMBOL_CALC_MODE_FOREX).

Si vous avez des commentaires et (ou) des idées, veuillez nous écrire.

J'ai constaté que la méthode FreeMarginCheck doit être améliorée.

1. Considérons le cas SYMBOL_CALC_MODE_FOREX :

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency() ;
bid=SymbolInfoDouble(work,SYMBOL_BID) ;
marge=offre*volume*taille_contrat/levier ;
marge=free_margin ;
pause ;

Si les valeurs des deux sommets SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) et Currency() s'avèrent être égales, alors la variable bid prend la valeur 0 et la variable margin prend la valeur free_margin.

Pour le corriger, j'ai fait ce qui suit :

cas SYMBOL_CALC_MODE_FOREX :

bid=1.0 ;

si (SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())

{

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency() ;
bid=SymbolInfoDouble(work,SYMBOL_BID) ;
}

marge=offre*volume*taille_contrat/levier ;
marge=free_margin ;
pause ;

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Puis-je demander quand les fonctions Copy*() fonctionneront normalement ?

Dans chaque nouvelle construction, ils cessent de fonctionner, est-ce que personne ne les utilise ?

 
vdv2001:

Merci pour la correction, presque bon, pourquoi presque...

Dans l'aide, il est dit

start_time [in] L'heure de la barre correspondant au premier élément.

Et le premier élément est 0.

Mais le dernier élément est bien.

Si c'est ce que vous vouliez, veuillez corriger l'aide.

Votre exemple ne montre pas clairement comment la valeur du temps 1 est acquise. La tentative de reproduire la situation n'a pas abouti.

Dossiers :
 
Yedelkin:

Il s'avère que la méthode FreeMarginCheck doit être affinée.

Merci pour le commentaire. Corrigé.
 
Yedelkin:

Il s'avère que la méthode FreeMarginCheck doit être affinée.

2. Un autre problème est le suivant. Considérons à nouveau le cas SYMBOL_CALC_MODE_FOREX :
work=SymbolInfoString( symbol,SYMBOL_CURRENCY_MARGIN)+Currency() ;
bid=SymbolInfoDouble(work,SYMBOL_BID) ;

Si la variablesymbole a une devise qui n'est pas directement cotée (par exemple CADJPY) comme devise de base, SymbolInfoDouble(work,SYMBOL_BID) donnera 0.

2.1 Par ailleurs, la raison pour laquelle le prix BID est utilisé pour le calcul de la deuxième variable (bid) n'est pas claire. Après tout, nous devons nous assurer que la devisedans laquelle les offres sont calculées est achetée audétriment de la devise de dépôt, c'est-à-dire "acheter la devise de marge, vendre la devise de dépôt". Et si dans une paire de devises particulière, la devise de dépôt est en deuxième position, alors nous devons utiliser le prix ASK pour effectuer l'opération spécifiée.

Pour rectifier la situation, j'ai fait ce qui suit :

double cours ;
//---
switch(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE))
{
cas SYMBOL_CALC_MODE_FOREX :
cours=1.0 ;

//---Vérifier si la devise du dépôt est la devise de base de la paire de devises actuelle.
//pair. Si c'est le cas, alors la valeur de la variable de cours restera 1.0.
if(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency() ;

//---Vérifier s'il existe une paire de devises dont la devise de base est la même que celle de la paire de devises.
//la devise de base de la paire actuelle, et la devise de cotation est la même que la devise de dépôt.
//(par exemple, si le dépôt est en USD, vérifiez pour une cotation directe)
si(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
cours=SymbolInfoDouble(travail,SYMBOL_ASK) ;

//--- Si la condition ci-dessus n'est pas remplie, modifiez la séquence de symboles
/devises dans la variable de travail n'est pas remplie et nous obtenons une paire de devises avec la devise de base
//correspond à la devise de dépôt, et la devise de cotation est la même que la devise de base.
//paire courante (si le dépôt est en USD, nous obtenons une paire de devises avec la cotation inverse).
sinon
{
work=Currency()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) ;
cours=1/SymbolInfoDouble(travail,SYMBOL_BID) ;
}
}
marge=cours*volume*taille_contrat/levier ;
marge=free_margin ;
pause ;

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5