[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 348

 
hoz:


J'ai déjà essayé. Cela ne fonctionne pas non plus :

Tu dois être plus prudent.
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = 1,                                  // Тикет искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                  // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      }
   }
   if (s_ticket != -1)
   {
      OrderDelete(s_ticket,Black);
   }
   return (0);
}
 

Ça marche enfin ! Cela fonctionnait, en principe, ainsi que la version précédente. La faute principale était dans l'appel de fonction, pas dans la fonction elle-même.

Du point de vue d'un professionnel, toutes les variables doivent être remises à zéro lorsqu'elles entrent dans une fonction, sauf si elles sont statiques, c'est-à-dire qu'il n'y a pas besoin de conserver leur valeur spécifique, n'est-ce pas ?

 
hoz:

Ça marche enfin ! Cela fonctionnait, en principe, ainsi que la version précédente. La faute principale était dans l'appel de fonction, pas dans la fonction elle-même.

Du point de vue d'un professionnel, toutes les variables doivent être remises à zéro lorsqu'elles entrent dans une fonction, sauf si elles sont statiques, c'est-à-dire qu'il n'est pas nécessaire de conserver leur valeur spécifique, n'est-ce pas ?

Initialiser les variables de la fonction avec des valeurs qui ne provoqueront pas de dysfonctionnement de la fonction et les erreurs les plus difficiles à trouver.

J'utilise généralement 0 ou -1, selon l'objectif de la variable. Si la variable de la fonction stocke l'indice de la position trouvée, elle est initialisée à -1. Si vous l'initialisez à zéro, alors après avoir cherché la bonne position et son absence, vous pourrez toujours choisir la position avec l'index 0, bien que ce ne soit pas la position que vous cherchez. A -1, la position ne sera pas choisie. C'est l'un des exemples possibles où une erreur est difficile à trouver - tout semble être correct dans la fonction, mais la sortie est totalement fausse... et l'EA ne fonctionne pas avec l'ordre/la position que nous attendions...

 

Une fonction doit être courte (facultative, mais souhaitable) et parfaitement claire (son but). comme 2*2=4. c'est-à-dire que le programmeur doit clairement comprendre à quoi elle sert et quelle opération elle effectue. ensuite, il doit la sortir de son esprit et oublier ce qu'elle contient, et l'utiliser comme une "boîte noire".

Toutes les variables utilisées par une fonction doivent lui être transmises comme arguments. L'utilisation de variables globales sans les passer en argument ne se justifie que si elles sont, par exemple, des Externs (dans le cas de MT). Changer les globaux dans une fonction est inacceptable, si une valeur de retour est manquante, passez les variables par référence dans la liste des arguments.

En d'autres termes, si vous devez jeter cette fonction, vous n'aurez pas à vous rappeler pourquoi la version dépouillée ne fonctionne pas, car tous les globaux de cette fonction ont été modifiés. Tout ceci a pour but de garantir que si vous devez le refaire, cela ne provoquera pas de réaction en chaîne.

 

Bonjour à tous !

Test de Pound-En.

L'ordre aurait dû être clôturé au TAKE PROFIT avant le STOP LOSS.

Mais mon ordre ne s'est pas fermé sur le Take Profit pour une raison quelconque.

QUESTION : POURQUOI MON ORDRE N'A-T-IL PAS ÉTÉ CLÔTURÉ AU NIVEAU DU TAKE PROFIT COMME LE PRÉVOIT LA FONCTION DE TRADING?

Méthode de modélisation - tous les tics.

Exemple dans le lien

http://clip2net.com/s/55pdDU

Dans la plupart des cas, les transactions sont fermées à 10 pips stop. à temps.

Il me semble que cela n'a probablement rien à voir avec la distance minimale acceptable entre le prix et le stop.

Quelle autre raison peut expliquer cela ?

Merci.

 

Aide pour prendre des données dans des variables globales à partir d'un indicateur

approximativement :

6,5 USD

6,6 EUROS

GBP 3,3

etc.

Merci d'avance pour votre aide !

/*Décompilé est supprimé. Attention*/.

 
FAQ:

Une fonction doit être courte (facultative, mais souhaitable) et parfaitement claire (son but). comme 2*2=4. c'est-à-dire que le programmeur doit clairement comprendre à quoi elle sert et quelle opération elle effectue. ensuite, il doit la sortir de son esprit et oublier ce qu'elle contient, et l'utiliser comme une "boîte noire".

Toutes les variables utilisées par une fonction doivent lui être transmises comme arguments. L'utilisation de variables globales sans les passer en argument ne se justifie que si elles sont, par exemple, des Externs (dans le cas de MT). Changer les globaux dans une fonction est inacceptable, si une valeur de retour est manquante, passez les variables par référence dans la liste des arguments.

En d'autres termes, si vous devez jeter cette fonction, vous n'aurez pas à vous rappeler pourquoi la version dépouillée ne fonctionne pas, car tous les globaux de cette fonction ont été modifiés. Tout ceci est destiné à ce que, si je dois le refaire, cela ne provoque pas de réaction en chaîne.


Merci, et, Artem, bien sûr ! Vous m'avez ouvert les yeux sur ces points, qui sont logiques en principe, mais que le manque d'expérience laisse parfois inaperçus.

Il y a juste d'autres malentendus. Vous avez écrit que s'il existe des variables globales dans l'EA, elles doivent être utilisées dans les fonctions uniquement en les passant comme arguments, n'est-ce pas ?

J'essaie juste de comprendre, y a-t-il des raisons de créer des variables globales (pas des externs)... Si elles doivent être passées uniquement par des arguments, une longue chaîne de fonctions dépendantes peut collecter beaucoup d'arguments, et les noms des fonctions avec arguments seront très longs.

Et encore une fois, vous pouvez créer une variable globale, la passer dans une fonction par référence et en faire ce que vous voulez, puis la renvoyer par référence à la variable globale, n'est-ce pas ?

Quand j'ai lu votre article aujourd'hui, j'ai commencé à y réfléchir et j'ai transféré certaines variables de global à une fonction. Puis j'ai réalisé que ces variables sont nécessaires dans une autre fonction, qui n'est pas liée à la fonction où je les ai déclarées. Si vous vous écoutez ici : "Changer les globaux et la fonction n'est pas acceptable", puis il s'avère que la fonction qui obtient directement les variables requises doit être appelée à des endroits différents ? Mais cela rend déjà le code, pour ainsi dire, pas beau. Vous voulez que la fonction soit appelée quand elle est nécessaire et pas plus souvent qu'elle ne l'est. Par exemple, la fonction qui recherche tous les ordres, d'achat et de vente. Il est raisonnable de supposer qu'il ne doit être appelé qu'une fois par tic et pas plus d'une fois. Mais si elle est appelée au début, toutes les fonctions qui utilisent ces variables retournées par la fonction de recherche d'ordre ne peuvent pas être passées par ses paramètres. On revient toujours aux variables globales, ou quoi ?

 

Veuillez aider à résoudre le problème de la limite de décalage dans iHigh(Symbol(),timeframe,shift), qui est limitée au nombre 1000.

iTime(Symbol(),timeframe,1001) donne 1970.01.01 00:00
 
Comment diable désactiver l'alerte ? ??????? pourquoi après avoir appuyé sur la barre d'espacement, il ?(!%"?: ? continue de bipper ? ?????????
 
Neo333:
Comment désactiver l'alerte ? ??????? pourquoi après avoir appuyé sur la barre d'espacement, il ?(!%"?: ? continue de bipper ? ?????????

Vous ne devez pas appuyer sur la barre d'espace, mais maintenir le bouton d'alimentation enfoncé pendant 5 à 10 secondes jusqu'à ce que le signal sonore s'arrête.