Erreurs, bugs, questions - page 886

 
Yedelkin:
Il peut y avoir de nombreuses raisons... Les plus connus sont la division par zéro, en laissant le tableau.

Merci.

Quelle est la sortie en dehors du tableau? Je m'excuse pour mon ignorance.

Je n'ai que 3 divisions :

TradeLot=AccountInfoDouble(ACCOUNT_BALANCE)*(PercentSize/100)/(100); 
MaxLotAllowed=MathFloor((MeansFree/MeansOneLot)*100)/100;
(PositionVolume()+Volume())*(100)*(100))/AccountInfoDouble(ACCOUNT_BALANCE)
 
G001: Je n'ai que 3 divisions :

C'est là que la division par zéro peut se produire :

/AccountInfoDouble(ACCOUNT_BALANCE)

Un contrôle de base est nécessaire.

G001 : Quelle est la sortie en dehors du tableau ? Je m'excuse pour mon ignorance.

C'est quand, par exemple :

double array[3];
for (int i=0; i<=3; i++) array[i];

A la dernière itération, il y aura une sortie en dehors du tableau.

 
Yedelkin:

C'est là que la division par zéro peut se produire :

Un contrôle de base est nécessaire.

C'est quand, par exemple :

A la dernière itération, il y aura une sortie en dehors du tableau.

Merci.

Cool, devons-nous vérifier si la fonction fonctionne correctement ?

AccountInfoDouble(ACCOUNT_BALANCE)

 
G001: Cool, vous devez vérifier si la fonction fonctionne correctement ?
Eh bien, que se passe-t-il lorsque le solde est à zéro et que la fonction fonctionne correctement ? :)
 

Il n'y a pas de problème avec un tel compteur ?

int TotalBullStopOrders()
{
  int BullCounter=0;
  int Total = OrdersTotal();
  for(i = 0; i < Total; i++)
  {
    if(OrderSelect(OrderGetTicket(i)))
    {
      if(OrderGetString(ORDER_SYMBOL)==Symbol() && OrderGetInteger(ORDER_MAGIC)==Magic)
      {
        if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP)
        {
          BullCounter++;
        }
      }
    }
  }
  return(BullCounter);
}
 
Yedelkin:
Eh bien, que se passe-t-il lorsque le solde est à zéro et que la fonction fonctionne correctement ? :)
Tu as raison, je vais arranger ça là-bas.
Mais maintenant mon solde n'est pas nul et mon EA sourit vert mais cesse de fonctionner, Anormalement et sans aucun avertissement, il vaudrait mieux ne pas sourire.... :)
 
G001: Il n'y a pas de problème avec ce compteur ?

Le type de la variable i n'est pas défini dans l'instruction for. La variable Magic n'est pas définie. Dans la ligne.

if(OrderSelect(OrderGetTicket(i)))
La fonction OrderSelect() est inutile. Je n'ai rien remarqué d'autre.
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
AndreyS:

problème avec erreur (Error CopyBuffer - numéro d'erreur : 4806) - je le supprime, je le soigne parSleep(1000) ; - je le mets sur le compte de l'indicateur qui n'a pas assez de temps pour se créer.

Le problème de l'erreur (4194304 octets non disponibles) demeure.

Il sera très probablement créé. Mais avant de copier les données, nous devons vérifier si les données que nous voulons recevoir (l'indicateur a-t-il eu le temps de calculer ?). La fonction BarsCalculated devrait vous aider.

Ensuite, vous demandez toutes les échéances par symbole. Si ces données sont prêtes - elles sont téléchargées du disque vers la mémoire, sinon - elles commencent à être construites (la mémoire est également consommée) + 100 indicateurs avec une période différente pour chaque TF, et tout cela dans la mémoire. Les données ne sont pas immédiatement déchargées de la mémoire (au cas où vous voudriez les demander à nouveau)...

Réduire le nombre de barres sur le graphique.

Документация по MQL5: Доступ к таймсериям и индикаторам / BarsCalculated
Документация по MQL5: Доступ к таймсериям и индикаторам / BarsCalculated
  • www.mql5.com
Доступ к таймсериям и индикаторам / BarsCalculated - Документация по MQL5
 
Yedelkin:

Le type de la variable i n'est pas défini dans l'instruction for. La variable Magic n'est pas définie. Dans la ligne

OrderSelect() est redondant. Je n'ai rien remarqué d'autre.

Merci.

Il y en a un à l'extérieur de l'opérateur.

input int    Magic          = 55;

MqlTradeRequest request={0};
MqlTradeResult result={0};
MqlTradeCheckResult check={0};
//-----
int LotsDigits;
int Indicator;
double IndicatorVal[5];
double Ask;
double Bid;
int i;
int pos;
double TradeLot;
ulong StopLevel;
double MeansFree;
double MaxLotAllowed;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
 
alexvd:

Il est probable qu'il ait été créé. Avant de copier les données, vous devez vérifier si elles sont disponibles (l'indicateur a-t-il été réglé ?). La fonction BarsCalculated devrait vous aider.

Ensuite, vous demandez toutes les échéances par symbole. Si les données sont prêtes - elles sont téléchargées du disque vers la mémoire, sinon - elles commencent à être construites (la mémoire est également consommée) + 100 indicateurs avec une période différente pour chaque TF, et tout cela dans la mémoire. Les données ne sont pas immédiatement déchargées de la mémoire (au cas où vous voudriez les demander à nouveau)...

Réduire le nombre de barres sur le graphique.

        while(BarsCalculated(m_handle)==-1 && !IsStopped()) Sleep(1); // Спасибо alexvd - откоректировал строку с учётом замечаний

Le nombre de barres ne change rien,

Le problème est caché dans les périodes, pour les variantes

for(int iperiod=5; iperiod<=19; iperiod++) 

ne fonctionne pas, 19-5=14 - périodes différentes,

S'ils sont réduits à 4, alors tout fonctionne, par exemple :

for(int iperiod=16; iperiod<=19; iperiod++)

Bien que foru IndicatorRelease(m_handle) - soit effectivement utilisé de manière incorrecte.

Je pense que même si vous ne libérez pas les poignées avec la fonction IndicatorRelease, cela devrait fonctionner de toute façon,

Le problème réside donc dans le nombre de périodes différentes.

Ou...

Raison: