Erros típicos e como lidar com eles quando se lida com o ambiente comercial - página 4

 
Artyom Trishkin:

E se o pedido for cancelado pelo servidor?

No próximo tique, a EA verá que não há posições, e tudo ficará bem. Mas não haverá dobras.


Artyom Trishkin:

Acho que ao contabilizar as ordens do mercado, devemos devolver WRONG_VALUE, por exemplo - as posições não podem ser inferiores a zero. Isto será um sinal de que há uma ordem de mercado não gravada. Mas não acrescente o número de posições.

Isto depende da lógica do TS específico.

No caso mais básico em que uma negociação no mercado é permitida, qualquer valor que não seja 0 deve ser devolvido. 1 também o fará.

 
Andrey Khatimlianskii:

No próximo tique, o assessor verá que não há posições e tudo estará bem. Mas não haverá duplicação.


Depende da lógica do TS particular.

No caso mais básico, quando uma negociação no mercado é permitida, basta devolver qualquer valor que não seja 0, 1 será suficiente.

Ele (o Conselheiro Especialista) já receberá, neste tick, um valor maior do que a quantidade de ordens de mercado. Ou seja, na verdade são dois, mas a função resultará em 3.

Acho que este não é um comportamento normal. Devemos sempre descansar um número válido, sem posições virtuais, que pode acabar não estando lá.

Afinal, existem estratégias que requerem cálculos precisos para um número preciso e definido de posições, volumes, níveis agregados de parada/parada, etc...

 
Andrey Khatimlianskii:

Depende da lógica do TS particular.

No caso mais primitivo, quando um comércio é permitido no mercado, basta devolver qualquer valor que não seja 0, 1 também o fará.

Andrew, uma função que é solicitada por quantidade ou volume ou qualquer outro dado quantitativo é obrigado a dar seu valor exato.

Não é como se estivéssemos brincando com brinquedos :)

 
Artyom Trishkin:

Andrew, uma função que é solicitada por quantidade ou volume ou qualquer outro dado quantitativo é obrigado a dar seu valor exato.

Você está olhando para um exemplo específico de um EA com uma profissão no mercado, e ele está escrito incorretamente 99% do tempo. Você ainda precisa chegar aos complexos.

Se você realmente quiser, renomeie a função para IsPosition e torne-a booleana: return(Res>0);

 
Andrey Khatimlianskii:

Um exemplo específico de uma EA com um comércio no mercado é considerado e está escrito errado 99% do tempo. Você ainda precisa chegar aos complexos.

Se você realmente quiser, renomeie a função para IsPosition e torne-a booleana: return(Res>0);

Bem, não... é um exemplo de alguma função comum de biblioteca "para todas as ocasiões"...

A propósito, interessante proposta de torná-la uma função booleana - seguindo o exemplo de muitas funções padrão de mql5 - com retorno do resultado da execução como valor de bool, e número de posições passando o valor para uma variável por referência.

 
Artyom Trishkin:

Bem não..., um exemplo de uma função genérica de biblioteca "para todas as ocasiões" está sendo considerado...

Sim, universal.

 
fxsaber:

Sim, universal.

A solução que você propôs contém uma imprecisão no cancelamento do pedido pelo servidor. Eu gostaria de discutir opções para lidar com esta imprecisão. Sem eles, a proposta é crua.
 
Artyom Trishkin:
A solução sugerida por você contém uma imprecisão no cancelamento do pedido pelo servidor. Eu gostaria de discutir como lidar com esta imprecisão. Sem eles, a oferta é bruta.

Vamos nos afastar do MT5 em direção ao MT4. Uma EA é uma empresa comercial. De repente, o corretor comete um erro técnico (não você) e coloca uma posição em sua conta, que passa com sucesso o filtro do Expert Advisor amigo ou inimigo - Magic, Symbol, etc. Segundos depois, o corretor corrige seu erro - elimina (não fecha sequer) sua posição de sua conta.

Seu TS irá quebrar?


Lembro-me de uma situação em que um grande corretor que ama Expert Advisors fez um ótimo trabalho. Por "erro", ele depositou uma quantia muito grande na conta. Assim, o Expert Advisor abriu uma posição com um lote muito grande. Então o corretor corrigiu o "erro" - retirou o dinheiro creditado incorretamente. A conta foi encerrada utilizando um stop loss.

 
fxsaber:

Vamos nos afastar do MT5 em direção ao MT4. Uma EA é um negócio. De repente, o corretor comete um erro técnico (não você) e coloca uma posição em sua conta, que passa com sucesso o filtro do Expert Advisor amigo ou inimigo - Magic, Symbol, etc. Segundos depois, o corretor corrige seu erro - elimina (não fecha sequer) sua posição de sua conta.

Seu TS irá quebrar?


Lembro-me de uma situação em que um grande corretor que ama Expert Advisors fez um ótimo trabalho. Por "erro", ele depositou uma quantia muito grande na conta. Assim, o Expert Advisor abriu uma posição com um lote muito grande. Então o corretor corrigiu o "erro" - retirou o dinheiro creditado incorretamente. A conta foi fechada utilizando uma parada.

Não estamos falando do TS.
Uma função que DEVE devolver o que está fisicamente na conta.
Todo o resto "imagine" - deve estar em equilíbrio com o desenvolvedor de TS. Mas ele deve ter uma função simples em seu arsenal que não mente, e ainda dá a capacidade de saber sobre o estado incerto do ambiente.
 

Artyom Trishkin:
Мы говорим не о ТС.

No exemplo, estamos falando sobre a situação específica da TC descrita. E aí a pergunta fica sem resposta.

Uma função que DEVE devolver o que está fisicamente na conta.
Todos os outros "imagine" deveriam estar no balanço do desenvolvedor do TC. Mas ele deve ter uma função simples em seu arsenal, que não mente, e ao mesmo tempo dá a possibilidade de conhecer o estado indefinido do ambiente.

A função retorna o que está fisicamente na conta. E repousa exatamente tanto quanto repousa no MT4. Isto é, tudo é normal.