Questions des débutants MQL4 MT4 MetaTrader 4 - page 113

 
Bonjour !!! Je veux faire ce qui suit :
J'ai besoin que mon EA ouvre tous les ordres (Vente et Achat), même s'ils sont déjà ouverts et qu'il ne le fasse pas quand toutes les conditions convergent, mais sur la bougie suivante !!! Aidez-nous, s'il vous plaît ...... Je vous remercie d'avance...

Pour le moment, j'ai ceci dans mon code :

Code PHP :
void start()
{
if(
NewBar())
{
// algorithme lui-même etc.
}
}

bool NewBar()
{
static
datetimelastbar=0;
datetime curbar=iTime(Symbol(),0,0) ;
if(
lastbar!=curbar)
{
lastbar=curbar;
return(
true) ;
}
return(
false) ;
}
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize(_Mas, 0) ;
int Ticket=-1 ;
for(int pos=OrdersTotal()-1 ; pos>=0 ; pos--){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&.
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Ticket=OrderTicket() ;
switch(OrderType()){
case 0:{_Mas[0]++;_Mas[6]++;break;}
case 1:{_Mas[1]++;_Mas[6]++;break;}
case 2:{_Mas[2]++;_Mas[7]++;break;}
case 3:{_Mas[3]++;_Mas[7]++;break;}
case 4:{_Mas[4]++;_Mas[7]++;break;}
case 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

Voici la fonction.

Je pensais juste que le problème n'était pas dans le code car il n'y a pas d'erreurs en mode standard.

De toute façon, personne ne semble répondre...

 
qroner:

De toute façon, personne ne semble répondre...

Le terminal vous dit que l'erreur se trouve à la ligne 69, mais vous montrez le texte du programme, où il y a moins de lignes... Comment voulez-vous répondre ?
 
qroner: De toute façon, il semble que personne ne répondra...

Il ne semble pas y avoir d'erreurs dans la fonction que vous avez postée. Je ne comprends pas l'utilisation de OrderTicket()!=Ticket pour éliminer les commandes adjacentes ayant le même ticket. Vérifiez et assurez-vous qu'il n'y a pas de tels ordres. Si le (69,25) est spécifié par le compilateur , regardez la position 25 de la ligne 69 - l'erreur est là. Tapez cette ligne.

 
Vladimir: Le terminal vous dit que l'erreur est à la ligne 69, mais vous montrez le texte du programme avec moins de lignes... Sur quoi voulez-vous vous baser pour répondre ?

Je me demande vraiment ce qu'il a en ligne 69

 

Ouf, je pensais que personne ne réagirait.

Voici cette partie du code :

66 double Volatility(int _period){

67 double summ = 0 ;

68 for(int i=1 ; i<=_period ; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Merci pour le conseil

 
qroner:

Ouf, je pensais que personne ne réagirait.

Voici cette partie du code :

66 double Volatility(int _period){

67 double summ = 0 ;

68 for(int i=1 ; i<=_period ; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Merci pour le conseil.

Tout est clair. L'erreur se trouve dans la ligne summ+=MathAbs(High[i]-Low[i]) ; en comptant à 25 positions du bord, on arrivera probablement à High[i].

J'ai écrit Alert(Low[-1]) ; le compilateur exige un nombre positif. J'ai écrit int n=-1 ; Alert(Low[n]) ; - lors de l'exécution de Array hors rangre. Mais comment i<0 ? ?? peut-être est-ce le manque de données historiques ? vérifiez l'intervalle de date de ... à ...

 

VEUILLEZ INDIQUER QUEL TRADER CHOISIR OU LE NOM EXACT DU SERVEUR

 
qroner:

Ouf, je pensais que personne ne réagirait.

Voici cette partie du code :

66 double Volatility(int _period){

67 double summ = 0 ;

68 for(int i=1 ; i<=_period ; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Merci pour le conseil.

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

Il semble que _period ait parfois une valeur supérieure aux éléments du tableau. D'où le dépassement du tableau.

Choisissez l'une des options.

 
Bonjour ! Comment puis-je créer un trigger ? Par exemple, j'ai besoin de cette condition if(iClose(NULL,HTF,4)<BlueLine) si elle est exécutée DayDown = 1 ! Q : Comment faire pour que DayDown soit laissé à 1 et ne soit pas interrogé avant le jour suivant ?
Raison: