Erreurs, bugs, questions - page 621

 
sergey1294:
Tout d'abord, vous divisez les nombres entiers pour obtenir un nombre entier, lisez la section sur la conversion de type https://www.mql5.com/ru/docs/basis/types/casting.
Oui, en effet, mais ce n'était pas le cas avant. Je ne me suis même pas donné la peine.
 
ivandurak:
Oui, en effet, mais avant, ce n'était pas le cas. Je ne me suis même pas donné la peine.

C'était autrefois à quatre ? car à cinq c'était dès le début et ce sera toujours le cas (1/2=0 ; 1./2.=0.5).

Si vous voulez spécifier les doublons, ajoutez explicitement un point.

// Script program start function                                    
void OnStart()
  {
   int i;
   double   a,b ;
   for(i=0;i<10;i++)
      {
         a=1./2.;
         b=1./2.;
         Print("a=",a," ","b=",b) ;
      }   
  }
 
Urain:

C'était en quatre avant ? Parce que c'était en cinq depuis le début.

Si vous voulez spécifier explicitement les doublons, ajoutez un point.

Cela n'a jamais été le cas, ni en quatre ni en cinq.

L'arithmétique des nombres entiers (et même sous la forme de constantes entières pures) est sans ambiguïté.

 

J'ai rencontré une divergence entre le testeur et le compte de démonstration :

Après une opération de négociation réussie, les champs de prix sont remplis différemment dans la structure de réponse du serveur de négociation. Dans le compte de démonstration, tout est comme il se doit dans le champ du prix - le prix auquel la transaction a été effectuée, dans le testeur ce champ reste 0.

Pour le test, j'ai esquissé un Expert Advisor qui achète chaque tick et affiche le code de retour et le prix dans le log :

//+------------------------------------------------------------------+
//|                                                  test-expert.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
         MqlTradeRequest trade_request;
         MqlTradeResult  trade_result;
         ZeroMemory(trade_request);
         ZeroMemory(trade_result);
         trade_request.action=TRADE_ACTION_DEAL; 
         trade_request.volume=0.1; 
         trade_request.type=ORDER_TYPE_BUY; 
         trade_request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK); 
         trade_request.symbol=_Symbol;
         OrderSend(trade_request,trade_result);
         Print(trade_result.retcode, "купили по цене ",trade_result.price);
  }
//+------------------------------------------------------------------+

Lorsque je l'exécute sur un compte de démonstration, le journal contient les chaînes suivantes :

2012.01.16 12:48:29 test-expert (EURUSD,H1) 10009 acheté à 1.266

Et lorsqu'ils sont exécutés dans le visualiseur, ces :

2012.01.16 12:49:12 2011.12.30 00:00:11 10009 acheté au prix de 0.0

Dites-moi, c'est un bug, un bug, ou je fais quelque chose de mal ?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 

Existe-t-il un moyen de gérer la préhistoire dans le testeur ?

Un test pour 1 heure, de la période 1.01.2011 à aujourd'hui charge seulement 6000 barres. Dans les paramètres est - max barres illimité. l'histoire est tout chargé de 1971 sur la minute.

 

Cette question s'est posée de manière inattendue :

Lorsque l'on charge un indicateur via iCustom dans un Expert Advisor, l'indicateur est chargé et fonctionne correctement - la seule chose est que sa fonction OnTimer n'est pas appelée.

C'est censé être comme ça, ou c'est un bug ?

Le même indicateur simplement attaché à un graphique fonctionne bien.

Construire 574.

 
Dima_S:

Cette question s'est posée de manière inattendue :

Lorsque l'on charge un indicateur via iCustom dans un Expert Advisor, l'indicateur est chargé et fonctionne correctement - la seule chose est que sa fonction OnTimer n'est pas appelée.

C'est censé être comme ça ou c'est un bug ?

Il a été conçu de cette façon.
 
antt:
C'est comme ça que ça doit être.
Très original)
 
Dima_S:
Très original)

Les événements de la minuterie sont générés pour le graphique et, de là, pour les programmes qui s'exécutent sur lui (lancés par-dessus). C'est l'idéologie - l'exécution du programme:

Le terminal client envoie les événements générés aux graphiques ouverts appropriés. Les événements peuvent également être générés par des graphiques (événements graphiques) ou des programmes mql5 (événements personnalisés). La génération d'événements de création et de suppression d'objets graphiques sur un graphique peut être activée ou désactivée en définissant les propriétés CHART_EVENT_OBJECT_CREATE et CHART_EVENT_OBJECT_DELETE d'un graphique. Chaque programme mql5 et chaque graphique a sa propre file d'attente d'événements, où tous les nouveaux événements sont stockés.

Le programme ne reçoit que les événements du graphique sur lequel il est exécuté. Tous les événements sont traités les uns après les autres dans l'ordre où ils sont reçus.

Par conséquent, l'indicateur qui est appelé depuis le conseiller expert ne reçoit pas les événements de la minuterie. Essayez d'appliquer l'indicateur au graphique en utilisant la fonction ChartIndicatorAdd du Conseiller Expert, est-ce que quelque chose va changer ?

 
Dima_S:
Très original)
L'événement, qui était à l'origine destiné aux experts, est essentiellement un événement graphique. L'utilisation de l'événement dans les indicateurs a été ajoutée plus tard et avec la restriction que l'indicateur doit être ajouté au graphique.