Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 831

 
tsd Tsepkov:

Refiro-me ao primeiro nome, diz que é preciso mudar o primeiro nome para o nome verdadeiro, mas não funciona

Sim, se o seu estatuto for "Vendedor" não pode editar os seus dados:

Tente escrever um pedido para Servicedesk com uma explicação.

 
Vladimir Karputov:

Sim, se o seu estatuto for "Vendedor" não pode editar os seus dados:

Tente escrever um pedido para Servicedesk com uma explicação.

O problema é esse, não, é preciso editar para se tornar um. É um círculo vicioso...

O seupedido de registo como Vendedor foi rejeitado pelo moderador.

Por favor, corrija os dados que forneceu.

 
tsd Tsepkov:

***

Por favor, corrija os dados que forneceu.

Poderá ser esta a razão? As imagens são tortas ou escuras ou não, como requerido.

 
tsd Tsepkov:

O problema é esse, não, é preciso editar para se tornar um. É um círculo vicioso...

O seupedido de registo como Vendedor foi rejeitado pelo moderador.

Por favor, corrija os dados que forneceu.

Bem, então escreva ao Servicedesk sobre o problema. É mais produtivo do que bater no carril no fórum ;)
 
VHS:

Por favor aconselhe como usar o Ignore(valor longo) { m_ignore=valor; } método da classe padrão CExpertSignal na classe Trailing custom quando programar em MQL5? Como posso aceder-lhe?

Tenho uma classe de sinais personalizados que me dá métodos para abrir e fechar posições. Mas no Trailing eu queria manter a posição por outro método. Se escrever separadamente as classes personalizadas MySignal e MyTrailing, uma posição é fechada pela condição, que desencadeou primeiro. Se o Trailing condition foi desencadeado mais cedo, tudo está bem. Mas por vezes um novo sinal (de inversão) vem do MySignal e a posição é invertida, e eu preciso que seja acompanhado por Trailing após a abertura, não fechando e não abrindo um novo. Olhei para as classes base e há um sentimento de que m_ignore da classe de sinais base é responsável por isto. Se lhe for atribuído o valor 1 no filtro apropriado, parece funcionar como deveria. Adicionei filtro0.Ignore(0) à classe Expert Advisor no OnInit. Mas sou novo no OOP e não compreendo como alterar este valor na classe MyTrailing, que não é herdado da classe CExpertSignal, mas é o seu "primo" (digamos filtrar0.Ignorar(1) ). Aconselhar como fazer isto.

Na verdade, pergunta mais geral: como passar informação entre duas classes que não são descendentes? Como transferir a informação da classe de rastreio para a classe de sinal? Provavelmente, é possível criar uma variável global e comunicar através dela. Mas isto parece completamente pervertido com respeito à lógica dos membros protegidos no OOP.


Por favor, ajudem! Já tentei afastar-me da construção Ignorar (o que, claro, não é bom em si mesmo, as pessoas tentaram incluí-la no código base) e ainda não consigo encontrar nenhum terreno em comum. Estou a tentar inventar para o terceiro dia (ainda não tenho um manual).

Até ajustei códigos de classe: implementei membro booleano protegido (m_permition) na classe MySignal e criei um método Set para ela; coloquei return(0) em divisão longa e disparei divisão se !m_permition. No MyTrailing também criou um membro booleano protegido m_signal_permition, criou métodos Get and Set, ensinou o CheckTrailing a controlá-lo se(position===NULL) {m_signal_permition = verdadeiro; return(false);} else m_signal_permition = falso;

Não compreendo apenas uma coisa, onde e como os devo juntar. Tentei referir-me simplesmente a eles no OnTick, mas falhou.

Li o artigo de Vladimir "Como ensinar...". A ideia de criar uma instância de outro sinal em sinal personalizado e comunicar através dele parece ser clara, mas algures no meu sistema não se encaixa completamente: as classes de sinal e de seguimento não são herdadas uma da outra.

Ajuda, pessoas de boa vontade, de todas as maneiras que puder.

 

Olá colegas. Para além do preço de protecção, as cotações MT5 contêm alguns dados, tais como spread histórico e slippage (que é o mesmo em todo o lado por defeito e é de 10 pontos de cinco dígitos).

Ao fazer tal pedido após a abertura de uma posição:

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

Temos esta resposta:

Se entendo correctamente que o testador MT5 conta tanto o spread como o slippage juntos, exactamente como no MT4 eu definiria manualmente o spread para 13 pips, para o exemplo específico na imagem do ecrã.

 

Olá Alguém me pode ajudar com isto, como posso ligar um mt5 EA a um número de conta específico?

 
denis basuk:

Olá, alguém me pode ajudar com isto, como posso ligar um consultor especialista mt5 a um número de conta específico?

Preciso de verificar o número de conta. Isto deve ser feito em OnInit() e OnTick(). Exemplo:

 

Olá, estou a tentar transferir indicadores do MT4 para o MT5. Tenho um indicador simples que mostra o tempo até à próxima barra. Este indicador utiliza o OnTimer. Actualizo-o no OnTimer usando a função refreshClock() void refreshClock(). É correcto utilizar esta construção para outros indicadores que requerem o uso do OnTimer? Ou pode optimizar o processo de endereçamento ao 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:

Alguém pode ajudar, por favor! Já se tentou afastar do Ignorar incorporado (o que, claro, não é bom em si mesmo, as pessoas tentaram incluí-lo no código base) e ainda assim não se conseguem ligar. Estou a tentar inventar para o terceiro dia (ainda não tenho um manual).

Até ajustei códigos de classe: implementei membro booleano protegido (m_permition) na classe MySignal e criei um método Set para ela; coloquei return(0) em divisão longa e disparei divisão se !m_permition. No MyTrailing também criou um membro booleano protegido m_signal_permition, criou métodos Get and Set, ensinou o CheckTrailing a controlá-lo se(position===NULL) {m_signal_permition = verdadeiro; return(false);} else m_signal_permition = falso;

Não compreendo apenas uma coisa, onde e como os devo juntar. Tentei simplesmente referir-me a eles no OnTick, mas falhou.

Li o artigo de Vladimir "Como ensinar...". A ideia de criar uma instância de outro sinal em sinal personalizado e comunicar através dele parece ser clara, mas algures no meu sistema não se encaixa completamente: as classes de sinal e de seguimento não são herdadas uma da outra.

Ajudem-me, pessoas de boa vontade, de todas as maneiras que puderem.

Fiz progressos numa semana! Método do sinal encontrado na classe CExpert. Inserido código no OnTick.

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

Agora, se eu mudar "1" entre parênteses manualmente, o método Ingnore funciona - o Expert Advisor não efectua quaisquer negócios através do sinal.

Resta apenas compreender como obter informações sobre o objecto em fuga no OnTick. Infelizmente, não existe nenhum método ExtExpert.Trailing() para obter referência ao objecto de reboque e, por conseguinte, o compilador não compreende a que objecto quero aplicar o meu método de reboque GetPermition to. Talvez alguém me possa dizer o que devo fazer?