Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 831

 
tsd Tsepkov:

Me refiero al nombre, dice que hay que cambiar el nombre por el real, pero no funciona

Sí, si su estado es "Vendedor" no puede editar sus datos:

Intenta escribir una solicitud a servicedesk con una explicación.

 
Vladimir Karputov:

Sí, si su estado es "Vendedor" no puede editar sus datos:

Intenta escribir una solicitud a servicedesk con una explicación.

Esa es la cuestión, no, tienes que editar para convertirte en uno. Es un círculo vicioso...

Susolicitud de registro como vendedor ha sido rechazada por el moderador.

Por favor, corrija los datos que ha proporcionado.

 
tsd Tsepkov:

***

Por favor, corrija los datos que ha proporcionado.

¿Podría ser esta la razón? Las fotos están torcidas u oscuras o no son las requeridas...

 
tsd Tsepkov:

Esa es la cuestión, no, tienes que editar para convertirte en uno. Es un círculo vicioso...

Susolicitud de registro como vendedor ha sido rechazada por el moderador.

Por favor, corrija los datos que ha proporcionado.

Entonces, escribe a servicedesk sobre el problema. Es más productivo que dar golpes en la barandilla del foro ;)
 
VHS:

Por favor, aconseje cómo utilizar el método void Ignore(long value) { m_ignore=value; } de la clase estándar CExpertSignal en la clase personalizada Trailing al programar en MQL5? ¿Cómo puedo acceder a ella?

Tengo una clase de señales personalizadas que me da métodos para abrir y cerrar posiciones. Pero en Trailing quería mantener la posición por otro método. Si se escriben por separado las clases personalizadas MySignal y MyTrailing, una posición se cierra por la condición, que se disparó primero. Si la condición de arrastre se activó antes, todo está bien. Pero a veces llega una nueva señal (de reversión) de MySignal y se invierte la posición, y necesito que vaya acompañada de Trailing después de la apertura, no del cierre y no de la apertura de una nueva. He mirado las clases base y da la sensación de que m_ignore de la clase base de señales es la responsable de esto. Si se le asigna el valor 1 en el filtro correspondiente, parece que funciona como debería. He añadido filter0.Ignore(0) a la clase Expert Advisor en OnInit. Pero soy nuevo en POO y no entiendo cómo cambiar este valor en la clase MyTrailing, que no hereda de la clase CExpertSignal, sino que es su "prima" (digamos filter0.Ignore(1) ). Por favor, aconséjeme cómo hacerlo.

En realidad, una pregunta más general: ¿cómo pasar información entre dos clases que no son descendientes? ¿Cómo se transfiere la información de la clase de arrastre a la clase de señalización? Probablemente, puedes crear una variable global y comunicarte a través de ella. Pero esto parece completamente pervertido con respecto a la lógica de los miembros protegidos en OOP.


¡Por favor, ayuda! Ya intenté alejarme de build Ignore (que, por supuesto, no es bueno en sí mismo, la gente trató de incluirlo en el código base) y todavía no puedo conectarme. Estoy tratando de inventar para el tercer día (todavía no tengo un manual).

Incluso he retocado los códigos de las clases: he implementado el miembro booleano protegido (m_permition) en la clase MySignal y he creado un método Set para él; he metido return(0) en la división larga y he disparado la división si !m_permition. En MyTrailing también se ha creado un miembro booleano protegido m_signal_permition, se han creado los métodos Get y Set para él, y se ha enseñado CheckTrailing para controlarlo if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;

No entiendo sólo una cosa, dónde y cómo debo reunirlos. He intentado simplemente referirme a ellos en OnTick, pero falla.

He leído el artículo de Vladimir "Cómo enseñar...". La idea de crear una instancia de otra señal en custom signal y comunicarse a través de ella parece estar clara, pero en alguna parte de mi sistema no encaja del todo: las clases de signal y trailing no se heredan entre sí.

Ayudad, gente de buena voluntad, en lo que podáis.

 

Hola colegas. Además del precio de protección hay algunos datos en las cotizaciones de MT5, como el spread histórico y el deslizamiento (que es el mismo en todas partes por defecto y es de 10 puntos de cinco dígitos).

Al hacer dicha solicitud después de abrir una posición:

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

Obtenemos esta respuesta:

Entiendo correctamente que el probador de MT5 cuenta tanto el spread como el deslizamiento juntos, exactamente como en MT4 pondría manualmente el spread a 13 pips, para el ejemplo específico de la captura de pantalla.

 

Hola ¿Puede alguien ayudarme con esto, cómo puedo vincular un EA mt5 a un número de cuenta específico?

 
denis basuk:

Hola, ¿puede alguien ayudarme con esto, cómo puedo vincular un Asesor Experto mt5 a un número de cuenta específico?

Necesito comprobar el número de cuenta. Esto debe hacerse en OnInit() y OnTick(). Ejemplo:

 

Hola, estoy intentando transferir indicadores de MT4 a MT5. Tengo un indicador simple que muestra el tiempo hasta la siguiente barra. Este indicador utiliza OnTimer. Lo actualizo en OnTimer usando la función void refreshClock(). ¿Es correcto utilizar esta construcción para otros indicadores que requieren el uso de OnTimer? ¿O puede optimizar el proceso de direccionamiento a 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:

¿Puede alguien ayudar, por favor? Ya trató de alejarse de la incorporada Ignorar (que, por supuesto, no es bueno en sí mismo, la gente trató de incluir en el código base) y todavía no se puede conectar. Estoy tratando de inventar para el tercer día (todavía no tengo un manual).

Incluso he retocado los códigos de las clases: he implementado el miembro booleano protegido (m_permition) en la clase MySignal y he creado un método Set para él; he metido return(0) en la división larga y he disparado la división si !m_permition. En MyTrailing también se ha creado un miembro booleano protegido m_signal_permition, se han creado los métodos Get y Set para él, y se ha enseñado CheckTrailing para controlarlo if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;

No entiendo sólo una cosa, dónde y cómo debo reunirlos. He intentado simplemente referirme a ellos en OnTick, y falla.

He leído el artículo de Vladimir "Cómo enseñar...". La idea de crear una instancia de otra señal en custom signal y comunicarse a través de ella parece estar clara, pero en alguna parte de mi sistema no encaja del todo: las clases de señal y trailing no se heredan entre sí.

Ayudadme, gente de buena voluntad, en lo que podáis.

¡He avanzado en una semana! Encontrado el método Signal en la clase CExpert. Código insertado en OnTick.

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

Ahora, si cambio "1" entre paréntesis manualmente, el método Ingnore funciona - el Asesor Experto no realiza ninguna operación por la señal.

Sólo queda entender cómo obtener información sobre el objeto de arrastre en OnTick. Desafortunadamente, no hay un método ExtExpert.Trailing() para obtener la referencia al objeto trailing y, por lo tanto, el compilador no entiende a qué objeto quiero aplicar mi método GetPermition implementado en el trailing. ¿Tal vez alguien pueda decirme qué hacer?

Razón de la queja: