Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 561

 
Forexman77:

Chérie, j'ai besoin de ton aide.

Je suis en train d'optimiser mon Expert Advisor par l'indicateur, le code de l'indicateur est ci-dessous.

L'optimisation est lente, j'ai fait un code dans l'EA pour recalculer l'indicateur sur une nouvelle barre, ce qui n'est pas tout à fait adapté.

Veuillez voir le code de l'indicateur, ce que l'on peut y faire pour que le recalcul soit plus rapide.


pourquoi avez-vous pensé que c'était la faute de l'indicateur ?
 
Vladon:

calculer le nombre de caractères, + la taille de la police, comme ceci ?

La taille de la police ne vous permet pas d'acquérir les connaissances dont vous avez besoin. Vous devez dessiner plusieurs objets l'un sur l'autre. Seul le premier objet a un point d'ancrage. Comment obtenir le point d'ancrage du 2ème objet et des suivants ?
 
Vladon:


Achèvement forcé de l'EA dans le cas où l'utilisateur décharge l'EA.

il est préférable d'enregistrer les données directement au départ.

Il ne fonctionne pas par le démarrage. Même photo.
----------------------------------------------------
stringo 25.03.2014 13:28

Le temps d'exécution de deinit est limité à 10 secondes.

Dans le testeur, à l'achèvement normal, le drapeau d'arrêt n'est pas activé, donc la désinitialisation est tranquillement terminée.

----------------------------------------------------

Peut-être qu'une limite de 10 secondes est imposée au fonctionnement de toute fonction ?
 
Bonjour ! En étudiant le MQL4, une petite question s'est posée. Le problème est exposé dans le tutoriel sur ce site. Voici la condition : Tâche 25. Créez un programme qui réalise les conditions suivantes : si le taux de change a dépassé le niveau spécifié, alors donnez un message, dans lequel les mots indiquent que le taux a dépassé le niveau (jusqu'à 100 points) ; dans les autres cas, donnez un message indiquant que le taux ne dépasse pas le niveau spécifié.
Et voici la solution proposée :
//--------------------------------------------------------------------
extern double Level=1.3200;                     // Заданный уровень 
string Text[101];                               // Объявление массива
//--------------------------------------------------------------------
int init()                                      // Спец. ф-ия init()
  {                                             // Присвоение значений
   Text[1]="один ";            Text[15]="пятнадцать ";
   Text[2]="два ";             Text[16]="шестнадцать ";
   Text[3]="три ";             Text[17]="семнадцать ";
   Text[4]="четыре ";          Text[18]="восемнадцать ";
   Text[5]="пять ";            Text[19]="девятнадцать ";
   Text[6]="шесть ";           Text[20]="двадцать ";
   Text[7]="семь ";            Text[30]="тридцать ";
   Text[8]="восемь ";          Text[40]="сорок ";
   Text[9]="девять ";          Text[50]="пятьдесят ";
   Text[10]="десять ";         Text[60]="шестьдесят";
   Text[11]="одиннадцать ";    Text[70]="семьдесят ";
   Text[12]="двенадцать ";     Text[80]="восемьдесят ";
   Text[13]="тринадцать ";     Text[90]="девяносто";
   Text[14]="четырнадцать ";   Text[100]= "сто";
   // Вычисление значений
   for(int i=20; i<=90; i=i+10)                // Цикл по десяткам
     {
      for(int j=1; j<=9; j++)                  // Цикл по единицам
         Text[i+j]=Text[i] + Text[j];          // Вычисление значения   
     }
   return;                                     // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. ф-ия start()
  {
   int Delta=NormalizeDouble((Bid-Level)/Point,0);// Превышение 
//--------------------------------------------------------------------
   if (Delta>=0)                                // Цена не выше уровня
     {
      Alert("Цена ниже уровня");                // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if (Delta<100)                               // Цена более 100
     {
      Alert("Более ста пунктов");               // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert("Плюс ",Text[Delta],"pt.");            // Вывод на экран
   return;                                      // Выход из start()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Vladon:

Pourquoi avez-vous pensé que c'était la faute de l'indicateur ?

Par exemple, j'ai optimisé AMA, il est beaucoup plus rapide d'optimiser, bien que l'indicateur soit complexe.

Je ne dirai pas avec certitude que c'est la faute de l'indicateur. Je n'ai pas encore beaucoup d'expérience dans ce domaine.

Mais comment l'accélérer ? Est-ce que j'ai fait tout ce qu'il fallait ici ou est-ce que je peux changer quelque chose ?

En principe, il suffit que l'indicateur soit calculé à partir des 100 dernières barres, mais si je fixe le nombre 100 au lieu de 500, les valeurs disparaissent.

extern int Limit=70;

if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
Si vous effectuez l'optimisation à cette vitesse, sa barbe d'achèvement atteindra le plancher et les mullens gagnés ne seront pas utiles) Eh bien, ou le marché sera complètement différent.
 
alxm:
Bon après-midi. Pouvez-vous me dire s'il est possible de définir ou de calculer par programme la largeur/hauteur sur un graphique d'un objet OBJ_TEXT ?

Texte probablement pas, mais étiquette s'il vous plaît

docs.mql4.com/fr/constants/objectconstants/enum_object_property

Propriétés OBJPROP_XSIZE et OBJPROP_YSIZE

 
Vladon:


Merci pour l'aide avec l'opérateur de boucle, tout s'est bien passé.
 
Forexman77:



Mais, comment l'accélérer ? Est-ce que j'ai tout fait correctement ici ou y a-t-il quelque chose que je peux changer ?



Eh bien, vous pouvez immédiatement voir que le calcul est erroné, par exemple qu'une barre a été ajoutée.

limit1=Bars-counted_bars-1;

La limite 1 sera de deux... Et puis

 if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;

De toute façon, le recalcul est complètement faux...

 
Vladon:



Merci beaucoup, bonne journée :) >)
 
splxgf:


Eh bien ici vous pouvez voir que le recalcul est foiré, par exemple une barre a été ajoutée.

La limite 1 sera de deux... Et puis

De toute façon, le recalcul est complètement faux...

Quelle est la bonne façon de procéder ? C'est pour ça que je demande. Je ne sais pas vraiment comment compter les indicateurs.

Je vais deviner :
limit1=Bars-counted_bars;

Est-ce que ça doit être comme ça ?

Je ne sais pas ce qui se passe ici.

if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
Si en général, il me suffit que l'indicateur soit calculé sur les 100 dernières barres.
Raison: