Ajuda com a definição de Shift
4 respostas
eawNewbie
9 anos atrás #113451
Também não entendo muito bem o que você quer alcançar, mas você pode usar o parâmetro Shift.
Shift = 0 significa o valor na barra atual, Shift = 1 significa o valor do indicador na barra anterior e assim por diante.
Shift = 9 significa o valor do indicador 9ª barra para trás.
Citei isso em outro tópico. O tópico não era aplicável ao meu problema, mas esta postagem é, portanto, espero que não haja problema em citá-la
Entendo que shift = 0 significa a barra atual (por exemplo, barra em andamento), o que não está claro é "valor na barra atual"?
A última afirmação "Shift = 0 significa valor na barra atual" significa o preço/valor no momento exato do evento durante o período de tempo da barra atual?
Desde então, tenho procurado uma definição completa de deslocamento, tanto aqui quanto na MQL5
Deparei-me com esse problema ao tentar abrir uma posição depois que a barra atual é pelo menos 3 pips mais alta do que a alta da barra anterior.
Entretanto, esse código funcionará como desejado?
//Var
Deslocamento=3
//regra
E (High[0] > (High[1] + ConvertToRealPips(Offset))
obrigado
eawNewbie
9 anos atrás #129243
Como não consegui fazer com que a regra de condição acima funcionasse, decidi removê-la e, em vez disso, aplicar uma ordem "enter at stop" usando este código
// Ação
sqOpenOrder("NULL", OP_BUYSTOP, getOrderSize(MagicLong, OP_BUYSTOP ), getOrderPrice(MagicLong), "", MagicLong, "OffsetBuy");
Infelizmente, isso também falha, então estou fazendo algo errado... ?
Marca Fric
9 anos atrás #129245
Sim, ao usar Shift = 0 em High, Low ou indicadores, você obterá seus valores no momento especificado quando a função foi chamada.
Quando eu testar sua condição
E (High[0] > (High[1] + ConvertToRealPips(Offset))
ele funciona corretamente, o que não funciona para você? Ele abre em horários diferentes do esperado?
Ou ele não abre negociações de forma alguma? Em seguida, verifique o registro de erros para ver se não há nenhum erro; erros de tamanho de negociação são bastante comuns.
Marcar
EstratégiaQuant arquiteto
eawNewbie
9 anos atrás #129287
Obrigado por sua confirmação sobre o Shift.
Quando uso a regra acima, a condição não parece ser atendida, pois todas as ações após o "then" não são analisadas. Não consigo encontrar nenhuma pista sobre o motivo ao ler os registros, mesmo com verbose = 2, como se não houvesse erro, apenas a condição não retorna verdadeiro.
Removi a condição e as negociações são abertas como esperado. A condição filtra todas as oportunidades durante o período de backtesting; terei de verificar se a condição realmente existe no período de teste. Sem a condição, obtenho literalmente centenas de negociações, mas com a condição resulta em zero negociações.
Se você disser que não há problema com a estrutura da condição, verificarei manualmente se a condição realmente existe. Talvez eu tente alterar "é maior que" para "é menor que"
O que é mais rápido: verificar a condição na instrução If ou verificar a condição alterando o comando open at market para open at stop e executar o teste se o stop for atingido na instrução "then"? Descobri que, ao adicionar o comando dentro da construção "then", a ação não é executada, mas a próxima ação é executada.
eawNewbie
9 anos atrás #129288
Visualizando 4 respostas - 1 até 4 (de um total de 4)