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

 
Xaoss1990:

Cavalheiros profissionais, preciso novamente de sua ajuda!

Abaixo está um trecho de código responsável pelo fechamento de negócios, mas o problema é que quando as ordens pendentes não são executadas, não consigo entender por que. Mas quando eu preciso fechar uma ordem pendente que já foi executada, tudo vai corretamente e se a ordem não foi executada, então ela apenas fica pendurada até ser executada...

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();

if (OrderTotal() == 1 && Magic == 111 && OrderType( ) == 0) {
if (H1_BUY_5 == 0 ||| H1_BUY_1 == 0) {
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrderTotal() == 1) OrderDelete(orderticket, Brown);
}

}



Esta é a condição que seleciona apenas os pedidos de compra,

se (OrderTotal() == 1 && Magic == 111 && OrderType( ) == 0)

portanto, não há como remover a ordem pendente

 
Roger:


Provavelmente porque você calcula o lote primeiro e depois

Obrigado, mudou o cálculo do lote, mas ainda não funciona.
 
Sancho77:
Obrigado, mudou o cálculo do lote, mas ainda não funciona.


Como não funciona, o que diz nos troncos?

Verifique os valores que o np assume, aqui

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
 
Não há mensagens de erro no diário de bordo. Você pode olhar o código EA inteiro? Deve fechar 1/3 do lote se o stoploss já tiver sido movido para quebrar o equilíbrio por arrasto.
Arquivos anexados:
 
Sancho77:
Não há mensagens de erro no diário de bordo. Você pode ver o código EA completo? Deve fechar 1/3 do lote se o stoploss já tiver sido movido para quebrar o equilíbrio por arrasto.

Oooooooo como tudo está bagunçado. Em geral, tudo está errado, é mais fácil de jogar fora e escrever um novo. Os parâmetros são definidos incorretamente, as funções são chamadas incorretamente, um monte de cálculos extras desnecessários. Bom para um tutorial sobre como não escrever código.
 
Roger:

Em suma, está tudo errado, é mais fácil jogá-lo fora e escrever um novo. Os parâmetros são definidos incorretamente, as funções são chamadas incorretamente, um monte de cálculos desnecessários. Será bom para um tutorial sobre como não escrever código.
Ok, vamos começar do início)
 
Sancho77:
...Deve fechar 1/3 do lote se uma parada de perda já movida para romper o equilíbrio pela rede de arrasto for acionada.
Estou olhando para tudo isso e pensando comigo mesmo - por que assumir tais tarefas se você não tem certeza do básico? Este tipo de auto-estudo faz mais bem do que mal. A centelha do pensamento se afoga em uma pilha de erros.
 
granit77:
Eu olho para tudo isso e penso para mim mesmo - por que assumir tais tarefas se você não tem certeza do básico? Este tipo de auto-estudo faz mais bem do que mal. A centelha do pensamento se afoga em uma pilha de erros.

Provavelmente significava mais mal do que bem.
 
Sim, uma gralha.
 

Por favor, nos aconselhem, senhores!

Imagine a situação: uma parada é acionada, devido ao acionamento da N-ésima condição. Mas após um par de castiçais, a condição N-ésima caiu. Com a ajuda de qual função você pode abrir o negócio novamente depois que a N-ésima condição cair. Ou seja, você precisa determinar que isso acionou uma parada algumas barras de volta por causa da N-ésima condição, e desde que a N-ésima condição caiu, entre no comércio novamente!

Razão: