Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 758

 
-Aleks-:

Apanhar erros - o que está errado? Na MQL4 funciona...


{' - demasiados inicializadores TZ_Sky_and_Ground_V_04.mq5 2484 6

Eu deveria colocar arrFibo[18] - dizem 18 elementos.
 
Vladimir Karputov:

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):

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:

Trabalhar com a matriz e o indicador Moving Avegarege na EA

Por favor, preste atenção à matriz arr_ma e aos valores dos elementos com índice #0 e com índice #8.

ds

Arquivos anexados:
iMAGet.mq5  12 kb
 
Vladimir Karputov:


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?

 
-Aleks-:

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.

...

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) ...
 
Vladimir Karputov:

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...
 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL4 MT4 MetaTrader 4".
 
-Aleks-:

...

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;
  }
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для...
 

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!

Razão: