Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 115
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
Pessoal, aqui vai uma pergunta - como colocar valores variáveis em uma matriz unidimensional?
Não o envie para ajudar - não há exemplo para tal problema.
Digamos que existe uma variável a, que muda sob certas condições.
Quero um array para armazenar os 3 últimos valores desta variável. Como isto é implementado em mql4?
Estou escrevendo em massa[3];
mas[]=a; dentro do laço, após uma condição que muda a,
O compilador dá ']', mas nada funciona, embora logicamente deva funcionar. - expressão esperada, ele quer que eu coloque alguma expressão desconhecida dentro de parênteses em mas[]=a.
A MQL4 tem alguma função que preencha a matriz com um valor variável em cada iteração de loop?
Peço desculpas por não ter encontrado o início da correspondência, mas gostaria de aconselhá-lo imediatamente a evitar condições e cálculos complexos neles - isto torna o código ilegível e como resultado complica a busca por erros lógicos, eu escreveria seu código desta forma:
Se você entender o que quero dizer, pode modificar o código que lhe dei um pouco mais, quero dizer colocá-lo em uma condição separadase(OrderType()==OP_BUY....
Então será muito mais fácil encontrar erros lógicos, imho
Inserir após cada EncomendaEnviar => devolver
ou fazer uma seleção através do interruptor :
Tentar isto e não funciona.
você tem poucos parâmetros de entrada em sua chamada de indicador personalizada - conte quantasvariáveis externas no indicadorMorning Flat? (externo) - é quantos parâmetros você deve passar ao usar o iCustom
.....
Eu escrevo int mas[3]=a; dentro do laço após a condição quando uma condição muda,
mas nada funciona, embora logicamente deva funcionar.
Aprender a fazer todas as ações passo a passo em vez de todas ao mesmo tempo.
Exemplo :
você tem poucos parâmetros de entrada em sua chamada de indicador personalizada - conte quantasvariáveis externas no indicadorMorning Flat? (externo) - é quantos parâmetros você deve passar ao usar o iCustom
Já experimentei todos eles.
Resolvi isso de outra forma. Inseri o código de cálculo de preço do indicador em meu Consultor Especialista.
A lógica do código é a mesma, mas se você dividir as condições, é mais rápido encontrar onde está o erro lógico, e no seu caso, se você colocá-lo em uma condição separada, você obtém otimização - a condição será verificada uma vez e não 4 vezes:
em uma condição separada, obtemos uma otimização de código - a condição será verificada uma vez e não 4 vezes como no seu exemplo.
Verifique a saída no diário do Expert Advisor usando o
para registro para que você possa ver qual fragmento de código foi executado e com quais parâmetros
Obrigado por sua resposta. Dividir as condições até o limite. Verifiquei a lógica com comentários. Acontece que o fechamento da posição se baseia nas condições da primeira posição aberta. Isso significa que se primeiro abrirmos uma posição de Compra ou Venda com a Condição 1 e depois uma segunda posição aberta com a mesma condição mas com a Condição 2, essa condição de fechamento é ignorada e a segunda posição também é fechada com a Condição 1 independentemente do outro número mágico. O que eu devo fazer?
Eu já passei por todas elas.
Eu resolvi o problema de uma maneira diferente. Coloquei o código de cálculo de preço de indicador para Expert Advisor.
Notei que o iCustom() não foi chamado corretamente, deveria ser assim:
Eu passo 7 parâmetros ao chamar o indicador, você o chamou com 3 parâmetros
Eu deixaria a chamada do indicador, mas modificaria o próprio indicador - removeria variáveis externas e objetos gráficos do código indicador
Eu verifiquei a lógica com comentários. Verificou-se que as posições são fechadas de acordo com as condições da primeira posição aberta.
Parabéns! Você está no caminho certo, mas é melhor na fase de depuração imprimi-lo no diário (Print()) em vez de no comentário ( Commetn())
Mostre-me o código.
Então, notei que você não chamou o iCustom() corretamente, deveria ser assim:
Eu passo 7 parâmetros ao chamar o indicador, e você o chamou com 3 parâmetros
Eu deixaria a chamada do indicador, mas modificaria o próprio indicador - removeria variáveis externas e objetos gráficos do código indicador
parabéns! Você está no caminho certo, mas é melhor na fase de depuração para sair no diário (Print()) em vez de no comentário ( Commetn())
mostrar o código.
Tirei as impressões digitais.
Tirei as impressões digitais.
Eu não sei toda a lógica de seu código, mas após cada fechamento de ordem você definitivamente precisa sair do loop via break; e no próximo tick você precisa verificar as ordens em suas condições novamente - eu não sei comoOrderSelect() se comportaapós o fechamento da ordem - se a ordem é fechada, então o que é selecionado, ou há um erro?
Basicamente, seu problema é que você quer verificar e fechar tudo de uma só vez em um loop.
interruptor()
ou fazer uma função para fechar o pedido (há funções prontas para pedidos https://www.mql5.com/ru/forum/131859/page2#434206 )
ou usar intervalo após o fechamento do pedido em seu código
Eu não sei toda a lógica de seu código, mas após cada fechamento de uma ordem, você definitivamente precisa sair do loop via break; e no próximo tick você precisa verificar suas condições novamente - eu não sei como aOrderSelect() se comportaapós o fechamento da ordem - se a ordem é fechada, então o que é selecionado, ou há um erro?
Basicamente, seu problema é que você quer verificar e fechar tudo de uma só vez em um loop.
interruptor()
ou fazer uma função para fechar o pedido (há funções prontas para pedidos https://www.mql5.com/ru/forum/107476 )
ou usar intervalo após o fechamento do pedido em seu código
Obrigado. A quebra parece ter ajudado. Veremos o que acontece a seguir.