Talvez você possa entender melhor um loop for loop, entendendo primeiro um loop while . . . um loop for loop é apenas um loop while com condição inicial e incremento embutidos nele . .
Confira a documentação sobreo loop diz . .
"Opara operador é equivalente à seguinte sucessão de operadores:"
Expression1;
while(Expression2)
{
operator;
Expression3;
};
Especificamente relacionado à sua pergunta,"Por que este primeiro exemplocontém uma "condição" como segundo parâmetro enquanto o segundo exemplo contém "Expressão2"como segundo parâmetro?" uma expressão pode ser uma condição, uma condição resulta em um valor verdadeiro ou falso, por exemplo (a > b) ou (c ||| d) ou (OrderTotal() >= 0) , também a documentação também diz . ."Expressão2 é o teste condicional para o término do ciclo."
Simon,
uma expressão pode ser uma condição
Então, o parâmetro dois em um cabeçalho de operador 'para' pode ser uma expressão OU condição? Eu assumo que Expressão_1 e Expressão_3 devem permanecer expressões e não mudar para condições corretas? Não vejo porque as expressões 1 e 3 também não poderiam ser condições. Ambas as expressões 1&3 são apenas parâmetros a serem preenchidos. (sendo uma condição COULD ser alternativamente o parâmetro dois aka Expression_2's purpose)
Por favor, confirme os seus pensamentos.
As expressões podem ser operações aritméticas (2+2=4), atribuição, etc. (todas listadas no MetaEditor Dictionary).
A condição é verdadeira || falsa (exemplos: a>b, a>=b, a===b, etc.).
As operações também estão contidas no MetaEditor Dictionary (exemplos: Break, Continue, Return, while, for, etc.).
Obrigado
Simon,
uma expressão pode ser uma condição
Então, o parâmetro dois em um cabeçalho de operador 'para' pode ser uma expressão OU condição? Eu assumo que Expressão_1 e Expressão_3 devem permanecer expressões e não mudar para condições corretas? Não vejo porque as expressões 1 e 3 também não poderiam ser condições. Ambas as expressões 1&3 são apenas parâmetros a serem preenchidos. (sendo uma condição COULD ser alternativamente o parâmetro dois aka Expression_2's purpose)
Documentação - enquanto
Livro - enquanto
Simon, vou praticar o uso enquanto estiver operando em código. faça um favor a si mesmo... Eu gosto do som disto! :) muito obrigado.
William, O número, convertido em booleano é uma condição ... (1=verdadeiro,0=falso). Muito obrigado.
Muito obrigado.
Simon,
Eu escrevi um EA que deve ;) poder fazer o que você pediu.
Estou compartilhando uma combinação deste EA juntamente com um instantâneo do resultado da aba "Especialistas" no Terminal.
A EA parece ser capaz de selecionar a ordem USDJPY e imprimir suas informações na aba "Experts". Por que a EA não fecha o pedido, bem como imprime as informações do pedido?
Obrigado.
Simon,
Eu escrevi um EA que deve ;) poder fazer o que você pediu.
Estou compartilhando uma combinação deste EA juntamente com um instantâneo do resultado da aba "Especialistas" no Terminal.
O EA parece ser capaz de selecionar a ordem USDJPY e imprimir suas informações na aba "Experts". Por que a EA não fecha o pedido, bem como imprime as informações do pedido?
Obrigado.
Por favor, explique seu código e o que ele deve fazer . . . em particular, fale comigo durante o tempo, por favor.
Simon,
Por favor, explique seu código e o que ele deve fazer . . . em particular, fale comigo durante o tempo, por favor.
Farei o meu melhor para explicar o código e o seu propósito.
Objetivo do código:
1. Selecione a ordem USDJPY a partir do pool de três ordens.
2. Modificar TP e SL de pedido de USDJPY.
3. Executar a função OrderPrint().
4. Fechar pedido de USDJPY.
Explicação do código:
Primeiramente, as variáveis são declaradas.
int i; double bid_ask;
Em segundo lugar, o loop 'enquanto' é executado.
Lógica de loop 'while':
Afunção OrderSelect() usa a variável 'i' como substituto para um número 1,2,3,etc... (apenas tenha isto em mente, por favor)
Portanto, se a variável i dentro da função OrderSelect() e OrderSymbol() NÃO for USDJPY, aumente a variável i em 1. ( i++; )
while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")
i++;
O loop 'while' aumenta a variável 'i' até que a função OrderSelect() selecione o bilhete de pedido apropriado E a função OrderSymbol() selecione um pedido USDJPY. Quando ambos os objetivos são atingidos, o loop while se torna falso e o controle é passado abaixo de i++; (o corpo do loop while).
Em terceiro lugar, a função OrderModify() é executada.
OrderModify(i,OrderOpenPrice(),50*Point,50*Point,0,CLR_NONE);
Em quarto lugar, a função OrderPrint() é executada.
OrderPrint();
Em quinto lugar, são incluídos parâmetros para discernir se a ordem a ser fechada é uma ordem de compra ou venda.
if(OrderType()==OP_BUY){bid_ask=Bid;} if(OrderType()==OP_SELL){bid_ask=Ask;}
Em sexto lugar, uma vez que o programa distingue se a ordem é comprada ou vendida, ele executa a função OrderClose().
OrderClose(i,OrderLots(),bid_ask,3,CLR_NONE);
Sétimo (e por último), o programa inclui um comentário que mostrará a variável 'i' para confirmar que o número do bilhete é realmente o bilhete em USDJPY durante o teste visual no testador de estratégia.
Comment("i = " ,i);
Obrigado.
Simon,
lógica de laço 'while':
A função OrderSelect() utiliza a variável 'i' como um substituto para um número 1,2,3,etc. (basta ter isto em mente, por favor)
Portanto, se a variável i dentro da função OrderSelect() e OrderSymbol() NÃO for USDJPY, aumente a variável i em 1. ( i++; )
O loop 'while' aumenta a variável 'i' até que a função OrderSelect() selecione o bilhete de pedido apropriado E a função OrderSymbol() selecione uma ordem USDJPY. Quando ambos os objetivos são atingidos, o loop while se torna falso e o controle é passado abaixo de i++; (o corpo do loop while).
Se você tivesse incluído a verificação dos valores de retorno e o relatório de erro, provavelmente você mesmo teria visto seu problema.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá comunidade MQL4,
Primeira referência: https://book.mql4.com/operators/for
De acordo com a primeira referência, um exemplo de formato do operador 'para' é escrito como tal:
Segunda referência: https://docs.mql4.com/basis/operators/for
De acordo com a segunda referência, o exemplo fornecido do operador "para" é descrito como tal:
Por que este primeiro exemplo contém uma "condição" como segundo parâmetro enquanto o segundo exemplo contém "Expressão2 " como segundo parâmetro?
Qual é o significado desta contradição?
Será que isso importa?
Se eu quiser usar o operador do ciclo "para", acredito que devo ter um profundo conhecimento de todos os seus parâmetros.
Obrigado.