Passo um: declarar uma variável no "cabeçalho" para armazenar o cabo indicador iMA:
Segundo passo: criar manípulo indicador no OnInit().
E o resultado (a mira no ecrã é colocada na barra #1):
Pergunta: se eu fizer um loop através do indicador, devo também definir um duplo MA[1]; ou devo pedir/receber de imediato um conjunto maior? Só não compreendo o que é toda esta complexidade - qual é a vantagem em comparação com a MQL4.
-Aleks-: Se eu tentar usar a dupla MA[1] em loop, devo usar a dupla MA[1]; ou é melhor pedir/receber o tamanho maior do conjunto? Só não compreendo porque é que todas estas complicações são necessárias - qual é a vantagem em comparação com a MQL4.
O meu exemplo com a função iMAGeté um exemplo concebido para receber um valor de cada vez de um indicador. Se quiser obter mais valores do indicador, deve usarCopyBuffer com parâmetros "de" e "para" e guardar o resultado numa matriz.
Adicionado: haverá um exemplo mais tarde ...
Exemplo prometido.
Parâmetros de entrada:
obter valores numa matriz - se "verdadeiro", então usamos obter valores numa matriz, se "falso", então obtemos um valor de cada vez
count -> only if "get values into an array"===verdadeiro - o número de barras copiadas para o array
posição de início -> apenas se "obter valores numa matriz"===verdadeiro - número do elemento inicial (barra) a copiar para a matriz a partir de
Trabalhar com a matriz e o indicador Moving Avegarege no Expert Advisor:
Por favor, preste atenção à matriz arr_ma e aos valores dos elementos com índice #0 e com índice #8.
O meu exemplo com a função iMAGeté um exemplo concebido para receber um valor de cada vez do indicador. Se quiser obter vários valores do indicador, deve usarCopyBuffer com parâmetros "de" e "para" e guardar o resultado numa matriz.
Adicionado: haverá um exemplo mais tarde ...
Exemplo prometido.
Parâmetros de entrada:
obter valores numa matriz - se "verdadeiro", então usamos obter valores numa matriz, se "falso", então obtemos um valor de cada vez
count -> only if "get values into an array"===verdadeiro - o número de barras copiadas para o array
posição de início -> apenas se "obter valores numa matriz"===verdadeiro - número do elemento inicial (barra) a copiar para a matriz a partir de
Trabalhar com a matriz e o indicador Moving Avegarege no Expert Advisor:
Por favor, preste atenção à matriz arr_ma e aos valores dos elementos com índice #0 e com índice #8.
ds
Obrigado pelo exemplo!
É muito importante para mim compreender se existe alguma vantagem em solicitar um único valor indicador e copiar uma dúzia de valores indicadores - talvez tenha havido alguma investigação sobre isso?
O facto de a série temporal ser invertida - não é boa - estou habituado à numeração padrão das barras 0123, mas aqui recebo 1230 em ordem inversa.
Se não sei de quantos bares preciso durante a procura (por exemplo, quando estamos a procurar o MA e o ponto de passagem de bares), então devo pedir o número máximo possível? Afecta de alguma forma o desempenho?
É muito importante para mim compreender se existe uma vantagem em solicitar um único valor indicador e copiar uma dúzia de valores indicadores - talvez tenha havido alguma investigação sobre isto?
...
Quem nos impede de fazer nós próprios a investigação :) ?
...
O facto de a série temporal ser invertida - não é boa - estou habituado à numeração padrão das barras 0123, e aqui temos 1230 em ordem inversa.
...
A única coisa que precisa de fazer depois de obter um array (depois de chamar iMAGetArray) é executar oArraySetAsSeries("o nosso array", verdade).
...
Se eu não souber que número de barras vou precisar na procura (por exemplo, ao procurar um MA e um ponto de passagem de barras), devo pedir o número máximo possível? Afecta de alguma forma o desempenho?
Nesses casos, é melhor fazer várias perguntas. Por exemplo, primeira consulta - 50 elementos, se necessário - segunda consulta (50 elementos novamente) ...
Quem nos impede de fazer a nossa própria investigação :) ?
Sou prejudicado pelo meu analfabetismo na MQL5 - posso enganar toda a gente por causa de um erro no código, mas o vosso profissionalismo inspiraria mais confiança em tais estudos!
Vladimir Karputov:
Tudo o que precisa é de executar oArraySetAsSeries("o nosso array", verdadeiro) depois de obter o array (depois de chamar o iMAGetArray).
Quer dizer, fazê-lo numa função de uma só vez?
Vladimir Karputov:
Nesses casos, é melhor fazer várias perguntas. Por exemplo, o primeiro pedido - 50 elementos, e, se necessário, o segundo pedido (50 elementos novamente) ...
Brr... Ou seja, colocar um laço num laço? E porquê 50 e não 100? Todas as mesmas pesquisas sobre este tema são necessárias, pode não haver sentido na recepção da informação mais do que sobre um bar...
Isto é, fazê-lo em função de uma função de uma vez?
...
É melhor virar a matriz para dentro:
Vladimir Karputov:
Depois de receber o array (depois de chamar iMAGetArray), terá de executar oArraySetAsSeries("o nosso array", verdade).
-Aleks-:
...
Brr... Ou seja, colocar um laço no laço? Porquê 50 e não 100? Mesmo assim, são necessários estudos sobre este tema, talvez não faça sentido obter informações sobre mais do que um bar...
Nenhum loop aninhado - haverá apenas um loop em torno de todos os valores: todo o processamento é sequencial - resultado da pesquisa numa função separada (nela, solicitamos um determinado valor - por exemplo, 50 valores). Se não encontrarmos o resultado, fazemos um novo pedido.
Trabalhar com indicadores em MQL5 depois de MQL4 é terrível! Deixa-me realmente doente.
Não percebo porque não conseguem combinar tudo numa única função, incluindo o cabo, em vez de manchar a chamada do indicador em todo o código!
E se um indicador for alterado pela função onde o indicador está localizado, não percebo o que fazer!? Preciso de iniciar todas as variantes do indicador?
vi um exemplo em MQL4 - como fazê-lo em MQL5 ?
int BarPeresek_iMAf(int PeriodMA)
{
int TFT=0;
int shiftMAT=0;
int typeMAT=0;
int priceMAT=0;
int BarPeresek=0;
if(Bars(Symbol(),0)>PeriodMA)
{
for(int X=1;X<1000; X++)
{
double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits());
if((Low(X)>MAT && High(X)>MAT) ||
(Low(X)<MAT && High(X)<MAT))BarPeresek++;
else {BarPeresek++; break;}
}
}
return BarPeresek;
}
Apanhar erros - o que está errado? Na MQL4 funciona...
Já viu a ajuda doiMA?
Passo um: declarar uma variável no "cabeçalho" para armazenar o cabo indicador iMA:
Segundo passo: criar manípulo indicador no OnInit().
E o resultado (a mira no ecrã é colocada na barra #1):
Se eu tentar usar a dupla MA[1] em loop, devo usar a dupla MA[1]; ou é melhor pedir/receber o tamanho maior do conjunto? Só não compreendo porque é que todas estas complicações são necessárias - qual é a vantagem em comparação com a MQL4.
O meu exemplo com a função iMAGeté um exemplo concebido para receber um valor de cada vez de um indicador. Se quiser obter mais valores do indicador, deve usarCopyBuffer com parâmetros "de" e "para" e guardar o resultado numa matriz.
Adicionado: haverá um exemplo mais tarde ...
Exemplo prometido.
Parâmetros de entrada:
Trabalhar com a matriz e o indicador Moving Avegarege no Expert Advisor:
Por favor, preste atenção à matriz arr_ma e aos valores dos elementos com índice #0 e com índice #8.
ds
O meu exemplo com a função iMAGeté um exemplo concebido para receber um valor de cada vez do indicador. Se quiser obter vários valores do indicador, deve usarCopyBuffer com parâmetros "de" e "para" e guardar o resultado numa matriz.
Adicionado: haverá um exemplo mais tarde ...
Exemplo prometido.
Parâmetros de entrada:
Trabalhar com a matriz e o indicador Moving Avegarege no Expert Advisor:
Por favor, preste atenção à matriz arr_ma e aos valores dos elementos com índice #0 e com índice #8.
ds
Obrigado pelo exemplo!
É muito importante para mim compreender se existe alguma vantagem em solicitar um único valor indicador e copiar uma dúzia de valores indicadores - talvez tenha havido alguma investigação sobre isso?
O facto de a série temporal ser invertida - não é boa - estou habituado à numeração padrão das barras 0123, mas aqui recebo 1230 em ordem inversa.
Se não sei de quantos bares preciso durante a procura (por exemplo, quando estamos a procurar o MA e o ponto de passagem de bares), então devo pedir o número máximo possível? Afecta de alguma forma o desempenho?
Obrigado pelo exemplo!
É muito importante para mim compreender se existe uma vantagem em solicitar um único valor indicador e copiar uma dúzia de valores indicadores - talvez tenha havido alguma investigação sobre isto?
...
Quem nos impede de fazer nós próprios a investigação :) ?
O facto de a série temporal ser invertida - não é boa - estou habituado à numeração padrão das barras 0123, e aqui temos 1230 em ordem inversa.
...
Se eu não souber que número de barras vou precisar na procura (por exemplo, ao procurar um MA e um ponto de passagem de barras), devo pedir o número máximo possível? Afecta de alguma forma o desempenho?
Nesses casos, é melhor fazer várias perguntas. Por exemplo, primeira consulta - 50 elementos, se necessário - segunda consulta (50 elementos novamente) ...
Quem nos impede de fazer a nossa própria investigação :) ?
Sou prejudicado pelo meu analfabetismo na MQL5 - posso enganar toda a gente por causa de um erro no código, mas o vosso profissionalismo inspiraria mais confiança em tais estudos!
Tudo o que precisa é de executar oArraySetAsSeries("o nosso array", verdadeiro) depois de obter o array (depois de chamar o iMAGetArray).Quer dizer, fazê-lo numa função de uma só vez?
Nesses casos, é melhor fazer várias perguntas. Por exemplo, o primeiro pedido - 50 elementos, e, se necessário, o segundo pedido (50 elementos novamente) ......
Isto é, fazê-lo em função de uma função de uma vez?
...
É melhor virar a matriz para dentro:
Vladimir Karputov:
Depois de receber o array (depois de chamar iMAGetArray), terá de executar oArraySetAsSeries("o nosso array", verdade).
...
Brr... Ou seja, colocar um laço no laço? Porquê 50 e não 100? Mesmo assim, são necessários estudos sobre este tema, talvez não faça sentido obter informações sobre mais do que um bar...Nenhum loop aninhado - haverá apenas um loop em torno de todos os valores: todo o processamento é sequencial - resultado da pesquisa numa função separada (nela, solicitamos um determinado valor - por exemplo, 50 valores). Se não encontrarmos o resultado, fazemos um novo pedido.
Trabalhar com indicadores em MQL5 depois de MQL4 é terrível! Deixa-me realmente doente.
Não percebo porque não conseguem combinar tudo numa única função, incluindo o cabo, em vez de manchar a chamada do indicador em todo o código!
E se um indicador for alterado pela função onde o indicador está localizado, não percebo o que fazer!? Preciso de iniciar todas as variantes do indicador?
vi um exemplo em MQL4 - como fazê-lo em MQL5 ?
Pode dizer-me como remover os marcadores depois de fechar uma posição para que não sejam exibidos?
É possível removê-los de forma programática?
Obrigado!