Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1083

 
E se você precisar encontrar o maior valor em um determinado número de últimas barras?
 

Portanto, é uma matriz estática

//--- создадим массив 
   double array[]; 
   int size=772; 
   ArrayResize(array,size); 
   //---  заполним его значениями индикатора 
   for(int i=0;i<size;i++) 
     { 
      array[i]=iATR(NULL,0,14,i);
     }
   //--- найдем позицию максимального элемента в массиве 
   int max_position=ArrayMaximum(array,772,0); 
   //--- теперь получим само максимальное значение в массиве 
   double max=array[max_position];
 

Assim, de fato, escrevo diretamente - autodidata, não muito longe na compreensão das sutilezas da percepção do ser programador (E o tema é chamado: Qualquer questão de um iniciante...). Dou um exemplo, que não será censurado que todos querem obter de graça, sem esforço e, por outro lado, tentando definir claramente a tarefa (para não dizer que não podemos ler mentes de outros).

Mais uma vez, como obter o valor máximo do indicador para a quantidade dada de últimas barras do código dado ou pode ser pela graça da compreensão na declaração pessoal de codificação?

Com sincero respeito, deferência e compreensão de que os programadores são pessoas de outro mundo e uma explicação tão delicada não é o fato de que tudo isso terá que ser delineado novamente, talvez mais de uma vez para se obter o resultado desejado.

//--- criar array duplo array[]; int size=772; ArrayResize(array,size); //---preenchê-lo com valores indicadores para(int i=0;i<tamanho;i++) { array[i]=iATR(NULL,0,14,i);
} //--- encontre a posição do elemento máximo no array int max_position=ArrayMaximum(array,772,0); //--- agora vamos obter o valor máximo no próprio array duplo max=array[max_position];
 

Procurei tudo o que pude, mas não consegui encontrar nenhuma solução, última esperança para vocês :)

A tarefa geral era fazer um indicador, que, quando atirado em um gráfico, ou seja, já está funcionando, pressionamos a tecla especificada e a linha de tendência (data1= data2, preço1=preço2) aparece sob a posição atual do cursor

O problema surgiu quando não consigo passar as coordenadas do ponteiro paraif(id===CHARTEVENT_MOUSE_MOVE), e o código abaixo também não quer passá-las. Não sei como fazê-lo, mas existe outra variante, mas também tem um problema. Talvez alguém saiba, quando você joga o indicador no gráfico, o menu inicial aparece.

#property strict
#define  VK_D             0x44 


int OnInit()
  {
//---
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{    
 
if(id==CHARTEVENT_MOUSE_MOVE)

{     int      x     =(int)lparam;
      int      y     =(int)dparam; 
      datetime dt    =0; 
      double   price =0; 
      int      window=0;
      ChartXYToTimePrice(0,x,y,window,dt,price); 


  if(id==CHARTEVENT_KEYDOWN)
{ 
  switch(int(lparam)) 
{ case VK_D:
   
   ObjectCreate("Trend Line",OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line",OBJPROP_SELECTED,true); 
}   
} 
}    
}
 
Craft:

Assim, de fato, escrevo diretamente - autodidata, não muito longe na compreensão das sutilezas da percepção do ser programador (E o tema é chamado: Qualquer questão de um iniciante...). Dou um exemplo, que não será censurado que todos querem obter de graça, sem esforço e, por outro lado, tentando definir claramente a tarefa (para não dizer que não podemos ler mentes de outros).

Mais uma vez, como obter o valor máximo do indicador para a quantidade dada de últimas barras do código dado ou pode ser pela graça da compreensão na declaração pessoal de codificação?

Com sincero respeito, reverência e compreensão de que os programadores são pessoas de outro mundo e uma explicação tão delicada não é o fato de que tudo isso terá que ser delineado novamente, talvez mais de uma vez para obter o resultado desejado.


Então, reverta o loop e pronto.

De tarifas_total-1 a tarifas_total menos o_número_de_bolas_desejado. Se em EA, de Bars()-1 a Bars() menos...

 
K_i_r_i_t_o:

Procurei tudo o que pude, mas não consegui encontrar nenhuma solução. Não tenho esperança para vocês :)

A tarefa geral era fazer um indicador, que, quando atirado em um gráfico, ou seja, já está funcionando, pressionamos a tecla especificada e a linha de tendência (data1= data2, preço1=preço2) aparece sob a posição atual do cursor

O problema surgiu quando eu não consigo obterse(id===CHARTEVENT_MOUSE_MOVE) para passar as coordenadas do ponteiro paraif(id===CHARTEVENT_KEYDOWN), e o código abaixo também não quer passar, não sei como implementá-lo, há outra opção, mas também é um problema, se alguém sabe, quando você joga o indicador no gráfico o menu inicial aparece, então posso bloqueá-lo de alguma forma, para mostrar imediatamente o indicador no gráfico?

Preste atenção à visibilidade variável.

Não me aprofundei muito nisso, mas notei que as variáveis são declaradas dentro da condição. Este não deve ser o caso.

 
AlexeyVik:

Preste atenção à visibilidade das variáveis.

Não me aprofundei muito, mas notei que as variáveis são declaradas dentro da condição. Este não deve ser o caso.

Então esse é o problema, como fazer variáveis a serem passadas de uma se para outra, tentou muitas variações, não quer funcionar...
 
K_i_r_i_t_o:
Então esse é o problema, como fazer variáveis a serem passadas de uma se para outra, tentou muitas variações, não quer funcionar...

Você pode lê-lo aqui.

Quais são as muitas variações? As variáveis de nível global são visíveis em qualquer parte do programa, este é um caso extremo.

 
AlexeyVik:

Leia-o aqui.

Quais são as muitas variações? As variáveis de nível global são visíveis em qualquer parte do programa, este é um caso extremo.

Eu li tudo, é isso, não posso transferir os valores variáveis para outra função, e não há como coletá-los em uma função, estou perplexo, mas e quanto ao menu indicador?
 
Craft:

Boa tarde, senhores.

Pergunta sobre arrays. Como encontrar o maior valor do indicador no número requerido de últimas barras do gráfico, e não a primeira?

Tem sido discutido muitas vezes (não consigo encontrá-lo), mas raramente tenho usado arrays.

Você poderia aconselhar como resolver o problema da indexação, talvez usando o ArrayMaximum(array) de uma maneira mais elegante?

Se há um erro elementar em algum lugar, sinto muito, sou autodidata.

O fluxo de correções de bugs nas construções MQL4 nunca se desvanece, portanto,quanto mais simples o código, mais confiável ele é .

Amax=-10000;

iAmax=-1;

for(int i=0;i<size;i++) {

if (array[i]>Amax) {iAmax=i; Amax=array[i];}

}

se (iAmax<0) ...algo estiver errado

Razão: