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 978

 
Vadim_2015:

O algoritmo é claro, descobriu-o. O exemplo, tudo funciona.

Muito obrigado!

E, com a primeira pergunta (sobre os máximos), você poderia explicar com mais detalhes como implementá-la? Se possível, por favor, me dê um pequeno algoritmo. Você é bom nisso :)

Estou feliz por ser compreendido por outra pessoa que não eu mesmo.

Vadim_2015:
Olá Prezados usuários do fórum!

Comecei a estudar a linguagem MQL4 e, embora esteja escrevendo um indicador simples, enfrentei um problema que não posso resolver. A essência do problema:

1_Como encontrar a Alta[i - fim do dia]. Tenho um ciclo simples Fechar[i]-abrir[i+1], preciso encontrar a Alta[i - fim do dia]. Por exemplo, de[i],[1],[2] e até o final do dia (PERÍODO_H1) . Não tenho certeza de como fazer isso. Existe a função "iHigh", mas não é bem a mesma coisa.


Isto é exatamente o que precisamos. O dia atual é alto, independentemente do tempo que resta até o final do dia.

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

Se eu entendi bem a pergunta.

 
AlexeyVik:

Estou feliz que alguém me compreenda além de mim mesmo.

É a coisa certa a fazer. Dia de alta corrente, não importa quanto tempo sobra no dia.

Se eu entendi bem a pergunta.

É um pouco diferente do que eu entendi. É assim que é.
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
Ligeiramente diferente, como eu o entendi. É assim que é.

Bem, isso é exatamente o que me aconselharam antes.
Mas iHighest(NULL, MODE_HIGH, bar+1, 1) retorna o índice de barras mais alto que todos os outros neste intervalo, enquanto você perguntava sobre o dia atual Alto.

 
AlexeyVik:

Bem, isso é exatamente o que me aconselharam antes.
Mas iHighest(NULL, MODE_HIGH, bar+1, 1) retorna o índice de barras mais alto que todos os outros neste intervalo, e você perguntou sobre o dia atual de alta.

Concordo,"iHighest(NULL, MODE_HIGH, bar+1, 1) retornao índice de barra Alta que é maior do que todos os outros neste intervalo" . E eu quero dizer Alto dia corrente restante do dia.

Vou tentar explicar mais claramente...

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   int counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

Se você não pode me repreender muito :) ...por favor, explique como fazer isso?

 
Vadim_2015:

Concordo, "iHighest(NULL, MODE_HIGH, bar+1, 1) retornao índice de barra Alta que é maior do que todos os outros neste intervalo" . E eu quero dizer Alto o restante do atual do dia.

Vou tentar ser mais específico...

Se você não pode me repreender muito :) ...você pode explicar como fazer isso?

No início eu pensava que era um simples erro ortográfico, mas agora não há dúvida, você quer olhar para o futuro???? Então somente o Doc de Volta para o Futuro pode ajudá-lo.
 
AlexeyVik:
No início eu pensava que era uma simples gralha, mas agora não há dúvida, você quer olhar para o futuro???? Então somente o Doc de Volta para o Futuro pode ajudá-lo.

Receio que o Doc não possa me ajudar...ele está no negócio errado:)

Sim, essa pergunta, "Altoo restante do atual. do dia". É um pouco confuso. Chegou a mim, você realmente pensaria que é uma tentativa de olhar para o futuro neste dia. Isso é um pouco estranho. Eu queria contar a _AltaO resto do atual. do dia desde o início da tabela de preços até o penúltimo dia (ontem), porque todos os dados estão lá. E o último (hoje) dia deve ser recalculado assim que tiver terminado. Caso contrário, parecerá como você disse - uma tentativade olhar para o futuro! Se eu começar no início da tabela de preços, e passar para o final (dia de ontem), a High mudará em cada barra subseqüente verificada. Por isso perguntei como subtrair High do resto do dia. Esqueci de lhes dizer, o dia atual não é levado em conta, porque ainda não está concluído. Desculpe, eu não entendi imediatamente :) . Você pode me dizer como organizar um cálculo desse tipo? Isso é possível?

 
Vadim_2015:

Receio que o Doc não possa me ajudar...ele está no negócio errado:)

Sim, essa pergunta, "Altoo restante do atual. do dia", é um pouco confuso. Só agora é que me lembro, seria realmente uma tentativa de olhar para o futuro neste dia. É um pouco um nome errado. Eu queria contar a _Alta♪ o restante do atual ♪ do dia desde o início da tabela de preços até o penúltimo dia (ontem), porque todos os dados estão lá. E o último (hoje) dia deve ser recalculado assim que tiver terminado. Caso contrário, parecerá como você disse - uma tentativade olhar para o futuro! Se eu começar no início da tabela de preços, e passar para o final (dia de ontem), a High mudará em cada barra subseqüente verificada. Por isso perguntei como subtrair High do resto do dia. Esqueci de lhes dizer, o dia atual não é levado em conta, porque ainda não está concluído. Desculpe, eu não entendi imediatamente :) . Você pode me dizer como organizar um cálculo desse tipo? Isso é possível?

Deixe-me tentar entender sua pergunta. Você precisa encontrar Alto entre os bares 1) dia anterior e o que você tem hoje, ou 2) apenas o que você tem hoje? Talvez iHighest() ajude?
 
paladin80:
Deixe-me tentar entender sua pergunta. Você precisa encontrar Alto entre os bares 1) o dia anterior e a data de hoje, ou 2) apenas a data que você tem hoje? Talvez iHighest() ajude?

Caros amigos, tentarei explicar da melhor maneira possível o que quero alcançar... ...ou eu vou acertar ...ou vou confundir a todos!

Olhe, há uma gama de preços, digamos de _1.02.2015. a 15.12.2015(hoje), tome PERÍODO_H1.

1_Pego uma fórmula simples _val=Fechar[i]-Fechar[i]

2_configurar uma condição simples se (val>0) - verificação deve começar a partir de _1.02.2015.

-Se a condição for cumprida, digamos, em algum bar, então a partir deste bar e até o final deste dia encontre _Alto. Por exemplo:Close[4]-Open[4]>0, ou seja, suponha que a barra com índice[i=4] pertença a _1.02.2015 10:00, portanto,das 10:00 - deste dia até 00:00 - o final deste dia- encontramos _Alto. De forma correspondente, se a condição funcionou em outro dia, agimos pelo mesmo princípio. E assim ele passa por toda a matriz de preços. O cálculo deve começar de _1.02.2015 até 14.12.2015 (o penúltimo dia), por que até o penúltimo dia, - porque o último dia ainda não está concluído e o Máximo do dia inteiro não é conhecido. Assim que o último dia terminar, verificamos também a condição. Como os dados de _1.02.2015. a 14.12.2015 (o penúltimo dia) são conhecidos, não parecerá que se esteja a tentarolhar para o futuro :)

- Se a condição não for cumprida - nada é feito, o valor vazio é escrito na matriz.

Essa é na verdade toda a "idéia". Como fazê-lo, como defini-lo através de um loop - não consigo pensar!

 
Vadim_2015:

Receio que o Doc não possa me ajudar...ele está no negócio errado:)

Sim, essa pergunta, "Altoo restante do atual. do dia", é um pouco confuso. Só agora é que me lembro, seria realmente uma tentativa de olhar para o futuro neste dia. É um pouco um nome errado. Eu queria contar a _Alta♪ o restante do atual ♪ do dia desde o início da tabela de preços até o penúltimo dia (ontem), porque todos os dados estão lá. E o último (hoje) dia deve ser recalculado assim que tiver terminado. Caso contrário, parecerá como você disse - uma tentativade olhar para o futuro! Se eu começar no início da tabela de preços, e passar para o final (dia de ontem), a High mudará em cada barra subseqüente verificada. Por isso perguntei como subtrair High do resto do dia. Esqueci de lhes dizer, o dia atual não é levado em conta, porque ainda não está concluído. Desculpe, eu não entendi imediatamente :) . Você pode aconselhar como organizar um cálculo desse tipo? Isso é possível?

Se assim for, voltamos ao iHighest(), mas quantas barras para contar e a partir de qual começar deve ser calculado usando iBarShift()
 
AlexeyVik:
Se assim for, voltamos ao iHighest(), mas quantas barras a contar e a partir de qual uma deve ser calculada usando iBarShift()

Você poderia me mostrar como fazer isso em um loop? Não consigo descobrir como fazê-lo corretamente.

Razão: