[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 59

 
xrust писал(а) >>
Vous pouvez changer le nom du rapport détaillé en rapport normal et vous serez content.

Pouvez-vous me dire, si ce n'est pas difficile, où exactement ce nom peut être changé ? L'aide à l'utilisateur ne dit rien du tout à ce sujet.

 
Euh... vous me déconcertez.... Vous n'avez jamais renommé un fichier ?
 
Chers experts, n'ignorez pas ma question.

Existe-t-il un indicateur qui compte la volatilité, par exemple quotidiennement. Mais pas celle qui donne un nombre indéfini comme 0,34. Mais il devrait calculer le nombre de chandeliers par jour et le diviser par une période donnée (nombre de jours) afin que l'indicateur connaisse la valeur moyenne. Exemple : ouverture 100, clôture 200 ; le deuxième jour - ouverture 200, clôture 250. Volatilité moyenne pour ces 2 jours = ((200-100)+(250-200))/2 jours=(100+50)/2=75
Où télécharger si disponible.
 
xrust писал(а) >>
Euh... vous me faites faux bond là.... >> N'avez-vous jamais renommé un fichier ?

Le terminal est censé générer automatiquement un rapport toutes les 20 minutes et le télécharger sur le serveur ftp. Cette fonction permet d'enregistrer un rapport régulier par défaut. Cette fonction du terminal enregistre par défaut un rapport ordinaire, alors que je voudrais un rapport détaillé avec des informations supplémentaires et un graphique. Vous pouvez enregistrer manuellement le rapport détaillé sans aucun problème et sélectionner la période d'historique que vous souhaitez.

Et d'abord, vous me laissez perplexe : où et comment dois-je renommer manuellement pour organiser la fonction automatique? Ce n'est pas clair du tout.

 

Répétant un message de https://forum.mql4.com/ru/10422, ma propre question serait peut-être plus appropriée ici.


Voici une partie du code, qui provient du fichier example.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


lit le nombre de paires et enregistre ensuite les noms des paires dans un tableau de chaînes de caractères, une par une :

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


Cela semble être simple et après avoir lu l'ini, nous devrions obtenir un tableau de noms de paires.

Mais en conséquence, après avoir lu un autre paramètre de l'ini et assigné une valeur à un autre élément du tableau,

tous les autres éléments précédemment assignés obtiennent la même valeur.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Il s'avère que lorsqu'on assigne un tableau de chaînes à une variable, c'est en fait l'assignation de

la référence, pas la valeur. J'ai cherché dans toute la documentation disponible ainsi que sur le forum mais je n'ai pas trouvé de réponse à cette question.

J'ai trouvé la solution en utilisant StringSubstr, mais quelque chose me dit que ce n'est pas tout à fait correct.


Question à ceux qui savent : comment assigner correctement les valeurs d'autres variables aux éléments d'un tableau de chaînes de caractères ?

 
Yug >> :

Répétant un message de https://forum.mql4.com/ru/10422, ma propre question serait peut-être plus appropriée ici.


Je me suis souvenu ! Particularité de l'implémentation des chaînes de caractères. Une fois que le tableau a été redimensionné, il doit être traversé et remis à zéro :

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
Je peux me tromper, mais ça devrait aider.
 
XinoXano писал(а) >>

Le terminal est censé générer automatiquement un rapport toutes les 20 minutes et le télécharger sur le serveur ftp. Cette fonction permet d'enregistrer un rapport régulier par défaut. Cette fonction du terminal enregistre par défaut un rapport ordinaire, alors que je voudrais un rapport détaillé avec des informations supplémentaires et un graphique. Vous pouvez enregistrer manuellement le rapport détaillé sans aucun problème et sélectionner la période d'historique que vous souhaitez.

Et d'abord, vous m'avez laissé perplexe - où et comment dois-je renommer manuellement, afin d'organiser la fonction automatique? Ce n'est pas clair du tout.

Les modèles de rapport statement.htm, et le rapport détaillé StatementDetailed.htm sont situés dans le dossier terminal\templates\. Par défaut, le terminal envoie un rapport simple statement.htm, vous avez besoin de StatementDetailed.htm, je vous ai suggéré en russe de renommer le fichier StatementDetailed.htm dans l'environnement Windows en statement.htm. Ou écrire aussi des instructions sur le renommage ?

 

Chers experts,

s'il vous plaît aidez-moi avec les transactions LOKing

Plus de détails et le code ici : Aidez-moi à faire face au "LOKing of Positions".

Toujours avec respect,

 
xrust писал(а) >>

Les modèles de rapport statement.htm et le rapport détaillé StatementDetailed.htm se trouvent dans le dossier terminal\templates\. Par défaut, le terminal envoie un rapport régulier statement.htm, mais vous avez besoin d'un statement détailléDetailed.htm, je vous ai suggéré en russe de renommer dans le fichier windows StatementDetailed.htm en statement.htm. Ou écrire des instructions pour le renommage également ?

Pas de renommer moi-même je vais pouvoir, mais pour remplacer un modèle par un autre, ça ne m'est pas venu à l'esprit...

Merci beaucoup ! Maintenant tout est clair et tout fonctionne !!!!

 
Everlost >> :

Très simple - quand le signal Cls_S ou Cls_B arrive, on oublie la dernière position ouverte (on remet la valeur de la variable Last_Position à -1).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

Je le vois en théorie, mais maintenant le conseiller expert a complètement cessé de faire des transactions (

Je l'ai comme ça :

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()> ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if (( ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if (( ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if (( Cls_B==true|| Cls_S==true)&&( ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


Y a-t-il une erreur ?