Não consigo descobrir a partir de seu código o que você está tentando fazer, mas em 2 lugares você não dá um valor à variável i. Você precisa tratar disso.
int start() // Special function start() { if (Crosses()) count++; int i, n, // Bar index Counted_bars; Buf_1[i]= count; // Number of counted bars double Sum_H; //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars i=Bars-Counted_bars-1; // Index of the first uncounted while(i>=0) // Loop for uncounted bars { Sum_H=0; // Nulling at loop beginning for(n=i;n<=i+Aver_Bars-1;n++) // Loop of summing values { Buf_0[i]=Buf_1[n]; // Value of 0 buffer on i bar i--; // Calculating index of the next bar } } //-------------------------------------------------------------------- return(0); // Exit the special funct. start() } //-------------------------------------------------------------------- bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE); }
Desculpe ser brusco, mas seu código mostra que você está tentando alcançar algo muito além de sua capacidade
Exemplo
bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE);
Digamos que i = 1 por exemplo
double O=iOpen(NULL,PERIOD_D1,1);
Isto retornará o preço aberto de ontem
double H=iHigh(NULL,PERIOD_M1,1); double L=iLow(NULL,PERIOD_M1,1);
Estes 2 retornarão valores para a última barra fechada de 1 minuto.
Portanto, você está comparando os valores de 1 minuto atrás com os de ontem abertos.
Se i = 2, você estará comparando os valores de 2 minutos atrás com os abertos há 2 dias.
Você deve ver que isto não pode ser o que você quer.
Desculpe ser brusco, mas seu código mostra que você está tentando alcançar algo muito além de sua capacidade
Exemplo
Digamos que i = 1 por exemplo
Isto retornará o preço aberto de ontem
Estes 2 retornarão valores para a última barra fechada de 1 minuto.
Portanto, você está comparando os valores de 1 minuto atrás com os de ontem abertos.
Se i = 2, você estará comparando os valores de 2 minutos atrás com os abertos há 2 dias.
Você deve ver que isto não pode ser o que você quer.
Olá GumRai,
Obrigado por ter me ajudado. Você está certo, sou apenas um principiante e avidamente me esforço para aprender a codificar a EA. Eis o que estou tentando fazer:
1. Comparar PERÍODO_D1 Aberto a cada minuto PERÍODO_M1 barra em sua própria barra D1, então existem 1440 barras M1 para comparar com a barra D1. Então conte as barras M1 que satisfazem a condição se (O > L && O < H) .
2. Armazene as barras contadas em uma matriz e então proceda novamente para a próxima barra D1 e repita o ciclo novamente.
3. As barras contadas serão traçadas pelo indicador em um gráfico diário. Portanto, se as barras M1 que satisfazem as afirmações forem 5, estas 5 serão plotadas como o valor da barra diária1. Então diga para a próxima barra diária que a barra M1 contada é 10, então ela será plotada novamente na barra 1 conforme a barra anterior foi movida para a barra 2.
Por gentileza, mostre-me como melhor codificar esta simples afirmação com a qual eu luto. Me diga que você precisa de mais explicações. e um grande obrigado.
Olá GumRai,
Obrigado por ter me ajudado. Você está certo, sou apenas um principiante e avidamente me esforço para aprender a codificar a EA. Eis o que estou tentando fazer:
1. Comparar PERÍODO_D1 Aberto a cada minuto PERÍODO_M1 barra em sua própria barra D1, então existem 1440 barras M1 para comparar com a barra D1. Então conte as barras M1 que satisfazem a condição se (O > L && O < H) .
2. Armazene as barras contadas em uma matriz e então proceda novamente para a próxima barra D1 e repita o ciclo novamente.
3. As barras contadas serão traçadas pelo indicador em um gráfico diário. Portanto, se as barras M1 que satisfazem as afirmações forem 5, estas 5 serão plotadas como o valor da barra diária1. Então diga para a próxima barra diária que a barra M1 contada é 10, então ela será plotada novamente na barra 1 conforme a barra anterior foi movida para a barra 2.
Por gentileza, mostre-me como melhor codificar esta simples afirmação com a qual eu luto. Me diga que você precisa de mais explicações. e um grande obrigado.
Terei prazer em ajudá-los, mas não vou escrever o código, pois isso não os ajudaria a aprender.
Primeiro, você tem que perceber que as barras 1440 M1 nem sempre corresponderão a um período de 1 dia. Se não houver carrapatos durante uma barra, essa barra estará faltando na história e poderá haver menos do que você espera.
Portanto, você precisa do valor de data/hora para a abertura da vela D1. Você pode fazer isso? Experimente e poste seu código
não tão rápido
eu sei o que você está tentando fazer e seu código(se (O > L & & O < H)) não vai conseguir o que você quer
veja na tabela anexa
a seta voltada para cima é a abertura de hoje
e a seta voltada para a direita é a primeira barra que corresponde ao seu código (se (O > L && O < H)) então conte = 1
mas se você prestar atenção à barra fechada acima da abertura de hoje, então, na verdade, a contagem deve ser = 2 (pelo menos (pode ser mais alguns cruzamentos que você não pode c apenas no gráfico de tick))
mas na nossa contagem de código = apenas 1
não tão rápido
eu sei o que você está tentando fazer e seu código(se (O > L & & O < H)) não vai conseguir o que você quer
veja na tabela anexa
a seta voltada para cima é a abertura de hoje
e a seta voltada para a direita é a primeira barra que corresponde ao seu código (se (O > L && O < H)) então conte = 1
mas se você prestar atenção à barra fechada acima da abertura de hoje, então, na verdade, a contagem deve ser = 2 (pelo menos (pode ser mais alguns cruzamentos que você não pode c apenas no gráfico de tick))
mas na nossa contagem de código = apenas 1
Pelo que entendi, ele quer contar as barras que se sobrepõem ao preço de abertura - posso estar errado, no entanto :)
- Zaldy: POR FAVOR, AJUDE QUALQUER UM! ISTO É POSSÍVEL?Não nos PERGUNTE. Claro que é possível.
- Inteiros e booleanos são conversíveis. Falso == 0, verdadeiro = não-zero.
return(true); else return(EMPTY_VALUE); return(true); else return(2147483647); return(true); else return(true);
- Você também está lidando com três períodos de tempo, D1, gráfico, M1. Você deve converter.Não compilado ou testado.
Counted_bars=IndicatorCounted(); // Number of counted bars for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars int iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]; double openD1 = iOpen(NULL, PERIOD_D1, iD1); int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht], iM1End = -1; if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]; for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){ double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg), lM1 = iLow(NULL, PERIOD_M1, iM1Beg); // count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; } }
Não compilado ou testado.
não tão rápido
eu sei o que você está tentando fazer e seu código(se (O > L & & O < H)) não vai conseguir o que você quer
veja na tabela anexa
a seta voltada para cima é a abertura de hoje
e a seta virada para a direita é a primeira barra que corresponde ao seu código (se (O > L && O < H)) então conte = 1
mas se você prestar atenção à barra fechada acima da abertura de hoje, então, na verdade, a contagem deve ser = 2 (pelo menos (pode ser mais alguns cruzamentos que você não pode c apenas no gráfico de tick))
mas na nossa contagem de código = apenas 1
Oi Qjol, Sim a seta virada para a direita é a primeira contagem que eu quero. Aqueles que cruzam apenas o D1 Aberto são contados. Obrigado novamente por seus esforços.
- Zaldy: POR FAVOR, AJUDE QUALQUER UM! ISTO É POSSÍVEL?Não nos PERIGUE. Claro que é possível.
- Inteiros e booleanos são conversíveis. Falso == 0, verdadeiro = não-zero.
- Você também está lidando com três períodos de tempo, D1, gráfico, M1. Você deve converter.Não compilados ou testados.
Não compilado ou testado.
Obrigado WHRoeder e desculpe por usar bonés aqui! Vou tentar suas sugestões e voltarei aqui para o resultado.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Saudações! Preciso de ajuda neste indicador. Tenho tentado um método diferente para contar o número de Barras no Período M1 que se deparou com o nível de Preço Aberto no Período D1. Anexei minha tentativa de codificá-lo, mas não consegui executá-lo com sucesso. Tenho tentado muito, mas bati na parede, então agora peço a ajuda de gentis cavalheiros aqui!
Aqui está o que eu preciso para este indicador:
1. Quando o preço de uma barra no Período M1 se deparar com o preço de Aberto no Período D1, ele será contado. Há 1440 barras no Período M1 para cada Período D1, portanto, cada 1440 barras serão testadas.
2. Para cada Barra D1, a contagem total/D1 Bar será somada e calculada por um determinado valor. Digamos que a média é 30, esta 30 é o número de barras D1.
3. Então o valor médio será traçado como o indicador.