[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 333

 

Eu não vou discutir! Se você tentar, você verá o que está errado. Estou apenas escrevendo para aqueles que vão se deparar com este problema. É invertido no tempo, portanto, o gráfico é invertido no tempo. Estou afixando o texto do indicador. DIREITO. Veja o gráfico com entradas muito interessantes que podem ser detectadas por ele. Parece-me que ele entra mais cedo e com mais precisão do que o MASD

#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 1
#indicador de propriedade_cores1 Vermelho

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
retornar;
}
duplo período externoPower=13;
duplo MA_Periodo externo=5;

int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
ArraySetAsSeries(Bears_array,true); // Aplicado para sincronização de indexação na função iMAOnArray
ArraySetAsSeries(Bulls_array,true);
Linha1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i);
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
retornar;
}


 
Stepan241 писал(а) >>

Eu não vou discutir! Se você tentar, você verá o que está errado. Estou apenas escrevendo para aqueles que vão se deparar com este problema. É invertido no tempo, portanto, o gráfico é invertido no tempo. Estou afixando o texto do indicador. PRONTO. Veja o gráfico com entradas muito interessantes que podem ser detectadas por ele. Parece-me que ele entra mais cedo e com mais precisão do que o MASD.

#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 1
#indicador de propriedade_cores1 Vermelho

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
retornar;
}
duplo período externoPower=13;
duplo MA_Periodo externo=5;

int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
ArraySetAsSeries(Bears_array,true); // Aplicado para sincronização de indexação na função iMAOnArray
ArraySetAsSeries(Bulls_array,true);
Linha1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i);
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
retornar;
}

Pode ser aparafusado, mas pode ser feito de uma forma normal.

O indicador pode conter até 8 amortecedores. Algumas delas podem ser usadas para cálculos intermediários.

Entretanto, se o desempenho não for crítico, então sim, você pode fazer isso dessa maneira.

 
Vinin >> :

Você pode brincar ou pode fazer isso normalmente.

O indicador pode conter até 8 amortecedores. Alguns deles podem ser usados para cálculos intermediários.

Embora, se não for crítico para si mesmo e para o desempenho, então sim, você pode fazer isso dessa maneira.

A noção de normal é relativa. Assim é a noção de direito. Esta é mais uma questão filosófica. Tentei implementar o algoritmo de uma maneira OPTIMAL. A fim de construir um indicador em UM ciclo. Na minha opinião, é o menor carregamento de hardware, enquanto você pode obter o mesmo resultado.

>> E, quanto ao fato de que existem 8 buffers, e em tempo de guerra seu número pode chegar a 54 e meio, qualquer sapador sabe disso. :-)

 
Stepan241 писал(а) >>

Normal é relativo. Assim é o conceito de direito. Estas são questões mais filosóficas. Tentei implementar o algoritmo de uma maneira OPTIMAL. Para que o indicador seja construído em UM ciclo. Na minha opinião, ele carrega o hardware o menos possível quando o resultado ainda está correto.

Cerca de 8 buffers, e seu número em tempo de guerra pode chegar a 54 e meio, todo engenheiro sabe disso. :-)

É possível fazer tudo em um loop, e usar um número mínimo de buffers, mas isso é outra história.

Qualquer operação com um array (não um buffer) leva um tempo considerável. Portanto, foi mais fácil e mais rápido fazer várias voltas do que enfiar tudo em um só.

Mais rápido no sentido do funcionamento do indicador.

 
Vinin >> :

É possível fazer tudo em um loop, e usar um número mínimo de buffers, mas isso é toda uma outra conversa.

Qualquer operação com um array (não um buffer) leva muito tempo. Portanto, foi mais fácil e mais rápido fazer várias voltas do que enfiar tudo em um só.

Mais rápido no sentido do desempenho do indicador.

Diga-me, Vinin, você tentou dar uma olhada em sua idéia e ver o que ela desenha?

 
Vinin >> :

É possível fazer tudo em um ciclo e usar um número mínimo de amortecedores, mas isso é toda uma outra conversa.

Qualquer operação com um array (não um buffer) leva muito tempo. Portanto, foi mais fácil e mais rápido fazer várias voltas do que enfiar tudo em um só.

Mais rápido no sentido do desempenho do indicador.

Querido Vinin, você tentou dar uma olhada em sua idéia e descobri-la?

int start()
{
int i, limit=Bars-IndicatorCounted()-1;
para (i=limite;i>=0;i--){
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
}
para (i=limite;i>=0;i--){
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
}
retornar;
}

Eu entendo que na primeira etapa você forma uma série de touros e ursos. No segundo ciclo, estas duas matrizes são suavizadas. Se você gosta tanto, basta olhar para o resultado e você entenderá tudo.



 


Veja atentamente o GRÁFICO AGRÁFICO

 
Stepan241 писал(а) >>

Eu estava falando sobre este tipo de código indicador em geral.

Arquivos anexados:
test.mq4  2 kb
 
Compare a velocidade da minha versão com a sua
 

Eu concordo. O resultado é bom e tudo está correto. Eu só precisava exibir a seguinte saída

Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

Deve ser feito em um loop separado. Eu prefiro sua versão porque prefiro o FOR loop. Obrigado por sua ajuda e atenção.

Razão: