[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 320

 
snail09:
Soit vous comptez toutes les parenthèses de gauche, puis toutes les parenthèses de droite, puis vous comparez les quantités, soit vous commentez les fonctions une par une jusqu'à ce que vous trouviez l'erreur. Les goûts et les couleurs (conception du code source) sont différents pour chacun.
il y a 4 parenthèses ouvrantes et 4 parenthèses fermantes, d'accord. Mais je ne sais pas trop comment les commentaires peuvent m'aider.
 
Pinki:
Il y a 4 parenthèses d'ouverture et 4 parenthèses de fermeture, d'accord. Mais comment les commentaires peuvent aider, je ne comprends pas bien.

Vous pouvez d'abord commenter les fonctions personnalisées, puis les boucles, les constructions logiques... Je peux vous assurer que vous trouverez une correspondance à votre support en coupant séquentiellement. Ou peut-être avez-vous oublié de mettre " ;" quelque part aussi...

Ne confondez-vous pas SI et POUR ?

Désolé, je ne l'ai pas remarqué tout de suite.

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

Comparez-le avec ce fragment. C'est juste une variante.

 
001:

Qui peut expliquer pourquoi le 6ème ordre ne s'est pas ouvert sur le chandelier et ce qu'il faut faire pour qu'il s'ouvre ?

Journal.

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4 : open #7 sell stop 0.10 GBPUSD at 1.62233 sl : 1.64443 tp : 1.57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Testeur : #6 supprimé pour cause d'expiration
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4 : open #6 sell stop 0.10 GBPUSD at 1.63373 sl : 1.64570 tp : 1.62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Testeur : #5 supprimé pour cause d'expiration
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4 : open #5 sell stop 0.10 GBPUSD at 1.63622 sl : 1.64702 tp : 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Testeur : #4 supprimé pour cause d'expiration
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4 : open #4 sell stop 0.10 GBPUSD at 1.63365 sl : 1.64917 tp : 1.61097 ok

Les quatrième, cinquième et sixième ordres en attente ont été supprimés en raison de leur expiration.

Augmenter leur durée de vie ou mettre 0 (zéro), voir. OrderModify()

 
мmersi:

Les quatrième, cinquième et sixième reports ont été supprimés en raison de leur date d'expiration.

Augmenter leur date d'expiration ou la fixer à 0 (zéro) voir OrderModify(). OrderModify()


Ce qui me perturbe, c'est qu'avant que le 6e ordre n'expire (il a expiré à 20:00), il y avait une bougie vers le bas à 16:00. On peut le voir sur la photo.
 
mersi:

1. La fonction trouve l'ordre dont le ticker est le plus élevé dans l'historique, ce qui signifie le dernier ordre clôturé (sauf bien sûr dans un cas exceptionnel, pour lequel votre option avec le temps de clôture maximum est préférable).

2. Selon les conditions , le premier ordre est ouvert avec le TP/SL spécifié et seul le second ordre peut être ouvert avec le nouveau TP/SL, ce qui signifie que la fonction ne peut retourner zéro que si la première transaction était nulle, mais pas s'il n'y a pas d'ordres fermés dans l'historique.

Une dernière chose. Dans votre variante, l'utilisation de j et d'un autre SELECT dans la fonction est redondante.

c'est suffisant :

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1. Vous pouvez vous fier à 100 % à votre courtier (ou au courtier du client) pour la numérotation des billets ? Le temps reste une valeur plus stable - ici, il ne peut changer l'heure que manuellement en ajustant l'historique. IMHO - mieux vaut utiliser le temps.

2. Si le client doit modifier la logique, il faudra peut-être réécrire votre fonction.

3. Suggérez-vous

Profit=OrderProfit()+OrderSwap()+OrderCommission();

pour l'utiliser à l'intérieur d' une boucle ? Pour quoi faire ? Vous ne pouvez l'utiliser qu'une seule fois pour la dernière commande déjà trouvée.

А... Votre client ne testera pas et n'optimisera pas. Je vois...

 

GlobalVariableSetOnCondition() - pouvez-vous expliquer en langage clair ce que fait cette fonction ? La description dans l'aide est très confuse, je n'arrive pas à comprendre certains points ?

Définit une nouvelle valeur de la variable globale existante si la valeur actuelle de la variable est égale à la valeur du troisième paramètre check_value. Si la variable n'existe pas, la fonction génère une erreur ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) et renvoie FALSE. La fonction renvoie VRAI si elle est exécutée avec succès, sinon elle renvoie FAUX. Pour obtenir les informations sur les erreurs, la fonction GetLastError() doit être appelée. Si la valeur actuelle de la variable globale est différente de check_value, la fonction renvoie FALSE.
Cette fonction permet un accès atomique à la variable globale, elle peut donc être utilisée pour créer un sémaphore pour une communication simultanée entre plusieurs Expert Advisors dans le même terminal client.

 
fore-x:

GlobalVariableSetOnCondition() - pouvez-vous expliquer en langage clair ce que fait cette fonction ? La description dans l'aide est très confuse, je n'arrive pas à comprendre certains points ?

Définit une nouvelle valeur à une variable globale existante, si la valeur actuelle de la variable est égale au troisième paramètre de check_value. Si la variable n'existe pas, la fonction génère une erreur ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) et renvoie FALSE. La fonction renvoie VRAI si elle est exécutée avec succès, sinon elle renvoie FAUX. Pour obtenir les informations sur les erreurs, la fonction GetLastError() doit être appelée. Si la valeur actuelle de la variable globale est différente de check_value, la fonction renvoie FALSE.
Cette fonction permet un accès atomique à la variable globale, elle peut donc être utilisée pour créer un sémaphore pour une communication simultanée entre plusieurs Expert Advisors dans le même terminal client.

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

Supposons que vous ayez une variable globale GL_Var.

Il a actuellement une valeur de 1.0.

Vous devez vérifier si cette variable a une valeur de 1,0 et, si c'est le cas, lui donner la valeur 2,0.

Ce sera comme ça :

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

Afin de gérer les valeurs de retour de cette fonction, vous pouvez l'appeler via if

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

Avant d'appeler cette fonction, vous pouvez vérifier si la variable globale GL_Var existe, pour éviter l'erreur ERR_GLOBAL_VARIABLE_NOT_FOUND

 

Veuillez m'aider à résoudre un petit problème géométrique. Il existe une ligne dont les coordonnées sont p1 et p2 (en rouge sur l'image). Je dois trouver la coordonnée de p3, qui est égale à 38,2 % de la coordonnée de p2. J'ai fait ce qui suit :

if(p2>p1) p3=p2-(p2-p1)*0.382 ; vrai pour le haut de la figure

if(p1>p2) p3= p2+(p1-p2)*0.382 ; vrai pour la partie inférieure de la figure

Existe-t-il un moyen d'écrire tout cela en une seule équation sans "si" ?

 

Eh bien, écrivez-le comme ça.

p3=p2-(p2-p1)*0.382

 
Roger:

Eh bien, écrivez-le comme ça.

p3=p2-(p2-p1)*0.382


Et en effet ! Merci pour votre aide.