Pergunta indicadora - página 4

 
SDC:

Ou talvez algo parecido com isto?

você realmente deveria usar IndicatorCounted(), porque se você fizer isso assim, seu indicador está redesenhando todos esses objetos a cada novo tick em vez de desenhá-los apenas uma vez e adicionando novos objetos à medida que novas barras são formadas.

Este e seu outro post sobre bools externos também me dá algumas outras idéias, obrigado

Meu foco precisa ser mais amplo, mas como sou NooB, tenho a tendência de me concentrar em uma parte do código e negligenciar outras como as externas.
Só agora estou entrando nas arrays e tive uma enorme luta para entender os amortecedores, mas comecei a superar isso recentemente.

Obrigado, isto me dará um monte de novas idéias agora também.
 
SDC:


Você tem que considerar o que está fazendo, ao criar um indicador você está aplicando seu código a cada barra do gráfico, isto significa que você precisa obter o valor do indicador macd como foi para cada uma dessas barras históricas.

em seu código original que você fez:

o último parâmetro 1 é o valor do macd como estava na barra 1 do gráfico, a barra anterior à barra atual que é indexada como barra 0

Obviamente você não quer usar esse valor único do macd em seu operador condicional sobre todo o gráfico histórico .

Você precisa indexar o macd ao mesmo índice de barras de cada barra, portanto, por exemplo, na barra 500, você precisa disto

que o último parâmetro deve mudar para corresponder ao número de barras ao qual seu indicador está aplicando seus algoritmos.

É por isso que você precisa dele dentro do laço, para poder usar o iterador do ciclo de laço para o último parâmetro dele, você obtém seu valor macd como era para cada barra do gráfico histórico.

Espero que isso ajude a esclarecer um pouco as coisas.

Certo, eu tive isso resolvido.

Entretanto, ao adicionar os códigos como if(val1 > 0 && mais rápido > mais lento) isto não funcionaria ao declarar mais rápido e mais lento fora do laço.

AHHHHH Vejo isso porque o turno é (i) então eu preciso dele dentro do loop OOOOPPPS LOL
 
Agent86:
Porque para(int i = Bars-1 ? <----- As barras são indexadas como arrays, a primeira barra=0, em vez de 1. Então a última barra é Bars-1;

E porque isto é melhor que para(int i = Bars ?? < veja acima.

Por favor, agradeça


Também:

Presumo que isto seja verdade para todos, e não apenas indicadores / indicadores personalizados ?<--- o que eu e WHRoeder: discutidos são assuntos bastante gerais. Nada de específico. Estávamos apenas conversando uns com os outros sobre a declaração de variáveis e suas atribuições, etc., loops w.r.t..

 
diostar:

Também:


for(int i=Bars; i>=0; i--) é o código que usei

for(int i=Bars-1; i>=0: i--) é sugerido

Eu pensei que Barras = número de barras no gráfico atual ? pelo menos de acordo com o dicionário.

Então --i eu imaginei que estava contando para baixo a partir do número de barras mais alto, como 1002 ou algo assim, e contando --i para baixo até realmente -1
Porque enquanto i>=0 deve contar até realmente -1 antes de se tornar falso. Se fosse igual ou superior a 0, seria verdade e seria um último loop até chegar a -1

Pelo menos era assim que eu pensava que funcionava? Eu estou errado?

Se i=0 e ++i e contar até o final da última barra, então pensei que contaria até o final.

Mas neste caso Bars-1 seu ditado não seria realmente todas as barras fechadas, mas na verdade inclui a barra [0] que ainda não está fechada ou algo assim ?

Não estou realmente certo de entender a diferença entre as Bars-1 e as Bars. Tem algo a ver com a barra 0 atual que não é contada quando simplesmente se refere a barras ??

Por favor, informe Obrigado


 

sim, é porque você tem uma barra 0, então Bars lhe dá a contagem de barras no gráfico, incluindo a barra 0

então considere um pequeno gráfico, há apenas 2 barras no gráfico, barra[0] e barra[1].

Barras lhe dá a contagem então Barras == 2

se você quiser aplicar seu indicador para começar na última barra do gráfico

Você poderia tentar i=Bars.

Como sabemos, Barras = 2, mas não há barra indexada como barra[2] a última barra é Bar[1].

então você precisa fazer i=Bars-1

 
Agent86:
for(int i=Bars; i>=0; i--) é o código que eu usei<--- digamos, por exemplo, Close[i], isto conta de close[Bars] até closed[0]. Quando i=Bars, existe close[i]?

for(int i=Bars-1; i>=0: i--) é sugerido<--- digamos, por exemplo, Close[i], isto conta de close[Bars-1] até close[0]. Quando i=Bars-1, existe close[i]?

Eu pensei que Bars = número de barras no gráfico atual ? pelo menos de acordo com o dicionário. <---ok

Então --i eu imaginei que estava contando para baixo a partir do número de barras mais alto, como 1002 ou algo assim, e contando --i para baixo até realmente -1 Existe fechar[1002], fechar[-1]?
Porque enquanto i>=0 deveria contar até realmente -1 antes de se tornar falso. Se fosse 0 ou maior, seria verdadeiro e seria um último loop até atingir -1 <---- no fechamento[-1], ele retorna 0. Não é falso

Pelo menos era assim que eu pensava que funcionava? Estou errado ? <--- veja abaixo a ref.

Se i=0 e ++i e contar até o final da última barra, então pensei que contaria até o final. <--- Obviamente, fará isso.

Mas neste caso Bars-1 seu ditado não seria realmente todas as Barras fechadas mas na verdade inclui a Bar[0] que ainda não está fechada ou algo assim ? <--- neste caso, o preço fechado retornará o preço atual do Bid tick

Não estou realmente certo de entender a diferença entre Bars-1 e Bars. Tem algo a ver com a barra 0 atual que não é contada quando simplesmente se refere a Barras ?? <--- veja abaixo ref

Por favor, informe Obrigado Bem-vindo





duplo fechamento[]
Série que contém preços próximos para cada barra do gráfico atual.

Os elementos da matriz da série são indexados na ordem inversa, ou seja, da última para a primeira. A barra atual, que é a última da matriz é indexada como 0. A barra mais antiga, a primeira do gráfico, é indexada como Bars-1.
 
Vejo que, por alguma razão, eu estava pensando que o buffer tratava este tópico um pouco diferente porque tecnicamente eu nem sequer declarei o número de elementos na matriz, então eu pensei que o buffer já tinha funcionado.

De qualquer forma, eu entendo isso e faz sentido, obrigado.

 
Agent86:
Vejo, por alguma razão eu estava pensando que o buffer lidou com este tópico um pouco diferente porque tecnicamente eu nem sequer declarei o número de elementos na matriz, então eu pensei que o buffer já tinha funcionado.

De qualquer forma, eu entendo isso e faz sentido, obrigado.



O que???? Eu não sabia que você estava realmente se referindo tudo isso a amortecedores indicadores. Agora que sei, leia estas referências retiradas de: https://www.mql5.com/en/articles/1500

(1) buffers indicadores & conjuntos de usuários - são ambos iguais e DIFERENTES. & A razão pela qual os buffers indicadores não são dimensionados por usuário, não tem nada a ver com o fato de já estarem sendo trabalhados. veja abaixo a ref:

double ExtMapBuffer1[];

Este é um conjunto usual. Mas a dimensionalidade não é indicada e a inicialização não é realizada. Esta matriz será posteriormente configurada como um buffer de dados.

(2) buffers indicadores na saída & na entrada (o buffer de dados acima) podem ter a mesma aparência, mas são diferentes.

SetIndexBuffer(0,ExtMapBuffer1);

Esta função "vincula" uma matriz a um número de buffer. Isto é, ela mostra que o buffer com o número indicado usará o array indicado para armazenar dados. Portanto, mudando os elementos desta matriz, você mudará o valor do buffer.O primeiro argumento é o nome da matriz que deve ser vinculada.


Vê, tudo funciona. Agora vamos ver o que o código faz:

for(int i=0;i<Bars;i++)

Usamos o ciclo para passar por todos os elementos do buffer de dados. Como uma determinada barra corresponde a cada elemento do buffer, usamos o ciclo, começando pela barra zero (a última disponível) e terminando com a primeira disponível, que é em sucessão uma barra a menos que a variável Barras (porque contamos as barras a partir do zero).

{
   ExtMapBuffer1[i]=MathRand()%1001;
}

A cada iteração um contador é aumentado em um, e passamos da última barra disponível para a primeira ao mesmo tempo, atribuindo a cada elemento do buffer (que corresponde a uma determinada barra) um número aleatório de 0 a 1000. Se for difícil para você entender, como um determinado elemento tampão corresponde a uma determinada barra, tente mudar o ciclo da seguinte maneira e veja o resultado no terminal:

for(int i=0;i<Bars;i++)
{
   ExtMapBuffer1[i]=i;
}



 
diostar:

duplo fechamento[]
Série que contém preços próximos para cada barra do gráfico atual.

Os elementos da matriz da série são indexados na ordem inversa, ou seja, da última para a primeira. A barra atual, que é a última da matriz é indexada como 0. A barra mais antiga, a primeira do gráfico, é indexada como Bars-1.

Ok, eu acho que vejo isso agora, obrigado
 
Obrigado a todos

Conforme aprendo mais sobre indicadores, parece que o projeto que estou usando não seria muito útil para uso em uma EA, mas talvez só seja bom para uso visual e/ou manual.

Como o contador conta regressivamente 1 - parece que o uso deste método não seria bom para se referir a qualquer array de objetos para uso em comércio, a menos que talvez eu me refira apenas a um deslocamento em particular[i] e nesse caso eu teria que descobrir como me referir especificamente apenas àqueles elementos de array que eu gostaria de usar para um sinal de comércio localizado apenas naqueles Bars em particular.

A sua utilização na sua forma atual provavelmente faria com que a negociação ocorresse em todo o gráfico, assim como o indicador

Portanto, acho que agora estarei aprendendo como me referir a vários elementos de matriz em qualquer indicador, a fim de me referir a esses valores/tempos/barras, etc.

Obrigado a todos pela ajuda, e isto me dará muito que pensar sobre como criar indicadores iCustom e torná-los úteis em uma EA.