Questions des débutants MQL5 MT5 MetaTrader 5 - page 831

 
tsd Tsepkov:

Je veux dire le prénom, il est dit que vous devez changer le prénom pour le vrai nom, mais ça ne marche pas.

Oui, si votre statut est "Vendeur", vous ne pouvez pas modifier vos données :

Essayez d'écrire une demande à Servicedesk avec une explication.

 
Vladimir Karputov:

Oui, si votre statut est "Vendeur", vous ne pouvez pas modifier vos données :

Essayez d'écrire une demande à servicedesk avec une explication.

C'est ça le truc, non, tu dois éditer pour en devenir un. C'est un cercle vicieux...

Votredemande d'enregistrement en tant que vendeur a été rejetée par le modérateur.

Veuillez corriger les données que vous avez fournies.

 
tsd Tsepkov:

***

Veuillez corriger les données que vous avez fournies.

Cela pourrait-il être la raison ? Les photos sont de travers ou sombres ou ne correspondent pas à ce qui est demandé...

 
tsd Tsepkov:

C'est ça le truc, non, tu dois éditer pour en devenir un. C'est un cercle vicieux...

Votredemande d'inscription en tant que vendeur a été rejetée par le modérateur.

Veuillez corriger les données que vous avez fournies.

Alors, écrivez à Servicedesk pour lui faire part du problème. C'est plus productif que de taper sur le rail sur le forum ;)
 
VHS:

Veuillez me conseiller sur la façon d'utiliser la méthode void Ignore(long value) { m_ignore=value ; } de la classe standard CExpertSignal dans la classe Trailing personnalisée lors de la programmation en MQL5 ? Comment puis-je y accéder ?

J'ai une classe de signaux personnalisés qui me donne des méthodes pour ouvrir et fermer des positions. Mais dans Trailing, je voulais maintenir la position par une autre méthode. Si on écrit séparément les classes personnalisées MySignal et MyTrailing, une position est fermée par la condition qui s'est déclenchée en premier. Si la condition Trailing a été déclenchée plus tôt, tout va bien. Mais parfois, un nouveau signal (de retournement) provient de MySignal et la position est inversée, et j'ai besoin qu'il soit accompagné d'un Trailing après l'ouverture, sans fermeture et sans ouverture d'une nouvelle position. J'ai regardé les classes de base et j'ai l'impression que m_ignore de la classe de base des signaux est responsable de cela. Si on lui attribue la valeur 1 dans le filtre approprié, il semble fonctionner comme il se doit. J'ai ajouté filter0.Ignore(0) à la classe Expert Advisor dans OnInit. Mais je suis nouveau dans la POO et je ne comprends pas comment changer cette valeur dans la classe MyTrailing, qui n'est pas héritée de la classe CExpertSignal, mais qui est son "cousin" (disons filter0.Ignore(1) ). Veuillez me conseiller sur la manière de procéder.

En fait, question plus générale : comment faire passer des informations entre deux classes qui ne sont pas des descendantes ? Comment transférer les informations de la classe suiveuse à la classe signal ? Vous pouvez probablement créer une variable globale et communiquer par son intermédiaire. Mais cela semble complètement perverti par rapport à la logique des membres protégés dans la POO.


Aidez-moi ! J'ai déjà essayé de m'éloigner de build Ignore (qui, bien sûr, n'est pas bon en soi, les gens ont essayé de l'inclure dans le code de base) et je ne peux toujours pas me connecter. J'essaie d'inventer pour le troisième jour (je n'ai pas encore de manuel).

J'ai même modifié les codes de classe : j'ai implémenté le membre booléen protégé (m_permition) dans la classe MySignal et j'ai créé une méthode Set pour celui-ci ; j'ai intégré return(0) dans la division longue et la division rapide si !m_permition. Dans MyTrailing, nous avons également créé un membre booléen protégé m_signal_permition, nous avons créé des méthodes Get et Set pour celui-ci, nous avons enseigné CheckTrailing pour le contrôler if(position==NULL) {m_signal_permition = true ; return(false);} else m_signal_permition = false ;

Je ne comprends pas une seule chose, où et comment je dois les réunir. J'ai essayé de faire simplement référence à eux dans OnTick, ça échoue.

J'ai lu l'article de Vladimir "Comment enseigner...". L'idée de créer une instance d'un autre signal dans le signal personnalisé et de communiquer par son intermédiaire semble être claire, mais quelque part dans mon système, cela ne colle pas complètement : les classes de signal et de suivi ne sont pas héritées les unes des autres.

Aidez, gens de bonne volonté, de toutes les manières possibles.

 

Bonjour chers collègues. Outre le prix de protection, les cotations MT5 contiennent certaines données, telles que l'écart historique et le slippage (qui est le même partout par défaut et est de 10 points à cinq chiffres).

En faisant une telle demande après l'ouverture d'une position :

Print("Expert name: ",__FILE__,", Открыта поза Sell с магиком №: ",IntegerToString(m_trade.RequestMagic()),", Cпред ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
", Deviation ",IntegerToString(m_trade.RequestDeviation()));

Nous obtenons cette réponse :

Est-ce que je comprends bien que le testeur MT5 compte à la fois le spread et le slippage, exactement comme dans MT4 où j'aurais réglé manuellement le spread à 13 pips, pour l'exemple spécifique de la capture d'écran.

 

Bonjour Quelqu'un peut-il m'aider ? Comment puis-je lier un EA mt5 à un numéro de compte spécifique ?

 
denis basuk:

Bonjour, quelqu'un peut-il m'aider ? Comment puis-je lier un Expert Advisor mt5 à un numéro de compte spécifique ?

Je dois vérifier le numéro de compte. Cela doit être fait dans OnInit() et OnTick(). Exemple :

 

Bonjour, j'essaie de transférer des indicateurs de MT4 à MT5. J'ai un indicateur simple qui montre le temps jusqu'à la prochaine barre. Cet indicateur utilise OnTimer. Je le mets à jour dans OnTimer en utilisant la fonction void refreshClock(). Est-il correct d'utiliser cette construction pour d'autres indicateurs qui nécessitent l'utilisation de OnTimer ? Ou vous pouvez optimiser le processus d'adressage à OnTimer ?

#property description "Time"
#property indicator_chart_window
#property indicator_plots   0

                                    
                                                                                             
input int Offset_Minutes = 60;                                                                                                         
input int Font__Size = 10;                                   
input color  Font_Color = clrWhite;                         
input color  Font_No_Bar_Color = clrRed;                        
input ENUM_BASE_CORNER  Corner = CORNER_RIGHT_UPPER;        
input int Time_X = 140;                                          
input int Time_Y = 0;                                            


#define  Clock_Name "Тimer"
int selectTime;
int diff;
int offsetHour;

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

int  OnInit()
{   
   EventSetMillisecondTimer(1000); 
   return(0); 
}

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

void OnDeinit(const int reason) 
{ 
   if(reason==REASON_REMOVE      || 
      reason==REASON_CHARTCHANGE || 
      reason==REASON_RECOMPILE   || 
      reason==REASON_CHARTCLOSE  || 
      reason==REASON_CLOSE       || 
      reason==REASON_PARAMETERS)    
   { 
     ObjectDelete(0, "Тimer");
     EventKillTimer(); 
   }
  ChartRedraw();
}

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

void OnTimer( )                 
{ 
   refreshClock();  
}

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

int  OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
   refreshClock();
   return(rates_total);
}
void refreshClock()
{
   static bool inRefresh = false;
           if (inRefresh) return;
               inRefresh = true;
                              ShowClock(); ChartRedraw();
               inRefresh=false;
}

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

void ShowClock()
{
   int periodMinutes     = periodToMinutes(Period());
   int currentTime       = (int)TimeCurrent();
   int localTime         = (int)TimeLocal();
   int barTime           = (int)iTime();
   
   diff = (int)MathMax(round((currentTime-localTime)/60.0)*60,-24*3600);
   offsetHour = (int)-Offset_Minutes*60; // сдвиг в минутах
   
   
   int currentTimeReal   = localTime+offsetHour;
   int sel_localTime     = localTime+diff;
   selectTime = sel_localTime;
   
     
      color  theColor;
      string time = getTime(barTime+periodMinutes*60-selectTime,theColor);
      int times = barTime+periodMinutes*60-selectTime;
      if(times < -60 || TerminalInfoInteger(TERMINAL_CONNECTED) == false || 
      currentTimeReal-currentTime > 60 || currentTime-currentTimeReal > 60)
      time = "Time Off";
             
   if(ObjectFind(0, Clock_Name) < 0)   
   ObjectCreate(0, Clock_Name, OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0, Clock_Name, OBJPROP_TEXT, "Time: " + time);
   ObjectSetString(0, Clock_Name, OBJPROP_FONT, "Verdana");
   ObjectSetInteger(0, Clock_Name, OBJPROP_FONTSIZE, Font__Size);
   ObjectSetInteger(0, Clock_Name, OBJPROP_COLOR, theColor);
        ObjectSetInteger(0, Clock_Name, OBJPROP_CORNER, Corner);
        ObjectSetInteger(0, Clock_Name, OBJPROP_XDISTANCE, Time_X);
   ObjectSetInteger(0, Clock_Name, OBJPROP_YDISTANCE, Time_Y);
      
}

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

string getTime(int times, color& theColor)
{
   string stime = "";
   int    seconds;
   int    minutes;
   int    hours;
   int currentTime       = (int)TimeCurrent();
   int localTime         = (int)TimeLocal();
   
   
   offsetHour = (int)-Offset_Minutes*60;
   
   int currentTimeReal   = localTime+offsetHour;
  
   if (times < 0 || TerminalInfoInteger(TERMINAL_CONNECTED) == false || 
   currentTimeReal-currentTime > 60 || currentTime-currentTimeReal > 60) {
         theColor = Font_No_Bar_Color; times = (int)fabs(times); }
   else  theColor = Font_Color;
   
   seconds = (times%60);
   hours   = (times-times%3600)/3600;
   minutes = (times-seconds)/60-hours*60;

   if (hours>0)
   if (minutes < 10)
         stime = stime+(string)hours+":0";
   else  stime = stime+(string)hours+":";
         stime = stime+(string)minutes;
   if (seconds < 10)
         stime = stime+":0"+(string)seconds;
   else  stime = stime+":" +(string)seconds;
   return(stime);
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+
  
datetime iTime(ENUM_TIMEFRAMES forPeriod=PERIOD_CURRENT)
{
   datetime times[]; if (CopyTime(Symbol(),forPeriod,0,1,times)<=0) return(TimeLocal());
   return(times[0]);
}

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

int periodToMinutes(int period)
{
   int i;
   static int _per[]={1,2,3,4,5,6,10,12,15,20,30,0x4001,0x4002,0x4003,0x4004,0x4006,0x4008,0x400c,0x4018,0x8001,0xc001};
   static int _min[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200};

   if (period==PERIOD_CURRENT)
       period = Period();  
            for(i=0;i<20;i++) if(period==_per[i]) break;
   return(_min[i]);  
}
 
VHS:

Quelqu'un peut-il m'aider ? Déjà essayé de s'éloigner de l'Ignore intégré (qui, bien sûr, n'est pas bon en soi, les gens ont essayé de l'inclure dans le code de base) et ne peut toujours pas se connecter. J'essaie d'inventer pour le troisième jour (je n'ai pas encore de manuel).

J'ai même modifié les codes de classe : j'ai implémenté le membre booléen protégé (m_permition) dans la classe MySignal et j'ai créé une méthode Set pour celui-ci ; j'ai intégré return(0) dans la division longue et la division rapide si !m_permition. Dans MyTrailing, nous avons également créé un membre booléen protégé m_signal_permition, nous avons créé des méthodes Get et Set pour ce membre et nous avons appris à CheckTrailing à le contrôler if(position==NULL) {m_signal_permition = true ; return(false);} else m_signal_permition = false ;

Je ne comprends pas une seule chose, où et comment je dois les réunir. J'ai essayé de faire simplement référence à eux dans OnTick, ça échoue.

J'ai lu l'article de Vladimir "Comment enseigner...". L'idée de créer une instance d'un autre signal dans le signal personnalisé et de communiquer par son intermédiaire semble être claire, mais quelque part dans mon système, cela ne colle pas complètement : les classes de signal et de suivi ne sont pas héritées les unes des autres.

Aidez-moi, gens de bonne volonté, de toutes les manières possibles.

J'ai fait des progrès en une semaine ! Méthode Signal trouvée dans la classe CExpert. Insertion du code dans OnTick.

CExpertSignal *my_signal = ExtExpert.Signal() ; my_signal.Ignore(0) ;

Maintenant, si je change "1" entre parenthèses manuellement, la méthode Ingnore fonctionne - le Conseiller Expert n'effectue aucune transaction par le signal.

Il ne reste plus qu'à comprendre comment obtenir des informations sur l'objet suiveur dans OnTick. Malheureusement, il n'existe pas de méthode ExtExpert.Trailing() pour obtenir la référence à l'objet de suivi et, par conséquent, le compilateur ne comprend pas à quel objet je veux appliquer ma méthode GetPermition implémentée dans le suivi. Peut-être que quelqu'un peut me dire ce qu'il faut faire ?