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.
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.
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_buffers1#property indicator_label1 "longBars"#property indicator_color1 clrBlue#property indicator_width1 2//---углубление в историю на...externint barsToProcess = 100;
//---indicators Buffersdouble longBarsBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
SetIndexBuffer(0,longBarsBuffer);
SetIndexStyle(0,DRAW_HISTOGRAM);
IndicatorDigits(Digits);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &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?
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?
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!
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()
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
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.
Isto é exatamente o que precisamos. O dia atual é alto, independentemente do tempo que resta até o final do dia.
Se eu entendi bem a pergunta.
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.
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.
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...
Se você não pode me repreender muito :) ...por favor, explique como fazer isso?
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 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?
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) 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!
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 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.