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

 
gyfto:


J'ai la question suivante. Il y a un bloc dans init(), qui suspend le terminal (c'est ce que je veux transférer à la dll). Naturellement, le journal ne peut pas être consulté - le terminal ne peut être fermé que par Ctrl+Alt+Delete. Désimprimer pour tracer (et mesurer le temps de passage des boucles en bloc) n'aide pas - l'imprimante n'écrit rien, la journalisation n'est même pas créée. J'essaie d'utiliser FileOpen/FileWrite dans le même but - le fichier est juste créé (0 Ko), et silence. J'ai mis FileWrite après FileOpen, sur la ligne suivante - aucun effet. Dans quel sens dois-je creuser ?

Essayez d'utiliser ceci. Si cela n'aide pas, pour rechercher les erreurs, vous pouvez temporairement mettre le bloc d'initialisation mentionné dans start pour un démarrage unique via le drapeau et essayer de "tirer" les journaux de celui-ci.
 
gyfto:


Le sujet a été clos... Méchant homme.

J'ai la question suivante. Il y a un bloc dans init(), qui suspend le terminal (c'est ce que je veux transférer à la dll). Naturellement, je ne peux pas voir le journal - le terminal ne se ferme qu'avec Ctrl+Alt+Delete. Désimprimer pour tracer (et mesurer le temps de passage des boucles en bloc) n'aide pas - l'imprimante n'écrit rien, la journalisation n'est même pas créée. J'essaie d'utiliser FileOpen/FileWrite dans le même but - le fichier est juste créé (0 Ko), et silence. J'ai mis FileWrite après FileOpen, sur la ligne suivante - aucun effet. Quelle est la direction à suivre pour creuser ?


Regardez, il n'y a pas de caché dans les attributs ?


Ce n'est pas le cas.
 
TarasBY:
Essayez d'utiliser ceci. Si cela n'aide pas, pour rechercher les erreurs, vous pouvez temporairement prendre le bloc d'initialisation mentionné dans le démarrage pour un démarrage unique via un drapeau et essayer de "tirer" les journaux de celui-ci.


Ni le démarrage unique dans start ou ininit ne fonctionne - ni Print ou FileWrite. Je joins ce morceau de code (je ne vois pas d'autre issue), je ne vais pas le poster ici, car il est trop long. J'ai supprimé toutes les déclarations de tampon et j'y ai décrit tous les appels d'indicateurs techniques intégrés. J'ai déjà pensé au débordement de mémoire avec les tableaux, j'ai calculé que le plus grand tableau plus tous les autres tableaux font cinquante mètres et demi. Eh bien, si ça ne s'imprime pas même sur la toute première ligne, en entrant dans le bloc... - c'est ce qui me dérange. La version jointe est vraie avec FileWrite.
Dossiers :
eflfcaj.mq4  10 kb
 
gyfto:

Ni le lancement unique au démarrage ni ininit ne fonctionnent - ni Print ni FileWrite. Je joins ce morceau de code (je ne vois pas d'autre issue), je ne le colle pas ici car il est trop long. J'ai supprimé toutes les déclarations de tampon et j'y ai décrit tous les appels d'indicateurs techniques intégrés. J'ai déjà pensé au débordement de mémoire avec les tableaux, j'ai calculé que le plus grand tableau plus tous les autres tableaux font cinquante mètres et demi. Eh bien, si ça ne s'imprime pas même sur la toute première ligne, en entrant dans le bloc... - c'est ce qui me dérange. La version jointe est vraie avec FileWrite.

Le style du code n'en dispose pas. Pas d'espaces, des parenthèses à différents niveaux, plusieurs opérations à la suite, pas de commentaires... Cauchemar ! :-))

Le comprenez-vous vous-même ?

 
Aidez à résoudre un problème avec MT4. Lors de l'appel d'un indicateur personnalisé, ses paramètres d'entrée et ses couleurs dans la fenêtre ne sont pas affichés (clignotement rapide et disparition). Comment le réparer ? J'ai réinstallé MT4, ça n'a pas aidé.
 
gyfto:


Il a fermé le sujet... Pas un homme bon.


= :)
 
gyfto:

Ni le démarrage unique ni le démarrage initial ne fonctionnent - ni l'impression, ni l'écriture de fichiers. Je joins ce morceau de code (je ne vois pas d'autre issue), je ne le colle pas ici car il est trop long. J'ai supprimé toutes les déclarations de tampon et j'y ai décrit tous les appels d'indicateurs techniques intégrés. J'ai déjà pensé au débordement de la mémoire avec les tableaux, j'ai calculé que le plus grand tableau plus tous les autres tableaux font cinquante mètres et demi. Eh bien, si ça ne s'imprime pas même sur la toute première ligne, en entrant dans le bloc... - c'est ce qui me dérange. La version jointe est vraie avec FileWrite.

Je suis d'accord avec Vadim - le code est difficile à lire. Essayez de décomposer ce code en blocs fonctionnels, dans chaque bloc imprimer ou écrire dans un fichier. Et exécutez-le dans une structure qui "ralentit" l'exécution du code, par exemple, comme ceci :

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

Retarde d'une seconde l'exécution du bloc suivant. - Le terminal devrait avoir suffisamment de temps pour imprimer le journal.

 
 

Il y a 2 fonctions très similaires dans le drapeau de Kim "fermeture de la dernière position par STOP" et l'autre par TAKE.

voici le code

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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(OrderSymbol(), 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(OrderSymbol(), 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);
}

Comme vous pouvez le constater, ils sont très similaires.

Mais pour une raison quelconque, seule la fermeture par STOP fonctionne pour moi.

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

Cela fonctionne, mais mon conseiller expert n'imprime pas UNIT, mais continue d'imprimer NULL.

Mais la fermeture au STOP s'imprime correctement : si stop = 1, si non stop =0....

aidez-moi s'il vous plaît....

 
lottamer:

Il y a 2 fonctions très similaires dans le drapeau de Kim "fermeture de la dernière position par STOP" et l'autre par TAKE.

voici le code

Comme vous pouvez le constater, ils sont très similaires.

Mais pour une raison quelconque, seule la fermeture par STOP fonctionne pour moi.

J'ouvre une position manuellement, je mets un TAKE court. Cela fonctionne - mais l'EA n'imprime pas UNIT, mais continue d'imprimer NULL.

Mais la fermeture au STOP s'imprime correctement : si stop = 1, si non stop =0....

aidez-moi à comprendre, s'il vous plaît....


Regardez attentivement à quel prix l'ordre stop était en position ouverte et à quel prix il a été fermé. La fonction d'Igor compare ces prix exacts mais ne prend pas en compte le slippage.
Raison: