O que significa a entrada do diário de bordo - página 4

 
E eu ainda não verifiquei OrderModify :(
E ordens pendentes:((
 
Portanto, já faz bastante tempo, alguns dias. Durante este tempo, vários especialistas conseguiram trabalhar. Aqui estão os logs (o código que gera estes logs está acima). Ainda à espera de pelo menos alguma resposta dos desenvolvedores. Pelo menos no nível de "nós reconhecemos o problema, vamos resolvê-lo".

Log 1:
Tentando comprar, tentativa 0 falhou, erro 6
Tentando comprar, tentativa 1 falhou, erro 129
Tentando comprar, tentativa 2 falhou, erro 129
Tentando comprar, tentativa 3 falhou, erro 129
Tentando comprar, tentativa 4 falhou, erro 129
Erro de compra em ziguezague: 4050
2.28000000, 0.02700000, 0.00000000
Tentando comprar, tentativa 0 falhou, erro 6
Tentando comprar, tente 1 com sucessol

A ordem foi aberta na 7ª tentativa. Várias mensagens de erro foram recebidas pelo caminho e não tinham nada a ver com a realidade.

Log 2.
7.9.2005 11:0:15, Sinal: sell7.9.2005 11:0:15 Tentando vender, tentativa 0.
Pergunte: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
falhou, erro 6
7.9.2005 11:0:15 Tentando vender, tentativa 1.
Pergunte: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
sucessol

Na segunda tentativa. O erro número seis foi o assunto de um ramo inteiro, mais de cem postos. Seguindo os conselhos dos desenvolvedores, Rosh e Composter, a freqüência de erro foi reduzida de "de vez em quando" para "cerca de uma vez em cinco". Mas ainda está lá.

Log 3.
Tentativa de fechar posição longa, bilhete: 1784257
6.9.2005 12:0:13 PM Ordem com este bilhete ainda presente, tentando novamente
6.9.2005 12:0:13 Ordem com este bilhete ainda presente, tentando novamente
6.9.2005 12:0:13 Ordem com este bilhete ainda presente, tentando novamente
6.9.2005 12:0:13 Ordem com este bilhete ainda presente, tentando novamente
6.9.2005 12:0:13 Ordem com este bilhete ainda presente, tentando novamente

Cinco falhas, NÃO houve código de erro. O programa pensou que essa posição estava fechada. Eu estava pegando o bilhete no circuito, se não o fizesse, o problema não seria detectado.

E assim por diante.
 
Faça-o assim
<br / translate="no"> void CloseBuy(string strExpertName)
{
int nTicket = OrderTicket();
SaveComment ("rtAttempting to close long position, ticket: " + nTicket);

int nResultado = OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);

Sleep(10000);

if(nResultado == -1)
{
int nError = GetLastError();
Alerta(strExpertName + ", erro: " + nError);
}

}


Tive que usar uma citação para tornar o texto em negrito.
 
Se isto for feito, é provável que mascara o erro. E o objetivo é ajudar os desenvolvedores a encontrá-lo, de modo que tudo funcione sem laços.

O objetivo do Sono é apenas esperar até que a condição que causou a falha tenha desaparecido (você sabe, os pings começam a passar). Porque - levando em conta que as operações comerciais "tomam" o controle e não o deixam ir até que eles voltem, então, se houver um erro, ele deve aparecer imediatamente. Se não - é um bug.

A única exceção possível é a verificação do meu laço para um bilhete de uma posição recém-encerrada. Mas mesmo aqui podemos argumentar como o sistema deveria se comportar de forma ideal.

Novamente, o problema não é apenas que os erros RETORNADOS, mas também que os códigos de erro são retirados do teto, e às vezes não há nenhum código - o código de sucesso da operação é devolvido.

Se eu não entender alguma coisa, por favor explique.
 
Explicação. Sob os termos de um Consultor Especialista, se o preço Ask atual exceder a perda de uma ordem de venda pendente, uma série de ações são executadas:
1. Um SMS é enviado informando a intenção de remover tal ordem.
2. Uma tentativa de cancelar o pedido é feita
3. O resultado da função OrderDelete() é analisado e se for negativo (a ordem não foi removida), então
4. Ele envia um SMS confirmando a falha.

Ontem recebemos 2 SMS, tudo de acordo com as regras, mas a ordem foi cancelada no mesmo segundo, de acordo com os logs.
Assim, a EA estava tentando obter o resultado da operação de cancelamento do pedido uma fração de segundo antes de obter o resultado. É como na piada sobre os chineses que plantaram batatas e depois as desenterraram no dia seguinte. Quando perguntados "Está amadurecendo tão rápido", eles diriam "Não, mas está mordendo" :)
 
Entendido, MAS:
1. Eu fiz todo este alvoroço sobre as encomendas reais. E se eles se comportam assim, isso precisa ser consertado.
2) A idéia é que a MT EAs deve ser capaz de negociar SEM um ciclo atrasado. É assim que deve ser.
Vou colocar um atraso, mas, como se costuma dizer, "sem prazer" :)
 
Eu tenho pensado comigo mesmo. Se eu sugerir o uso de uma pausa entre a operação de modificação do pedido e a verificação dos resultados desta operação, isso significa que estou assumindo o funcionamento assíncrono da EA. Isso significa que enviamos um pedido ao servidor tentando modificar o pedido e então, sem esperar pela resposta, o Expert Advisor continua seu trabalho de acordo com o algoritmo. Por padrão, uma resposta negativa é dada ao Expert Advisor até que ele receba uma resposta do servidor. Se a resposta for recebida, a resposta é real, mas se não for, a resposta é virtual.

Eu mesmo não acredito, os desenvolvedores podem explicar o quanto eu estou errado?
 
Chegou-se a um consenso. Mas eu fiz uma pausa - só para ter certeza. Pelo menos, antes de verificar a disponibilidade do ticket de um pedido recém fechado, o banco de dados no servidor pode ser acessado, devemos dar-lhe tempo para atualizá-lo. Embora seja errado :)

Um pouco embaraçoso é o fato de que para 37 postos neste tópico existe apenas um dos desenvolvedores...
 
É um pouco desconcertante que haja apenas um posto de desenvolvedor em 37 nesta linha...

por que interferir em uma discussão já produtiva
 
por que interferir em uma discussão já produtiva

e aqui estão os produtos =)

Fiz alguns testes. Um consultor especializado abre e fecha uma posição (alternadamente compra e venda). Pausa mínima entre todas as negociações - 10 seg.

Tempo de teste (pela Alpari): 02:00 - 09:30 (ou seja, 7,5 horas)
Tentativas de OrderSendência: 996
Bem sucedido*: 888
Erros**: 108

* - Por tentativa de "sucesso" quero dizer o seguinte: ordemEnviar bilhete devolvido no., GetLastError devolvido 0, posição aberta selecionada com sucesso ordemselecione.
** - Todos os erros #148 "o contexto comercial está ocupado" - era isso que Slava estava perguntando no próximo tópico - "e se desativarmos o cheque isTradeAllowed?". Os erros começaram às 07:16:46 e ainda estão se acumulando)




OrderClose tentativas: 890 Sucesso*: 736
Erros**: 154

* - por tentativa de fechamento "bem sucedida" quero dizer o seguinte: fechamento de ordem retornado verdadeiro, GetLastError retornado 0, posição fechada selecionada com sucesso seleciona ordem no mod_history.
** - 152 erro #1 "nenhum erro", um #6 e um #138(requotes)


A situação que foi apanhada não aconteceu. Isto é, todas as posições fechadas foram de fato fechadas.
Razão: