Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1332
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Escavação da documentação e do fórum ...
Como tornar globais variáveis de tipo ponteiro [no exemplo var], se são criadas em OnInit() por string:
e o número de objectos e parâmetros do construtor são desconhecidos antecipadamente e são calculados no OnInit() ?
Isso é fácil.
Olá
mt5 tem um botão de cristais
Quando se pressiona no gráfico, mostra quantas barras, quantas pips e percentagem
Ajude-me a calcular correctamente este valor para que possa ligá-lo ao meu robô
Obrigado
A nova classe de bares já está a funcionar?
E como são exactamente os parâmetros de entrada?
A turma é emprestada de:https://www.mql5.com/ru/code/768, pequenas alterações feitas
Destina-se a ser aplicado da seguinte forma:
Fácil.
Obrigado pela resposta)
No início fi-lo.
Assim, o objecto é criado duas vezes, primeiro vazio, depois como deve ser por um construtor com parâmetros.
Mas ... Neste caso, o compilador imprime um aviso na linha no OnInit():
declaração de 'var1' esconde variável global -> na linha no OnInit()
ver declaração anterior de 'var1'.
Assim, uma variável local esconde uma variável global ... Então o que acontece?
Que variável será então vista por outra função, OnTick(), por exemplo? A variável global é =NULL, a variável local é inicializada correctamente mas não pode ser vista por outra função ...
A turma é emprestada de:https://www.mql5.com/ru/code/768, com pequenas modificações
É suposto ser aplicado da seguinte forma:
Extrair todos os substratos dos parâmetros de entrada e utilizá-los para criar nomes de símbolos e prazos correspondentes.
Em seguida, criar novos objectos de barra a partir destas listas e colocar ponteiro para cada objecto a ser criado - "Nova Barra" - no CArrayObj que é declarado globalmente.
A seguir, recebe um ponteiro para o próximo objecto da lista no laço OnTimer() e verifica a existência de uma nova barra. Se não houver nenhum objecto novo, deve ir para o próximo, se houver, deve fazer o que tem de fazer quando um novo bar abre.
O temporizador deve ser ajustado de acordo com as suas necessidades - milissegundo, segundo, minuto - em geral, com a frequência que considerar suficiente para reagir a uma nova barra sobre um símbolo não corrente.
Obrigado pela resposta)
No início fi-lo.
Assim, o objecto é criado duas vezes, primeiro vazio, depois como deve ser por um construtor com parâmetros.
Mas ... Neste caso, o compilador imprime um aviso na linha no OnInit():
declaração de 'var1' esconde variável global -> na linha no OnInit()
ver declaração anterior de 'var1'.
Assim, uma variável local esconde uma variável global ... Então o que acontece?
Que variável será então vista por outra função, OnTick(), por exemplo? A variável global é =NULL e a variável local é inicializada correctamente, mas não pode ser vista por outra função.
Veja com atenção. Não foi isso que fez.
A partir dos parâmetros de entrada devem ser extraídos todos os substratos, dos quais devem ser compilados os nomes dos símbolos e os seus prazos correspondentes.
Depois criar novos objectos de barra a partir destas listas e colocar um ponteiro para cada novo objecto no CArrayObj que é declarado a nível global.
A seguir, recebe um ponteiro para o próximo objecto da lista no laço OnTimer() e verifica a existência de uma nova barra. Se não houver nenhum objecto novo, deve ir para o próximo, se houver, deve fazer o que tem de fazer quando um novo bar abre.
Faça um temporizador de acordo com as suas necessidades - milissegundo, segundo, minuto - em geral, com a frequência que achar suficiente para responder a uma nova barra sobre um símbolo não corrente.
Era isto que estava a fazer, mas ArrObj.At(0) não chama as funções de membro daclasse...
Dê uma vista de olhos mais atenta. Não era isso que estava a fazer.
Já notado)
Portanto, a solução é declarar globalmente objectos vazios
E se não souber de antemão quantos deles haverá? Basta declarar "com reserva" ? :)
P.S. Não encontrei esta forma de declarar objectos na ajuda integrada
CObj* var1 = NULL;
Já notado)
Portanto, a solução é declarar globalmente objectos vazios....
E se não souber de antemão quantos deles haverá? Basta declará-los "com reserva" ? :)
Colocar emCArrayObj.
A funçãoArrObj.At(0) devolve um ponteiro a uma classe base que nada sabe sobre os membros da classe derivada.
A fim de se referir a eles, basta fazer uma conversão de tipo.
CIsNewBar* newBar = (CIsNewBar*)ArrayObj.At(0); newBar.method( parameter );
Colocar emCArrayObj.
FunçãoArrObj.At(0) devolve o ponteiro à classe base, que nada sabe sobre os membros da classe derivada.
Basta fazer uma conversão de tipo para se referir a eles.
Obrigado pela resposta, não é nada mau)
Agora tudo está claro)
UPD
Esta é a construção que também funciona
CIsNewBar* newBar = ArrayObj.At(0); newBar.method( parameter )