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

 
Artyom Trishkin:

Nem todas as arrays têm a mesma orientação.

Eu compreendo, mas também defino o ArraySetAsSeries(barsBuffer1 ,true); !

Bem, isto é metade do problema. Mas não consigo descobrir como adicionar uma nova vela.

Tentei desta forma:

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

Não funciona... (((

 
Сергей Таболин:

Eu compreendo, mas também defino o ArraySetAsSeries(barsBuffer1 ,true); !

Bem, isto é metade do problema. Mas como acrescentar uma vela nova - não consigo perceber.

Tentei desta forma:

Não funciona... (((

Lamento, mas as matrizes atribuídas aos amortecedores indicadores não podem ser redimensionadas - o subsistema do terminal fá-lo.

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

Reconsiderar a sua lógica. Não o conheço de todo, e só posso mostrar o que está manifestamente errado.

 
Artyom Trishkin:

Peço desculpa, claro, mas as matrizes atribuídas aos amortecedores indicadores não podem ser redimensionadas - isto é tratado pelo subsistema terminal.

Reconsiderar a sua lógica. Não o conheço de todo, e só posso mostrar o que está flagrantemente errado.

É assim que eu também o entendo, mas...

Artem, se o tampão indicador for controlado pelo subsistema, significa que este subsistema também aumenta a sua dimensão? Por outras palavras, um novo candelabro indicador não pode ser desenhado no gráfico até aparecer um novo candelabro?

 
Сергей Таболин:

É assim que eu também o entendo, mas...

Artem, se o tampão indicador for gerido por um subsistema, significa que também aumenta o seu tamanho? Por outras palavras, até aparecer um novo candelabro no gráfico, um novo candelabro indicador também não pode ser desenhado no gráfico?

O que se entende por "desenhar um novo candelabro"?

Pode desenhá-las, mas as barras não podem ser adicionadas - ainda não estão presentes.

Sim, o terminal trata do tamanho das matrizes indicadoras. Também fornece dados sobre quantos deles constavam da chamada anterior.

 
Artyom Trishkin:

O que quer dizer com "desenhar uma vela nova"?

Pode-se desenhar todo o tipo de barras, mas não se pode adicionar barras - elas ainda não existem.

Sim, o próprio terminal trata do tamanho das matrizes indicadoras. Também fornece dados sobre quantos deles constavam da chamada anterior.

Obrigado, agora compreendo porque é que falha.

Depois uma última pergunta. Sei que podemos exibir candelabros de outro período de tempo no indicador. Se o indicador mostrar velas de H2 e velas de H1, significa que devemos desenhar 2 velas durante a vida útil de uma vela. Como é que isso acontece se o tampão só é aumentado pelo sistema? Ou dê-me uma ligação ao exemplo, se não for muito incómodo. Talvez eu descubra ))))

 
Сергей Таболин:

Obrigado, agora compreendo porque não está a funcionar para mim.

Depois uma última pergunta. Sei que se podem mostrar castiçais a partir de outro período de tempo no indicador. Se o indicador mostrar velas de H1, isso significa que devemos desenhar 2 velas durante a vida útil de uma vela. Como é que isso acontece se o tampão só é aumentado pelo sistema? Ou dê-me uma ligação ao exemplo, se não for muito incómodo. Talvez eu descubra))))

Dei exemplos nos meus últimos artigos sobre indicadores, mas eles são baseados em bibliotecas.

E para compreender como desenhar dois castiçais em vez de um, dê uma vista de olhos no gráfico. Veja a hora em que a vela foi aberta em H2 e onde a vela com o mesmo tempo em H1 se encontra. Tudo se tornará claro.

 
Artyom Trishkin:

Dei exemplos nos meus últimos artigos sobre indicadores, mas todos eles são baseados em bibliotecas.

E para compreender como desenhar duas velas em vez de uma, olhar para o gráfico. Veja a hora em que a vela foi aberta em H2 e onde a vela com o mesmo tempo em H1 se encontra. Tudo se tornará claro.

Artem, a questão é que eu não percebo!

Por exemplo, o castiçal no H2 está aberto às 12:00. O próximo será às 14:00. Mas no H1 o próximo será às 13:00. De acordo com a lógica, até a vela se abrir na TF mais alta, a matriz de indicadores não será aumentada! Significa que não serei capaz de desenhar a segunda vela no indicador? Ou o quê?

Explique-me, takomu..... pouco claro Porquê e como posso desenhar dois castiçais (ou mesmo n) num só quadro? Porquê, se eu preencher o 0º índice do buffer do indicador com um novo valor (atribuição simples), o indicador não mudará?

Talvez eu deva pedir aos criadores tal possibilidade? Adicionei um novo elemento a este amortecedor - é desenhado com um deslocamento de todos os anteriores para a esquerda. Afinal de contas, é o meu indicador! Escrevo-o como quero! Não quero ligá-lo à abertura de um novo bar na tabela! Quão difícil pode ser?

 

Graças a Artem e Vladimir! As vossas respostas e explicações deram-me a ideia e o indicador saiu. Mais uma vez obrigado.


 

Pode dizer-me, por favor, o que está errado?

Existe uma declaração variável simples:

input double   StopLoss=150.0;

Na depuração de dados reais, a variável StopLoss tem um valor definido de "150". Mas se eu permitir a depuração de dados históricos, a mesma variável no mesmo código tem um valor diferente. Qual poderá ser a razão para isto? E como lidar com o problema?

 
Sayberix:

Pode dizer-me, por favor, o que está errado?

Existe uma declaração variável simples:

Na depuração de dados reais, a variável StopLoss tem um valor definido de "150". Mas se eu permitir a depuração de dados históricos, a mesma variável no mesmo código tem um valor diferente. Qual poderá ser a razão para isto? E como lidar com o problema?

Verifique os valores no separador 'Parâmetros' do testador de estratégias. Quando activa a depuração de dados reais, o Expert Advisor retira os valores das variáveis de entrada, e se a activar no histórico, os valores são retirados das definições do testador.

Razão: