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

 
kashi_ann:

O que é que estou a fazer mal?

Este indicador não tem nenhum parâmetro de entrada? (Refiro-me à função iCustom(...))

(espero que só falte aqui um parêntese final)

E como só está a copiar 2 itens, está a copiá-los para um buffer estaticamente atribuído?

 
Caro(a),

Abri código de indicador para NT7
contém if ( v>==a && v<b)
Preciso de acrescentar outra condição: não igual a 25

é correcto?
se ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. Can iMaOnArray()
2. Talvez tenha olhado para o Momentum errado? Indicadores --> Osciladores --> Momentum
3. Os seus MAs na sub-janela são estranhos. Onde se consegue tudo isso? Indicadores --> Tendência --> Média Móvel

Artyom, obrigado pela resposta, acontece que está no menu... Tenho os indicadores errados :) Cliquei em Indicadores\Momentum na janela "Navigator" mas é sempre adicionado a uma nova subjanela e parece estragado.
Pode por favor sugerir o que colocaria menos tensão no processador se o procedimento for repetido frequentemente:
1) Colocar o meu indicador (complexo) numa subjanela e tirar valores a partir daqui
ou
2)Ler o valor do indicador por OnTime(), usando (MQL4)iCustom.
Se bem entendi, no caso 2) o indicador não é desenhado na janela, ele é calculado a pedido. Contudo, não percebo se o código executável do indicador é carregado uma vez ou cada vez que é chamado ...
P.S. O segundo indicador é ainda adicionado à nova subjanela através do menu ... Como adicioná-lo a um indicador já existente numa subjanela ?

 

Александр:
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

Nunca funciona, porque:"v<25 && v>25" é sempre falso.

Deveria ser algo do género:

v!=25

 
Yury Kirillov:

Nunca funciona, porque:"v<25 && v>25" é sempre falso.

Deveria ser algo do género:

v!=25

obrigado! sim:

se ( v>=a && v<b &&& (v<25|| v>25)) ouse ( v>=a && v<b && v!=25)

 
Александр:
obrigado! outro fórum sugerido: se ( v>=a && v<b && (v<25|| v>25))

No meu, escrevia-o assim:

{if((v>=a)&&(v<b)&&(v!=25)) 
{
        //разные действия 
}}//if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko:

Este indicador não tem nenhum parâmetro de entrada? (Refiro-me à função iCustom(...))

(espero que tenha perdido o parêntese de encerramento apenas aqui)

E como só está a copiar 2 itens, está a copiá-los para um buffer estaticamente atribuído?

O indicador tem muitos parâmetros de entrada.

Não percebo onde falta o parênteses.

Receio não compreender o que significa um tampão estático. Se não se importar de explicar, por favor.

 
Mike:

Artem, obrigado pela resposta, acontece que está no menu... Tenho os indicadores no sítio errado :) Cliquei em Indicadores\Momento na janela Navigator mas é acrescentado a uma nova subjanela de cada vez e parece estragado.
Pode por favor sugerir o que colocaria menos tensão no processador se o procedimento for repetido frequentemente:
1) Colocar o meu indicador (complexo) numa subjanela e tirar valores a partir daqui
ou
2)Ler o valor do indicador por OnTime(), usando (MQL4)iCustom.
Se bem entendi, no caso 2) o indicador não é desenhado na janela, ele é calculado a pedido. Contudo, não percebo se o código executável do indicador é carregado uma vez ou cada vez que é chamado ...
P.S. O segundo indicador é ainda adicionado à nova subjanela através do menu ... Como adicioná-lo a um indicador já existente numa subjanela ?

Quando se chama um indicador através de iCustom(), os seus amortecedores não são exibidos na janela, mas tanto quanto sei (em versões antigas de MT era definitivamente), todos os objectos gráficos exibidos pelo indicador são exibidos na janela do gráfico.

Para colocar um indicador numa janela de outro indicador, arraste-o com o rato da janela do Navegador na janela do indicador necessário.

Sobre menor consumo de tempo de processamento - não verificou, não sabe.

 

ajudar-me a fazer as condições, terminar a ideia, quão fácil é colocar uma marca no gráfico de acordo com a condição ?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
  //+------------------------------------------------------------------+
void OnTick()
{
        // скорость тиков
        int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
        MqlTick oTicks[5];
        ZeroMemory(oTicks);
        
        int nTicksCopied = CopyTicks(_Symbol, oTicks, COPY_TICKS_TRADE, 0, 5);
        
        int nSpeed = 0;

        if(nTicksCopied > 0)
        {
                // скорость роста
                if(oTicks[0].bid > oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid && oTicks[3].bid > oTicks[4].bid)
                                nSpeed = 4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid)
                                nSpeed = 3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid)
                                nSpeed = 2;
                                
                        else if(oTicks[1].bid > 0 && oTicks[0].bid > oTicks[1].bid)
                                nSpeed = 1 ;
                        
                }
        
                // скорость снижения
                if(oTicks[0].bid < oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid && oTicks[3].bid < oTicks[4].bid)
                                nSpeed = -4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid)
                                nSpeed = -3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid)
                                nSpeed = -2; 
                        else if(oTicks[1].bid > 0 && oTicks[0].bid < oTicks[1].bid)
                                nSpeed = -1 ; 
                }
        }
        
        return(nSpeed);
}

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

if( nTickSpeed==-1)  отмечаем это место на графике g_Label.Text("-1 ")

if( nTickSpeed==-2)  отмечаем это место на графике g_Label.Text("-2 ")

if (nTickSpeed==-3)  отмечаем это место на графике g_Label.Text("-3 ")

if( nTickSpeed==-4)  отмечаем это место на графике g_Label.Text("-4 ")




if( nTickSpeed==1)  отмечаем это место на графике g_Label.Text("1 ")

if( nTickSpeed==2)  отмечаем это место на графике g_Label.Text("2 ")

if( nTickSpeed==3)  отмечаем это место на графике g_Label.Text("3 ")

if( nTickSpeed==4)  отмечаем это место на графике g_Label.Text("4 ")
 

Pode substituir o "se" no final por "se":

   switch(nTickSpeed)
     {
      case -4:
         g_Label.Text("-4");
         break;
      case -3:
         g_Label.Text("-3");
         break;
      case -2:
         g_Label.Text("-2");
         break;
      case -1:
         g_Label.Text("-1");
         break;
      case 1:
         g_Label.Text("1");
         break;
      case 2:
         g_Label.Text("2");
         break;
      case 3:
         g_Label.Text("3");
         break;
      case 4:
         g_Label.Text("4");
         break;
     }
Razão: