Pensei a mesma coisa até que o testei, surpreendentemente a parte if(double === duplo) dele funciona, me faz pensar se a comparação de duplas é tratada de maneira diferente nas novas construções.
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---for(int i=0; i<100; i++)
{if(iFractals(NULL, 0, MODE_UPPER, i) == iHigh(NULL, 0, i) && iFractals(NULL, 0, MODE_UPPER, i) > Close[0])
Print("Fractals conditions met on bar ",i);
}}
EURUSD,M15: Condições de fractal atendidas na barra 98 EURUSD,M15: Condições de fractals atendidas na barra 95 EURUSD,M15: Condições de fractals atendidas na barra 91 EURUSD,M15: Condições de fractals atendidas na barra 81 EURUSD,M15: Condições de fractals atendidas na barra 77 EURUSD,M15: Condições de fractals atendidas na barra 68 EURUSD,M15: Condições de fractals atendidas na barra 61 EURUSD,M15: Condições de fractals atendidas na barra 48 EURUSD,M15: Condições de fractals atendidas na barra 39 EURUSD,M15: Condições dos fractais atendidas na barra 24 EURUSD,M15: Condições de fractals atendidas na barra 19 EURUSD,M15: Condições de fractals atendidas na barra 12 EURUSD,M15: Condições de fractals atendidas na barra 4
Talvez eu esteja errado e de cabeça dura, mas não consigo entender a lógica...
Se o primeiro IF vira, como você sugere, o fio para "verdadeiro" a dizer SwinghHighShift=10, então a contagem não aumenta nesse ciclo; depois disso, o controle volta para o QUANTO: o ciclo deve terminar neste ponto porque o QUANTO contém um OU lógico e uma de suas condições é satisfeita.
Por outro lado, se a variável permanecer falsa, o contador deve atingir seu valor máximo e novamente você tem a condição de saída.
Acho que sua consideração seria verdadeira com um operador AND.
Seguindo sua interpretação, eu poderia pular o OU dentro do OU; eu poderia apenas colocar a primeira condição IF na corda: se se tornar "verdadeira", então a quebra terminará o OU, caso contrário o contador continuará até seu máximo.
O código se voltará para:
Mas isto ainda é uma alternativa e, infelizmente, não explica (para mim) porque o QUEM não cuida do OR.
Não há nada de errado com o OR ou com o OR lógico, você tem duas condições em seu OR, UM DAS quais deve ser quebrado antes que o OR possa sair.
É por isso que ela fica presa
O código entra em WHILE loop. Ambas as condiçoes são verdadeiras para começar.
O código passa pelo laço WHILE incrementando o SwingHighShift++ até que uma barra seja encontrada com fractais para satisfazer as condições do IF.
Mais cedo ou mais tarde, o código entra nos operadores IF quando os fractais atendem às condições.
O StringHighStatus é alterado para falso para que a primeira condição WHILE seja quebrada.
SwingHighShift++; NÃO é incrementado porque está na parte ELSE do operador IF (a condição IF foi cumprida, portanto a condição ELSE é ignorada).
A segunda condição WHILE ainda é verdadeira, então codifica novamente STILL ON THE SAME BAR AS LAST TIME.
o mesmo fractal satisfaz as condições IF novamente, exatamente como da última vez.
O código agora está agora preso para sempre na barra com o fractal que atende às condições IF porque SwingHighShift++ na parte ELSE não é incrementado quando as condições IF são verdadeiras.
Há apenas uma pequena chance de que enquanto o laço possa sair e é quando a condição IF não é cumprida para todas as 100 Barras (SwingBarCount), então a 2ª condição WHILE é quebrada antes da 1ª. Em seguida, os fractais satisfazem a condição IF e o código para quebrar a 1ª condição WHILE (modificar o StringHighStatus) é executado.
Você precisa pegar SwingHighShift++; fora do ELSE e colocá-lo por si só no laço enquanto após o operador IF, de modo que independentemente do que acontece com as condições IF ele ainda incrementa para que o laço possa passar para a próxima barra, ou usar a quebra após o bloco de código de desenho do objeto para quebrar o laço uma vez que o objeto é desenhado.
Você também precisa dar a seu objeto uma maneira de criar nomes diferentes para si mesmo, caso contrário, ele será desenhado apenas uma vez. (a menos que você queira que ele seja desenhado apenas uma vez).
Li novamente sobre seus posts neste tópico e vejo onde sua confusão surge agora. Você está pensando na lógica de ONDE e OU ao contrário. O OU não se trata de parar o QUEM. Trata-se de mantê-lo ativo quando qualquer uma das condições é válida. É assim, você tem duas luzes acendidas. Sua instrução é: Enquanto a luz 1 OU a luz 2 estiver acesa, continue fazendo alguma coisa. Obviamente, as duas luzes têm que estar apagadas antes de você parar, não apenas uma delas.
Pensei a mesma coisa até que o testei, surpreendentemente a parte if(double === duplo) dele funciona, me faz pensar se a comparação de duplas é tratada de maneira diferente nas novas construções.
EURUSD,M15: Condições de fractais atendidas na barra 98 EURUSD,M15: Condições de fractais atendidas na barra 95 EURUSD,M15: Condições de fractais atendidas na barra 91 EURUSD,M15: Condições de fractais atendidas na barra 81 EURUSD,M15: Condições de fractais atendidas na barra 77 EURUSD,M15: Condições de fractais atendidas na barra 68 EURUSD,M15: Condições de fractais atendidas na barra 61 EURUSD,M15: Condições de fractais atendidas na barra 48 EURUSD,M15: Condições de fractais atendidas na barra 39 EURUSD,M15: Condições de fractais atendidas na barra 24 EURUSD,M15: Condições de fractais atendidas na barra 19 EURUSD,M15: Condições de fractais atendidas na barra 12 EURUSD,M15: Condições de fractais atendidas na barra 4
O motivo pelo qual funciona é porque o código está efetivamente comparando o mesmo valor
SDC: Li novamente sobre seus posts neste tópico e vejo onde sua confusão surge agora. Vocês estão pensando na lógica de ONDE e OU ao contrário. O OU não se trata de parar o QUEM. Trata-se de mantê-lo ativo quando qualquer uma das condições é válida. É assim, você tem duas luzes acendidas. Sua instrução é: Enquanto a luz 1 OU a luz 2 estiver acesa, continue fazendo alguma coisa. Obviamente, as duas luzes têm que estar apagadas antes de você parar, não apenas uma delas.
É isso aí!
Que vergonha para mim... :-)
Além disso, não é a primeira vez que uso QUANDO, mas comecei a pensar ao contrário e nunca saí do Meu Próprio loop :-/
E assim a sugestão dos deVries de substituir ||| por && vira à direita.
Muitas outras coisas para cuidar saíram deste tópico, ou seja, com o IF( === ) funcionando.
Obrigado a todos por sua paciência e pelo tempo que vocês gastaram para me fazer entender.
quando é isso enquanto se inicia e
quando é que isto pára ????
StringHighStatus="True";Pensei a mesma coisa até que o testei, surpreendentemente a parte if(double === duplo) dele funciona, me faz pensar se a comparação de duplas é tratada de maneira diferente nas novas construções.
EURUSD,M15: Condições de fractal atendidas na barra 98
EURUSD,M15: Condições de fractals atendidas na barra 95
EURUSD,M15: Condições de fractals atendidas na barra 91
EURUSD,M15: Condições de fractals atendidas na barra 81
EURUSD,M15: Condições de fractals atendidas na barra 77
EURUSD,M15: Condições de fractals atendidas na barra 68
EURUSD,M15: Condições de fractals atendidas na barra 61
EURUSD,M15: Condições de fractals atendidas na barra 48
EURUSD,M15: Condições de fractals atendidas na barra 39
EURUSD,M15: Condições dos fractais atendidas na barra 24
EURUSD,M15: Condições de fractals atendidas na barra 19
EURUSD,M15: Condições de fractals atendidas na barra 12
EURUSD,M15: Condições de fractals atendidas na barra 4
Obrigado GumRai por sua paciência.
Talvez eu esteja errado e de cabeça dura, mas não consigo entender a lógica...
Se o primeiro IF vira, como você sugere, o fio para "verdadeiro" a dizer SwinghHighShift=10, então a contagem não aumenta nesse ciclo; depois disso, o controle volta para o QUANTO: o ciclo deve terminar neste ponto porque o QUANTO contém um OU lógico e uma de suas condições é satisfeita.
Por outro lado, se a variável permanecer falsa, o contador deve atingir seu valor máximo e novamente você tem a condição de saída.
Acho que sua consideração seria verdadeira com um operador AND.
Seguindo sua interpretação, eu poderia pular o OU dentro do OU; eu poderia apenas colocar a primeira condição IF na corda: se se tornar "verdadeira", então a quebra terminará o OU, caso contrário o contador continuará até seu máximo.
O código se voltará para:
Mas isto ainda é uma alternativa e, infelizmente, não explica (para mim) porque o QUEM não cuida do OR.
Não há nada de errado com o OR ou com o OR lógico, você tem duas condições em seu OR, UM DAS quais deve ser quebrado antes que o OR possa sair.
É por isso que ela fica presa
Há apenas uma pequena chance de que enquanto o laço possa sair e é quando a condição IF não é cumprida para todas as 100 Barras (SwingBarCount), então a 2ª condição WHILE é quebrada antes da 1ª. Em seguida, os fractais satisfazem a condição IF e o código para quebrar a 1ª condição WHILE (modificar o StringHighStatus) é executado.
Você precisa pegar SwingHighShift++; fora do ELSE e colocá-lo por si só no laço enquanto após o operador IF, de modo que independentemente do que acontece com as condições IF ele ainda incrementa para que o laço possa passar para a próxima barra, ou usar a quebra após o bloco de código de desenho do objeto para quebrar o laço uma vez que o objeto é desenhado.
Você também precisa dar a seu objeto uma maneira de criar nomes diferentes para si mesmo, caso contrário, ele será desenhado apenas uma vez. (a menos que você queira que ele seja desenhado apenas uma vez).
Pensei a mesma coisa até que o testei, surpreendentemente a parte if(double === duplo) dele funciona, me faz pensar se a comparação de duplas é tratada de maneira diferente nas novas construções.
EURUSD,M15: Condições de fractais atendidas na barra 98
EURUSD,M15: Condições de fractais atendidas na barra 95
EURUSD,M15: Condições de fractais atendidas na barra 91
EURUSD,M15: Condições de fractais atendidas na barra 81
EURUSD,M15: Condições de fractais atendidas na barra 77
EURUSD,M15: Condições de fractais atendidas na barra 68
EURUSD,M15: Condições de fractais atendidas na barra 61
EURUSD,M15: Condições de fractais atendidas na barra 48
EURUSD,M15: Condições de fractais atendidas na barra 39
EURUSD,M15: Condições de fractais atendidas na barra 24
EURUSD,M15: Condições de fractais atendidas na barra 19
EURUSD,M15: Condições de fractais atendidas na barra 12
EURUSD,M15: Condições de fractais atendidas na barra 4
O motivo pelo qual funciona é porque o código está efetivamente comparando o mesmo valor
O tampão fractal terá um valor Vazio ou tirará o seu valor do alto da barra relevante.
O código é efetivamente
Não vejo razão para que não possa ser substituído por
Não vejo razão para que não possa ser substituído por
Li novamente sobre seus posts neste tópico e vejo onde sua confusão surge agora. Vocês estão pensando na lógica de ONDE e OU ao contrário. O OU não se trata de parar o QUEM. Trata-se de mantê-lo ativo quando qualquer uma das condições é válida. É assim, você tem duas luzes acendidas. Sua instrução é: Enquanto a luz 1 OU a luz 2 estiver acesa, continue fazendo alguma coisa. Obviamente, as duas luzes têm que estar apagadas antes de você parar, não apenas uma delas.
É isso aí!
Que vergonha para mim... :-)
Além disso, não é a primeira vez que uso QUANDO, mas comecei a pensar ao contrário e nunca saí do Meu Próprio loop :-/
E assim a sugestão dos deVries de substituir ||| por && vira à direita.
Muitas outras coisas para cuidar saíram deste tópico, ou seja, com o IF( === ) funcionando.
Obrigado a todos por sua paciência e pelo tempo que vocês gastaram para me fazer entender.
Eu gostaria de fazê-lo dessa forma, com uma pausa, para quebrar o loop while, é correto?