[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 607

 
rustein:
Oui, je vois, merci.

Dis comme ça, je ne connais pas d'autre moyen. .......)

Et donc...

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    if(!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES))continue; // если нет продолжим цикл
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  if(MySummBull==0)return(380/*v*/);
  return(MySummBull);
}
 
griha:
vous voulez enregistrer les actions de l'EA dans un fichier
J'ai pris un exemple dans le manuel de l'éditeur MQL, que j'ai légèrement modifié pour mes propres besoins.


Le résultat est que le fichier OrdersReport.csv est vide, bien que les commandes soient ouvertes.


J'ai rencontré le même problème, lorsque j'ouvre un fichier en lecture et que j'essaie d'y écrire, soit le fichier n'est pas créé, soit rien n'est écrit.

Application du pont de service :

Lorsque l'on essaie d'ajouter à un fichier texte déréférencé avec la clé FILE_READ|FILE_WRITE, sans avoir au préalable défini explicitement le pointeur de fichier avec FileSeek(), l'écriture ne se produit pas du tout.

Dans les versions précédentes du terminal, lors de la prélecture d'un fichier texte à l'aide de la fonction FileReadString(), le pointeur de fichier est défini automatiquement.

Voici une réponse des développeurs :

La dernière modification de la fonctionnalité du fichier remonte à la mi-2008.

Jamais auparavant il n'avait été possible d'ajouter un fichier sans placer un pointeur de fichier à la fin.

Encore une question sur les informations supplémentaires. Cela a-t-il un rapport avec l'ajout à la fin d'un fichier ?

Toute opération de lecture-écriture du fichier déplace automatiquement le pointeur du fichier. Cela a toujours été le cas et n'a pas changé. Cependant, si le fichier est ouvert en tant que csv, la mise en mémoire tampon des données intermédiaires est possible. Dans ce cas, le pointeur de fichier peut ne pas se trouver là où vous l'attendez. Là encore, cela a toujours été le cas, tant dans la version précédente que dans la préversion, depuis le début de la version officielle.

Nous avons répété à de nombreuses reprises que le principe de défaut est extrêmement préjudiciable. Y compris pour les pointeurs de fichiers. Manipulez le pointeur de fichier explicitement à moins que vous n'utilisiez la lecture continue ou l'écriture continue (en particulier les cas exotiques de lecture-écriture mixte).

Conclusion : utilisez FileSeek

 
khorosh:
Vérifiez.
Merci.
 
Roll:

Votre conseiller expert négocie sur les signaux ADX 30 minutes. Si votre conseiller expert utilise des signaux ADX 1min, ces signaux seront plus fréquents que dans la première variante. La capture d'écran dans votre variante est prise uniquement à l'ouverture de la position BUY.
Vous êtes intéressé par le manque d'indicateurs du graphique dans la capture d'écran (en mode test). Il vous a été demandé de vérifier la présence d'indicateurs sur la capture d'écran en mode démo. Le script avec la fonction appropriée a été ajouté, afin que vous puissiez vérifier et comprendre votre question rapidement, au lieu d'attendre des heures. Plus d'un jour s'est écoulé. Je veux savoir... quels sont vos résultats ?

Je vous tiens au courant. Je suis occupé mais j'essaierai de vérifier demain.
 

Pouvez-vous me dire quelle est la différence entre définir un nom dans une fonction ou nommer une variable et ensuite passer la variable à une fonction ?

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);     Имя присваиваю в теле функции
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции
//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()        ИМЯ ПРИСВАИВАЮ В ПЕРЕМЕННОЙ
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);                 ПЕРЕДАЮ ПЕРЕМЕННУЮ В ФУНКЦИЮ
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);
 
rustein:
Aidez-moi à me débarrasser de l'erreur de division par zéro dans l'EA.

Merci d'avance.

Vous pouvez le faire de cette façon, ça marche pour moi.

double BullPrice()

{

double BullAveragePrice=0 ;

doubleSummBullLots=0 ;

for (int i = OrdersTotal() - 1 ; i >= 0 ; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

si (OrderSymbol() != Symbol()) continue ;

si (OrderSymbol() == Symbol() && OrderType() == OP_BUY)

{

BullAveragePrice+=OrderOpenPrice()*OrderLots() ;

MySummBullLots+=OrderLots() ;

}

}

si (MySummBullLots>0) BullAveragePrice = NormalizeDouble(BullAveragePrice / MySummBullLots, Digits) ;

return(BullAveragePrice) ;

}

 
Zhunko:

Dans le dossier MT4, il y a un exemple de code C++ pour tous les cas en MQL4. Compilez ce code et collez-y votre propre code. Vous constaterez immédiatement la différence entre le vôtre et l'exemple.

Mon MT n'en a pas. Il n'y a qu'une seule bibliothèque écrite en MQL (stdlib.mq4). Pouvez-vous nous donner un exemple ?
 
Fox_RM:

Pouvez-vous me dire quelle est la différence entre définir un nom dans une fonction ou attribuer un nom de variable et passer ensuite la variable à une fonction ?

Dans votre exemple, la seule différence réside dans le passage des paramètres à la fonction
.
dellline(...)
 
costy_:

Sinon...

Merci !
 

Veuillez me conseiller, la situation est la suivante : je lis un fichier csv comme ceci

void ReadDate(){
   while(!IsStopped()){
      string dTime = FileReadString(ExtCsvHandle); // читаем строчку 1
      string sValue = FileReadString(ExtCsvHandle); // читаем строчку 2
      Print("Date=",StrToTime(dTime), "Value=",sValue);   
      
   }
}

mais le fichier csv a un en-tête, la première ligne supplémentaire

Time,Value
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3

Comment sauter la première ligne de manière programmatique, ou la supprimer de manière programmatique en général lors de la sauvegarde de la valeur, cela gâche tout.

Merci d'avance.