[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 - 2. - page 113

 
IgorM:

Parfois, il y a des calculs complexes ou le chargement de l'historique dans init(), ou il y a beaucoup d'indicateurs et d'Expert Advisors accrochés au terminal ou...

mais si le terminal interrompt le code pendant son initialisation, l'erreur suivante apparaîtra dans le journal : "....". délai d'attente en expert ...."

Si le journal ne montre aucune erreur dans le terminal, cela signifie que l'initialisation s'est déroulée avec succès. La fonction start() elle-même est facile à vérifier - écrivez dans la première ligne start() : Print("new tick") ;


Je l'ai fait((.

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Oui, je balance beaucoup d'informations, de calculs aussi, j'expérimente les tics...

Le calcul prend 2 - 3 minutes, MT "ne se bloque pas", tout fonctionne typiquement, les messages de Print() et Alert sont affichés et ensuite tout))

J'ai regardé tous les messages de MT, je n'ai pas trouvé d'erreurs...

Veuillez m'aider.

 
BBSL:

Le calcul prend 2 - 3 minutes, MT ne "raccroche" pas, tout fonctionne typiquement, les messages Print() et Alert sont affichés et ensuite tout)).

si Print() est imprimé, start() fonctionne certainement, mais je suis confus par votre déclaration que le calcul prend 2-3 minutes - avec une telle charge sur le terminal vous devez interrompre les calculs en utilisant la fonction sleep() sinon le terminal va certainement se bloquer.

Comme MT4 ne dispose pas de débogueur, insérez Print() dans les sections de code douteuses et récupérez les sections de code et les conditions qui ont échoué ou non.

 
J'ai besoin de fixer le fait de déclencher les ordres ouverts par TakeProfit ou StopLoss, et les valeurs de TakeProfit et StopLoss ne m'intéressent pas.
 
Jaguar1974:

Comment puis-je vérifier si un ordre est déclenché par TakeProfit ou StopLoss ? Merci pour votre réponse !

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
Familiarisez-vous avec le code des deux fonctions et fusionnez-les en une seule pour optimiser la vitesse d'exécution et vos tâches spécifiques...
 
eddy:
Sayod ,sur quelle période avez-vous négocié et avec quels paramètres ?


Quelle est la différence ou vous l'avez inversé et voulez le tester ?

Négocié sur h1 par défaut,

Pas de pipe - 30

LotExpo - 1,59

Je pense que les paramètres n'ont pas trop d'importance si l'idée a été mise en œuvre, je pense que le conseiller expert sera bon avec tous les paramètres, IMHO.

 
Jaguar1974:
J'ai besoin de valider le fait que les ordres ouverts se déclenchent par TakeProfit ou StopLoss. Je ne suis pas intéressé par les valeurs réelles de TakeProfit et StopLoss.

Si vous voulez simplement enregistrer le fait que l'ordre a été déclenché, vous pouvez mémoriser le nombre d'ordres sur le tick précédent et le comparer au nombre d'ordres sur le tick suivant - si le nombre d'ordres a changé, cela signifie .....
 
kiimar:
Le terminal a fermé l'ordre perdant avec le commentaire "so:19.5%/28.4/145.8". Qu'est-ce que cela signifie ?
Cela signifie que lorsque le niveau de marge libre de 19,5 % a été atteint, un stopout s'est produit et la transaction perdante a été fermée conformément aux règles.
 
IgorM:

si Print() s'imprime, alors vous avez sûrement start() qui fonctionne, mais je suis confus par votre déclaration que le calcul prend 2-3 minutes - à une telle charge du terminal, vous devez interrompre les calculs en utilisant la fonction sleep(), sinon le terminal va définitivement se bloquer.

MT4 ne disposant pas de débogueur, insérez Print() dans les sections de code douteuses et récupérez les sections de code et les conditions qui ont échoué ou non.


Désolé, je me suis trompé, Print ne fonctionne que dans init. Je n'arrive pas à démarrer))

Oui, à la fin de chaque fonction, je mets print avec un message à ce sujet, pour vérifier si tout est ok. Et tous les messages (toutes les fonctions) ont fonctionné à 100% jusqu'à la fin de l'init, je ne peux pas aller au début !

Merci d'avance pour la réponse !

 
Merci, j'ai encore beaucoup à apprendre.
artmedia70:
Familiarisez-vous avec le code des deux fonctions et fusionnez-les en une seule pour optimiser la vitesse d'exécution et vos tâches spécifiques...
 
BBSL:


Désolé, je me suis mal exprimé, Print ne fonctionne que dans inite. Je n'arrive pas à démarrer))

Oui, à la fin de chaque fonction, j'insère un print avec un message à son sujet pour vérifier si tout est ok. Et tous les messages (toutes les fonctions) ont fonctionné à 100% jusqu'à la fin de l'init, je ne peux pas aller au début !

Merci d'avance pour la réponse !

Donc vous n'avez franchement pas de tique dans le terminal. C'est-à-dire que soit il n'est pas connecté, soit vous travaillez sur un graphique hors ligne, soit vous vérifiez IsExpertEnabled() dans l'init et si ce n'est pas autorisé, alors activez les EAs.

Raison: