definição do período de validade das condições IF
7 respostas
huangwh88
7 anos atrás #116256
Olá colegas comerciantes,
Gostaria de saber se posso programar o seguinte no assistente:
Suponha que eu tenha um sistema de crossover MACD e RSI com duas condições de entrada.
A condição 1 é o cruzamento do MACD acima de 0. Supondo que ele permaneça acima de 0, há uma janela de 10 períodos para o RSI cruzar acima de 50. Se isso acontecer, a negociação é executada. Caso contrário, a condição MACD é redefinida e aguardamos o próximo cruzamento do MACD acima de 0.
Para os casos em que tanto o MACD quanto o RSI cruzam ao mesmo tempo, a declaração IF pode ser:
MACD cruzado acima de 0 E RSI cruzado acima de 50
Mas se o cruzamento do RSI ocorrer 5 períodos depois, a instrução IF poderá ser:
MACD > 0 E cruzamento RSI acima de 50
Como posso fazer com que o EA reconheça que o cruzamento de MACD ocorreu para que ele use MACD > 0 nos períodos subsequentes?
Em segundo lugar, como posso adicionar a janela de validade de 10 períodos?
Espero que isso faça sentido. Obrigado por qualquer ajuda.
chris.marshall
7 anos atrás #141290
Estou apenas com alguns indicadores em minha jornada com esse produto, mas consegui que a solução a seguir funcionasse com um problema semelhante que tive em um EA. Observe que, quando tentei usá-la como indicador, ela não funcionou, mas ainda não tenho certeza do motivo.
Você poderia configurar duas variáveis MACDP (para contar as velas após o cruzamento acima) e MACDN (para contar as velas após o cruzamento abaixo) ou qualquer outra coisa que faça sentido para você. Isso é feito na guia Strategy (Estratégia), na caixa inferior "Strategy parameters" (Parâmetros da estratégia). Faça com que sejam do tipo inteiro.
Em seguida, configure duas novas regras que calculam o fechamento da vela
1) SE MACD > 0, então MACDP = MACDP + 1 E MACDN = 0
2) SE MACD < 0, então MACDN = MACDN + 1 E MACDP = 0
Certifique-se de que essas duas regras estejam antes do teste RSI na ordem de execução
Então, seu teste RSI seria
1) SE o RSI cruzar acima de 50 e o MACDP > 0 e o MACDP < 11, a condição de negociação será
2) SE o RSI cruzar abaixo de 50 e o MACDN -11, a condição de negociação será
huangwh88
7 anos atrás #141294
Estou apenas com alguns indicadores em minha jornada com esse produto, mas consegui que a solução a seguir funcionasse com um problema semelhante que tive em um EA. Observe que, quando tentei usá-la como indicador, ela não funcionou, mas ainda não tenho certeza do motivo.
Você poderia configurar duas variáveis MACDP (para contar as velas após o cruzamento acima) e MACDN (para contar as velas após o cruzamento abaixo) ou qualquer outra coisa que faça sentido para você. Isso é feito na guia Strategy (Estratégia), na caixa inferior "Strategy parameters" (Parâmetros da estratégia). Faça com que sejam do tipo inteiro.
Em seguida, configure duas novas regras que calculam o fechamento da vela
1) SE MACD > 0, então MACDP = MACDP + 1 E MACDN = 0
2) SE MACD < 0, então MACDN = MACDN + 1 E MACDP = 0
Certifique-se de que essas duas regras estejam antes do teste RSI na ordem de execuçãoEntão, seu teste RSI seria
1) SE o RSI cruzar acima de 50 e o MACDP > 0 e o MACDP < 11, a condição de negociação será
2) SE o RSI cruzar abaixo de 50 e o MACDN -11, a condição de negociação será
Oi, Chris,
Agradeço imensamente a sua opinião. Entendo o que você está dizendo, mas como o EA reconhece que só deve adicionar ao MACDP e ao MACDN depois que ocorrer um cruzamento acima/abaixo nos 10 períodos anteriores?
Por exemplo, se eu anexar o EA quando o MACD estiver acima de 0 e o cruzamento tiver ocorrido 20 períodos atrás, o MACDP será 1 e a condição estará pronta para a entrada, embora tenha de fato expirado.
Se pudéssemos usar um operador WHILE em conjunto com um sinalizador verdadeiro/falso, isso seria muito mais fácil, mas com apenas IF, ainda não tenho certeza.
chris.marshall
7 anos atrás #141297
Da forma como está escrito acima, a contagem seria feita a partir da primeira vela após a cruz em qualquer direção.
Se houvesse 20 candles positivos, o MACDP chegaria a 20, mas seu teste RSI só seria válido enquanto o MACDP estivesse entre 1 e 10.
Você tem razão, mas isso não leva em conta o período entre o carregamento do EA e o primeiro cruzamento. Uma maneira fácil de contornar esse problema seria contar apenas os candles desde o último cruzamento acima ou abaixo e definir o valor inicial do MACDP/MACDN de acordo ao carregar o EA.
Tenho certeza de que há maneiras mais elegantes de contornar isso, mas ainda sou novo no programa.
tomas262
7 anos atrás #141311
Olá,
A maneira mais fácil de fazer isso é configurar um contador. Quando a condição MACD é válida, o contador está sendo ativado para fazer contador = contador + 1 (inicialmente ele está definido como 0)
Agora, você conta cada nova barra usando isso. Ao mesmo tempo em que o contador está ativo, você observa a condição do RSI, mas somente até que o contador seja menor que 10. Quando o contador for maior que 10, você o redefinirá para 0 e aguardará outro sinal MACD.
Se precisar de um projeto de exemplo para isso, entre em contato comigo
huangwh88
7 anos atrás #141325
Da forma como está escrito acima, a contagem seria feita a partir da primeira vela após a cruz em qualquer direção.
Se houvesse 20 candles positivos, o MACDP chegaria a 20, mas seu teste RSI só seria válido enquanto o MACDP estivesse entre 1 e 10.
Você tem razão, mas isso não leva em conta o período entre o carregamento do EA e o primeiro cruzamento. Uma maneira fácil de contornar esse problema seria contar apenas os candles desde o último cruzamento acima ou abaixo e definir o valor inicial do MACDP/MACDN de acordo ao carregar o EA.
Tenho certeza de que há maneiras mais elegantes de contornar isso, mas ainda sou novo no programa.
Sim, pensei sobre isso e, de fato, há uma solução fácil, semelhante à que você mencionou. Podemos definir o contador para iniciar somente após um cruzamento. Poderia haver alguma "perda de tempo" se um cruzamento ocorresse pouco antes de eu anexar o EA, mas isso não é um grande problema.
Obrigado por sua ajuda!
huangwh88
7 anos atrás #141326
Olá,
A maneira mais fácil de fazer isso é configurar um contador. Quando a condição MACD é válida, o contador está sendo ativado para fazer contador = contador + 1 (inicialmente ele está definido como 0)
Agora, você conta cada nova barra usando isso. Ao mesmo tempo em que o contador está ativo, você observa a condição do RSI, mas somente até que o contador seja menor que 10. Quando o contador for maior que 10, você o redefinirá para 0 e aguardará outro sinal MACD.
Se precisar de um projeto de exemplo para isso, entre em contato comigo
Oi, Tomás,
Por favor, envie-me o projeto de exemplo. Muito obrigado!
tomas262
7 anos atrás #141338
Olá,
Veja o exemplo em anexo. O EA aguarda o cruzamento do RSI acima do nível 20. Em seguida, ele aguarda 10 barras para que o MACD cruze o nível 0. Se não houver sinal do MACD, tudo começa novamente
Visualizando 7 respostas - 1 até 7 (de um total de 7)