Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 250

 
Crosswert:


Ha ha... Aqui está uma mentira...

O problema acabou se revelando na função OpenOrders(). Esqueci completamente de remover o controle da abertura do pedido em caso de quebra de uma vela (barra):

if (Volume[0] > 1) return;

Então, no que a TF, a Expert Advisor, estava testando, estava abrindo ordens naquelas atas...

Estúpido em geral, em uma difícil...

Obrigado...

Acontece)))) Feliz por ter sido de ajuda))))
 
Crosswert:


if (Volume[0] > 1) return;


Não utilize este tipo de verificação para detectar a abertura de um novo bar, não funcionará bem na conta, apenas no testador. Você precisa verificar por tempo de barra ou pelo número de barras no gráfico

 
Crosswert:


Ha ha... Aqui está uma mentira...

O problema acabou se revelando na função OpenOrders(). Esqueci completamente de remover o controle da abertura do pedido em caso de quebra de uma vela (barra):

if (Volume[0] > 1) return;

Então, no que a TF, a Expert Advisor, estava testando, estava abrindo ordens naquelas atas...

Estúpido em geral, em uma difícil...

Obrigado...

Melhor assim(https://www.mql5.com/ru/forum/138609/page482):
bool CheckOpenM15() // Функция возвращает истину при появлении нового бара на М15 (Использовать только в советние)
{
   static int PrevTime=0;
   if (PrevTime==iTime(NULL, PERIOD_M15,0)) return(false);
   PrevTime=iTime(NULL, PERIOD_M15,0);
   return(true);
}
 
Melhor ainda, passe o nome do TF desejado para a função
 
artmedia70:
Melhor ainda, passe o nome do TF desejado para a função

Este é apenas um exemplo.
 


Sabe, com / PrevTime / Eu tentei algo uma vez, mas nunca funcionou. Acho que não consegui colocar esse código no lugar certo.

Com / se (Volume[0] > 1) retornar; / tudo é muito mais simples. Aqui, como eu acredito, tudo funciona para a TF selecionada. Não sei se funciona em uma demonstração, mas não notei erros, bugs e outros detalhes ao abrir pedidos.

Mas há muito tempo eu não uso o controle de abertura de pedidos em um novo bar. Conseguimos construir a função de controle de posições abertas. Junto com a abertura de ordens em um determinado momento, não precisamos de controle de barras como tal.

O código é apenas antigo. Aparentemente, esqueci-me das limitações e inseri-o sem rodeios e continuei a usá-lo...

 

Você pode me dizer como obter o valor do preço dos níveis de Fibonacci?

De acordo com a condição, uma vez que o preço tenha cruzado os níveis de Fibonacci especificados, um comércio de compra ou venda é aberto.

Um objeto Fibonacci é desenhado por um Expert Advisor usando a função de Kim: https://www.mql5.com/ru/forum/107476/page107#606564

É desenhado sem nenhum problema. Mas então como sabemos o valor do preço do nível especificado?

Esta função parece não funcionar:

OBJPROP_FIRSTLEVEL+n 210+n int Define o valor do nível do objeto Fibonacci com índice, n. O índice n pode ser de 0 a (número de níveis -1), mas não pode exceder 31


Isso é possível? Ou devemos calcular os preços para cada nível separadamente a partir de OBJPROP_PRICE1 e OBJPROP_PRICE2?

Isto é um absurdo. Fiquei acordada metade da noite rachando meus miolos. É claro que a noite provavelmente não é o melhor momento para procurar soluções.

Ajude por favor, boa gente!

 
Lazarechek:

Você pode me dizer como obter o valor do preço dos níveis de Fibonacci?

De acordo com a condição, uma vez que o preço tenha ultrapassado os níveis especificados de Fibonacci, uma compra ou venda é aberta.

Um objeto Fibonacci é desenhado por um Expert Advisor usando a função de Kim: https://www.mql5.com/ru/forum/107476/page107#606564

É desenhado sem nenhum problema. Mas então como sabemos o valor do preço do nível especificado?

Esta função não parece caber:

OBJPROP_FIRSTLEVEL+n 210+n int Define o valor do nível do objeto Fibonacci com índice, n. O índice n pode ser de 0 a (número de níveis -1), mas não pode exceder 31


Isso é possível? Ou devemos calcular os preços para cada nível separadamente a partir de OBJPROP_PRICE1 e OBJPROP_PRICE2?

Isto é um absurdo. Fiquei acordada metade da noite rachando meus miolos. É claro que a noite provavelmente não é o melhor momento para procurar soluções.

Socorro, boa gente!

Já havia uma pergunta semelhante:

Quero obter o preço a um nível de Fibo de 23,6%.
double flevel236 = ObjectGetDouble(0, "Fibo",OBJPROP_LEVELVALUE,1); Este dá 0,236, ou seja, não preço, mas nível.
Você pode me dizer como obter o preço do nível. Obrigado!

E também já foi respondido:

Apenas duas operações aritméticas. Multiplicação (0,236 multiplicado pela diferença entre os preços do nível zero e do nível um) e depois adição (o resultado da multiplicação é adicionado ao preço do nível zero).

 
Eu escrevi um indicador, corri-o, tudo congelou e a mensagem - aguarde a atualização (sem ciclos infinitos). Eu reinício o mt o resultado é o mesmo. É claro que posso apagar estes indicadores antes de lançá-los e depois inseri-los, mas toda vez que resolver o problema desta forma não é uma opção. Talvez haja uma chave para começar da linha de comando para iniciar na interface padrão ?
 
artmedia70:

Uma pergunta semelhante já foi feita:

Quero obter o preço a nível de Fibo de 23,6%.
double flevel236 = ObjectGetDouble(0, "Fibo",OBJPROP_LEVELVALUE,1); Este dá 0,236, ou seja, não o preço, mas o nível.
Você pode me dizer como obter o preço do nível. Obrigado!

E a resposta também foi dada:

Apenas duas operações aritméticas. Multiplicação (0,236 multiplicado pela diferença entre os preços do nível zero e do nível um) e depois adição (o resultado da multiplicação é adicionado ao preço do nível zero).




Muito obrigado!) Foi o que eu pensei em princípio)


"0,236 multiplicado pela diferença entre os preços zero e de primeiro nível" - só que provavelmente seria mais correto dizer "entre os preços zero e de último nível".