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

 
Frostr:
Je l'ai déjà vidé de son contenu... Il y a un histogramme, donc si vous ne trouvez pas un moyen de le faire avec des barres, vous devrez l'utiliser...
.
Préférez-vous les barres aux chandeliers ? Question intéressante, mais je n'ai pas envie de perdre mon temps avec elle. En fait, une barre est aussi un histogramme auquel sont attachées des étiquettes d'ouverture et de fermeture
. Si vous ne vous souciez pas des couleurs de ces étiquettes, vous pouvez utiliser cette méthode comme dans H.A. Calculez simplement la largeur de la barre en pixels (c'est possible, j'ai vérifié mais je ne me souviens pas où c'est dans l'aide) et définissez la largeur de la barre, tandis que l'ouverture et la fermeture seront de la couleur spécifiée dans les propriétés du graphique.
 

Pourquoi la méthode virtuelle Compare surchargée dans la classe CListNode est-elle ignorée ?

#include <Arrays\List.mqh>
#define  SIZE 10

class CData : public CObject
  {
public:
   int m_data;
  };

class CListNode : public CList
  {
public:
   virtual int Compare(const CObject *node,const int mode=0) const {
      int _test=1;
      return(_test);
   }
  };

int OnInit() {
        CListNode *node=new CListNode;
        if(CheckPointer(node)==POINTER_INVALID) {
           Print("Не могу создать объект");
           return(INIT_FAILED);
        }
        else Print("Объект создан, работаем дальше");

        MathSrand(GetTickCount());
        for(int i=0;i<SIZE;i++) {
           CData *data=new CData;
           if(data==NULL) {
              Print("Нет возможности получить указатель");delete node;return(INIT_FAILED);
           }
           printf("Узел %i, данные узла %i",i,data.m_data=MathRand());
           node.Add(data);
        }
        
        node.Sort(0);
        int _total=node.Total();
        for(int i=0;i<_total;i++) {
           CData *data=node.GetNodeAtIndex(i);
           if(data==NULL) {
              Print("Нет возможности получить указатель");delete node;return(INIT_FAILED);
           }
           printf("Узел %i, данные узла %i",i,data.m_data);
        }

        if(CheckPointer(node)==POINTER_DYNAMIC) {Alert("Удаляем объект");delete node;}
        else Alert("Non-dynamic object");
   return(INIT_SUCCEEDED);
}
Vérifié dans le débogueur, utilise toujours Compare from CObject.
 

Bonjour, j'ai écrit un EA comme celui-ci. Pourquoi signale-t-il un signal de vente presque toutes les secondes ?

//+------------------------------------------------------------------+

//| Peresechenie TM.mq4 |

//| Popov Vladimir |

//| http://vk.com/id143715412 |

//+------------------------------------------------------------------+

#property copyright "Popov Vladimir"

#lien de propriété "http://vk.com/id143715412"


double SellPrice ;

double TakeProfit ;

double StopLoss ;


extern string TimeFrame = "cadre temporel actuel" ;

extern int HalfLength = 20 ;

extern int Price = PRICE_CLOSE ;

extern double ATRMultiplier = 2.0 ;

extern inttern ATRPeriod = 100 ;

extern bool Interpolate = true ;



double PriceHigh, PriceLow, PriceMiddle ;

double HighesBuffer[] ;

double LowesBuffer[] ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert |

//+------------------------------------------------------------------+

int init()

{

si (Chiffres == 3 || Chiffres == 5)

{

TakeProfit *= 10 ;

StopLoss *= 10 ;

}

retour(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation des experts |

//+------------------------------------------------------------------+

int deinit()

{





retour(0) ;

}

//+------------------------------------------------------------------+

int start()

{

PriceHigh = iCustom (Symbol (), 0, "Time", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0) ;

PriceLow = iCustom (Symbol (), 0, "Time", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0) ;

PriceMiddle = iCustom (Symbol (), 0, "Time", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 0, 0) ;


si(Ask <= PriceLow)

{

Alert("Signal d'achat") ;

}

si(Bid >= PriceHigh)

{

Alert("Signal de vente") ;

}

retour(0) ;

}

//+------------------------------------------------------------------+

 

Pouvez-vous me dire s'il est possible de sauvegarder automatiquement le rapport après les tests ?

J'ai juste besoin de faire beaucoup de tests en mode automatique (je prévois de le faire par optimisation sans GA) et de sauvegarder le rapport complet (y compris l'image) sur le disque dur.

 
tuner:

Pouvez-vous me dire s'il est possible de sauvegarder automatiquement le rapport après les tests ?

J'ai juste besoin de faire beaucoup de tests en mode automatique (je prévois de le faire par optimisation sans GA) et de sauvegarder le rapport complet (y compris l'image) sur le disque dur.


Il existe des fonctions TesterStatistics() etOnTester().

Jetez-y un coup d'œil, cela peut vous aider

 
Pr0t0tip:

Bonjour, j'ai écrit un EA comme celui-ci. Pourquoi signale-t-il un signal de vente presque toutes les secondes ?



Essayez de remplacer

if(Ask <= PriceLow)

 {

 Alert("Сигнал к покупке");

 }

 if(Bid >= PriceHigh)

 {

 Alert("Сигнал к продаже");

 }

 return(0);

à l'adresse

int static flag=0;
if(Ask <= PriceLow && flag<1)

 {

 Alert("Сигнал к покупке");
flag=1;
 }

 else if(Bid >= PriceHigh && flag>-1)

 {

 Alert("Сигнал к продаже");
flag=-1;
 }
else flag=0;

 return(0);
 
Vinin:


Il existe une fonction TesterStatistics() et OnTester().

Jetez-y un coup d'œil, ça pourrait vous aider.


Merci pour le conseil, mais il ne semble pas utile car c'est le rapport lui-même dans sa forme originale (htm) avec une image qui est nécessaire. Il ne semble pas y avoir de solution toute faite. Je vais essayer de faire un script dans autoit, qui dans le testeur spécifié nombre de fois appuie sur le bouton "Start" et après chaque exécution va à l'onglet "Report" et enregistre les résultats dans le fichier.
 

Bonjour, aidez-moi à résoudre le problème suivant : à partir de la version 625, les valeurs des fonctions Alert (...), Print(...), Comment(...) ne sont pas affichées sur le graphique de l'indicateur dans le testeur MT4 ; ces valeurs sont affichées lors du lancement de l'indicateur pour le trading réel ou à travers le débogueur. Ainsi, il devient impossible de suivre les changements de paramètres sur les données historiques en utilisant au moins la fonction Print(...). Je n'ai eu aucun problème avec le 610e build car toutes les valeurs étaient affichées dans l'onglet "Experts" du terminal.

Peut-être que le code devrait être retravaillé d'une autre manière similaire à MQL5 ? Je ne sais pas quoi faire, je dois toujours utiliser l'ancienne version...

 

Bonjour. Quelqu'un a-t-il déjà rencontré ce problème ?

J'ai plusieurs EAs dans le dossier, mais le terminal (MT 4, build 625) ne les a pas. Et ceux qui sont sur le terminal ne sont pas dans le dossier. Est-ce un miracle ?



 
Ale-xander:

Bonjour. Quelqu'un a-t-il déjà rencontré ce problème ?

J'ai plusieurs EAs dans le dossier, mais le terminal (MT 4, build 625) ne les a pas. Et ceux qui sont sur le terminal ne sont pas dans le dossier. Est-ce un miracle ?



Pas de miracles.

Fichier --> Ouvrir le dossier de données --> Dans la fenêtre qui s'ouvre --> MQL4 --> et c'est là que se trouvent les dossiers auxquels vous êtes habitué. Le lien vers cet article sur la page principale du forum. Je suis juste trop paresseux pour le faire.

Raison: