Resposta

definição do período de validade das condições IF

7 respostas

huangwh88

Customer, bbp_participant, community, 113 replies.

Perfil da visita

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.

0

chris.marshall

Assinante, bbp_participante, comunidade, 4 respostas.

Perfil da visita

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á

0

huangwh88

Customer, bbp_participant, community, 113 replies.

Perfil da visita

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çã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á

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.

0

chris.marshall

Assinante, bbp_participante, comunidade, 4 respostas.

Perfil da visita

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.

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

huangwh88

Customer, bbp_participant, community, 113 replies.

Perfil da visita

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!

0

huangwh88

Customer, bbp_participant, community, 113 replies.

Perfil da visita

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!

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

Visualizando 7 respostas - 1 até 7 (de um total de 7)