Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 589
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
Ao verificar o indicador passo a passo, encontrei um salto na sub-rotina atrás do if{} e no qual não há W. Aqui está um código simplificado para esclarecer o ponto:
//--- parâmetros de entrada
input int w=10;
//---
{
int i;
//---
int co=0;
for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}
//--- valor de retorno de pré_cálculo para a próxima chamada
return(rates_total);
}
Resultado (arlets):
2016.05.30 00:45:14.064 1 (EURUSD,H1) 11
2016.05.30 01:10:35.972 1 (EURUSD,H1) 10
........... etc. a 1.
2016.05.30 00:45:14.064 1 (EURUSD,H1) 1
Regra: Se a expressão entre parênteses for verdadeira, então o operador1 é executado.
Em código: operator1 é executado SEMPRE.
Penso que se() deve funcionar apenas uma vez quando a condição entre parênteses é verdadeira. Mas na realidade ocorre em cada verificação, por isso todas as expressões em {} são executadas em cada passo e mastigam o tempo da máquina.
Perguntas: PORQUE é que a variável CO cresceu de 0 para 11 durante o loop? Porque é que o Alerta é accionado a cada passo?
Quantas vezes tenho de vos dizer?
Olhe: você tem w igual a 10,
Você verifica w para 10: "if(w===10){co++; Alert(co);}" Você acha que esta expressão é verdadeira?
Então porque é que tem a pergunta?
Ao verificar o indicador passo a passo, encontrei um ressalto de gatilhos na sub-rotina atrás se {} e em que não há W. Aqui está um código simplificado para esclarecer a questão:
//--- parâmetros de entrada
input int w=10;
//---
{
int i;
//---
int co=0;
for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}
//--- valor de retorno de pré_cálculo para a próxima chamada
return(rates_total);
}
Resultado (arlet):
2016.05.30 00:45:14.064 1 (EURUSD,H1) 11
2016.05.30 01:10:35.972 1 (EURUSD,H1) 10
........... etc. a 1.
2016.05.30 00:45:14.064 1 (EURUSD,H1) 1
Regra: Se a expressão entre parênteses for verdadeira, então o operador1 é executado.
Em código: operator1 é executado SEMPRE.
Penso que se() deve funcionar apenas uma vez quando a condição entre parênteses é verdadeira. Mas na realidade ocorre em cada verificação, por isso todas as expressões em {} são executadas em cada passo e mastigam o tempo da máquina.
Perguntas: PORQUE é que a variável CO cresceu de 0 para 11 durante o loop? Porque é que o alerta é desencadeado a cada passo?
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
Andrey Barinov, 2016.05.30 10:38
Aparentemente, tem uma gralha no código, e queria escrever assim:
Olá Cavalheiros! Tenho um pequeno problema quando escrevo uma EA(( A EA abre ordens pendentes, na maioria das vezes está bem, mas às vezes preciso de abrir ordens muito perto do preço actual, então como prescrever que abriria ordens pendentes tão perto quanto possível?
Quantas vezes tenho de vos dizer?
Olhe: você tem w igual a 10,
Você verifica w igual a 10: "if(w===10){co++; Alert(co);}" Você acha que esta expressão é verdadeira?
Então porque é que tem a pergunta?
As minhas desculpas pela pergunta estúpida e obrigado pela vossa paciência e compreensão. Fui decepcionado ao mover mecanicamente a sonda if(w==10){ Alerta(I,"/",F); através do programa à procura de um erro nos passos. Acontece por vezes quando se atinge um muro da própria ignorância da razão, mas uma vez afastado do problema por algum tempo, ele resolve-o por si só. O que se percebe como "jarring" revela-se na realidade um pedido por explicar de outra parte do programa. Com agradecimentos, Vladimir.
Olá, pode ajudar-me com as matemáticas, por favor?
Como saber qual será o lote da quinta posição, se souber o lote da primeira e que o lote de cada nova posição aumenta na progressão aritmética.
A segunda opção é que o lote aumenta com a progressão geométrica.
Olá, pode ajudar-me com as matemáticas, por favor?
Como saber qual será o lote da quinta posição, se souber o lote da primeira e que o lote de cada nova posição aumenta na progressão aritmética.
A segunda opção é que o lote aumenta com a progressão geométrica.
Está banido do Google? Desculpe, porque é que é tão cruel? ))
A progressão aritmética é definida por uma fórmula.
aprogressão geométrica é dada pela fórmula
Não compreendo, em teoria para a primeira variante é suficiente multiplicar o primeiro lote por 5, se aumentar pelo lote inicial
Para a segunda opção: multiplicador do lote* da primeira posição*5 ...mas
Não percebo, em teoria para a primeira opção basta multiplicar o primeiro lote por 5
Para a segunda opção, o lote da primeira posição * coeficiente * 5 ...mas
Não faz mal, eu próprio já me esqueci da matemática desde a escola)) Cavei um livro sobre matemática, redigi novamente a definição de progressão aritmética.
-------------
Uma sequência de números, cada um dos quais, a partir do segundo, é obtido a partir do anterior, adicionando um número constante d, chamado a diferença de uma progressão aritmética.
Se o primeiro termo for a1, então o arith. prog. com comprimento n tem a forma:
a1, a1+d, a1+2*d, ...., a1 + n*d
O código no MQL é assim, eu criei um exemplo simples
Não faz mal, eu próprio já me esqueci da matemática desde a escola ))