Erreurs, bugs, questions - page 1153

 
Renat:
Comment exécuter un programme installé dans Windows 8.1 ? Avec /portable ?
Non. Je l'exécute généralement sans /portable. Non seulement cela, mais pour être sûr, j'ai installé et désinstallé MT5 deux fois. Après la désinstallation, j'ai également supprimé manuellement les dossiers dans AppData.
 

Si vous travaillez sous Windows 8.1 en tant qu'utilisateur normal, le terminal MT5 ne se souvient pas des numéros de compte saisis. De plus, MetaEditor ne sauvegarde pas l'état du stockage MQL5. Ce problème ne peut être résolu que si vous travaillez en tant qu'administrateur ou si l'option "Exécuter ce programme en tant qu'administrateur" est sélectionnée dans les propriétés de metaeditor64.exe et de terminal64.exe.

Mais dans ce cas, lorsque je fonctionne sous un compte utilisateur normal, je dois entrer le mot de passe de l'administrateur - est-ce correct, compte tenu des problèmes de sécurité ?

P.S. Le terminal est le plus récent - mais le problème n'est pas nouveau.


 

Bon après-midi.

J'ai un indicateur assez gourmand en ressources (qui est calculé à partir de 7+ tableaux), il se charge normalement mais seulement "par intermittence" dans le terminal, je ne sais pas pour quelle raison. Il n'y a pas d'erreur, c'est quelque chose avec le terminal MT5 lui-même...

J'aimerais le tester dans le testeur, mais dans le testeur, il continue à donner une erreur : j'ai joint une capture d'écran.

Veuillez me conseiller, y a-t-il une possibilité de traiter l'erreur avant le démarrage du testeur et de recharger de force l'indicateur dans le testeur, si elle apparaît ?

 
M1k3:

Bon après-midi.

J'ai un indicateur assez gourmand en ressources (qui est calculé à partir de 7+ tableaux), il se charge normalement mais seulement "par intermittence" dans le terminal, je ne sais pas pour quelle raison. Il n'y a pas d'erreur, c'est quelque chose avec le terminal MT5 lui-même...

J'aimerais le tester dans le testeur, mais dans le testeur, il continue à me donner une erreur : j'ai joint une capture d'écran.

Veuillez me conseiller, y a-t-il un moyen de gérer l'erreur avant le démarrage du testeur et de recharger de force l'indicateur dans le testeur, si elle apparaît ?

.

L'erreur est dans votre code, pas dans le terminal. Il y a même un indice où chercher l'erreur : ligne 302, position 49. Cette erreur est un tableau hors de sa plage. Par exemple, vous avez un tableau de taille [4], mais vous essayez d'obtenir la valeur [5].
 
barabashkakvn:
L'erreur est dans votre code, pas dans le terminal. Il y a même une indication de l'endroit où chercher l'erreur : ligne 302, position 49. Cette erreur est une sortie du tableau de sa plage. Par exemple, vous avez un tableau de taille [4], mais vous essayez d'obtenir la valeur [5].

Je n'arrive pas à le réparer, le tableau est rempli de guillemets (100%) ou de valeurs indicatrices. Dans le terminal à un certain moment la valeur des cotations ou des indicateurs X sort NULL, et à un autre moment elle sort une valeur normale (pas sur la 0ème barre). Je ne sais pas pourquoi cela arrive.

La valeur NULL est toujours présente dans le testeur. L'erreur se produit lorsque j'essaie de multiplier une valeur de cotation ou d'indicateur, mais il NULL.

 
M1k3:

Je n'arrive pas à le réparer, le tableau est rempli de guillemets (100%) ou de valeurs indicatrices. Dans le terminal, à un certain moment, la valeur des cotations X donne NULL, et à un autre moment, elle donne une valeur normale (pas sur la 0ème barre). Je ne sais pas pourquoi cela arrive.

La valeur NULL est toujours présente dans le testeur. L'erreur se produit lorsque j'essaie de multiplier une valeur de cotation ou d'indicateur, mais il NULL.

Utilisez le débogage du code ou insérez des opérateurs Print() dans les sections de code douteuses. De cette façon, vous comprendrez où se trouve l'erreur.
 
barabashkakvn:

Ce code est celui de l'indicateur et de la fonction OnInit(). En conséquence, OnInit() est traité au moment du démarrage du terminal - et ce code affiche correctement le prix du tick. C'est OnInit() et non init() - comme le vôtre. Si l'erreur se répète, veuillez envoyer le code et la version du terminal.

L'erreur est que vous essayez de recevoir des informations sur le marché (MarketInfo...) dans OnInit() de l'indicateur. L'indicateur n'a pas de fonctions de trading et donc, pendant l'initialisation, il n'attend pas la mise à jour des informations sur le compte et le marché.

Pour obtenir les données du marché, utilisez OnInit() de l'EA, pas de l'indicateur.

Si vous voulez utiliser les informations de marché dans l'indicateur, vous devez entrer un drapeau (bool) et vérifier l'exactitude des informations de compte (Account...) dans la fonction OnCalculate() dans le cas de la première exécution ou dans OnInit() si vous modifiez les paramètres de l'indicateur ou de l'horizon temporel.

N'induisez pas les gens en erreur. Que vous utilisiez init() ou OnInit() de l'indicateur, le terminal ne garantit pas que ce gestionnaire sera appelé lorsque la connexion a déjà été effectuée et que la valeur du tick est connue. Il est donc facile d'obtenir zéro dans OnInit aussi. Il n'y a pas non plus d'interdiction d'utiliser des informations sur le marché dans les indicateurs. Mais dans ce cas, nous devons vraiment transférer l'initialisation à la partie calcul de l'indicateur et l'exécuter sur les premiers ticks.
 
marketeer:
N'induisez pas les gens en erreur. Indépendamment de l'utilisation de la fonction init() ou OnInit() de l'indicateur, le terminal ne garantit pas que ce gestionnaire sera appelé lorsque la connexion sera effectuée et que la valeur du tick sera connue. Il est donc facile d'obtenir zéro dans OnInit aussi. Il n'y a pas non plus d'interdiction d'utiliser des informations sur le marché dans les indicateurs. Mais dans ce cas, nous devons vraiment transférer l'initialisation à la partie calcul de l'indicateur et l'exécuter sur les premiers ticks.

Il n'y a pas de fonctions de trading dans l'indicateur. Le conseiller expert a des fonctions commerciales. Par conséquent, lorsque l'EA appelle l'environnement de marché et/ou les informations de compte, tout se passe correctement dans OnInit().

Pour prouver mes dires, voici un EA simple dans lequel OnInit() fait référence à l'environnement de trading et aux informations du compte :

//+------------------------------------------------------------------+
//|                                                  test_expert.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- выведем всю информацию, доступную из функции AccountInfoDouble()
      printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
      printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
      printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
      printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
      printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
      printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
      printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
      printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
      printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
      //--- MarketInfo
      Print("Symbol=",Symbol());
      Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
      Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
      Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
      Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
      Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
      Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
      Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
      Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
      Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
      Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
      Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
      Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
      Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
      Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
      Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
      Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
      Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
      Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
      Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
      Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
      Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
      Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
      Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
      Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
      Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
      Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
      Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Dossiers :
 
barabashkakvn:

Il n'y a pas de fonctions de trading dans l'indicateur. Le conseiller expert a des fonctions commerciales. Par conséquent, lorsque l'EA appelle l'environnement de marché et/ou les informations de compte, tout se passe correctement dans OnInit().

Pour prouver mes dires, voici un Expert Advisor simple qui, lors de OnInit(), appelle l'environnement du marché et les informations du compte :

À l'origine, la question portait sur l'indicateur. Et vous répondiez au sujet du OnInit de l'indicateur. Le conseiller expert est une autre affaire, il n'y a aucun problème à ce niveau, mais le conseiller expert ne peut pas remplacer un indicateur.
 
marketeer:
À l'origine, la question portait sur l'indicateur. Vous avez répondu au sujet de l'indicateur OnInit. Le conseiller expert est une autre affaire, ce n'est pas un problème, mais il ne peut pas remplacer un indicateur.

Facilement. C'est possible.

Par exemple, comme ceci :

Par exemple, dans le conseiller expert, vous obtenez des données sur l'environnement de négociation et vous ajoutez l'indicateur lorsque vous avez pris un bon départ. Après cela, l'indicateur dessinera automatiquement ses propres gribouillis à cet endroit :)

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5