trade.PosititionCLose informei somente o ticket da ordem e a mesma foi cancelada gerando um loss enorme na XP

 

Senhores,

tive um problema gravíssimo.

estava posicionado na venda com 1 contrato do ativo WINV25 as 09:30 hs do dia 05/09/2025 o EA identificou o volume excessivo e enviou um ordem utilizando a a função trade.PositionClose(ticket) informando o ticket da ordem a ser encerrada, porém, a ordem foi cancelada e robo ficou posicionado onde no candle de 5M teve um alta de 1.200 pontos.

abri um chamado na XP e a mesma alegou que eu enviei a ordem tipo tudo ou nada, mas eu nem tenho no positionclose como informar isso.

alguem pode dar uma luz de como evitar que isso ocorra novamente?

agredeço imensamte.

obrigado 

Carlito

 
Carlito Sena:


Boa noite.

Carlito a classe CTrade tem por padrão de preenchimento tipo ORDER_FILLING_FOK, você precisa alterar o padrão para ORDER_FILLING_RETURN, ou faça como mostrado abaixo no OnInit(), serve para FOREX e EXCHANGE. 


   int fill = (int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
   cTrade.SetTypeFilling((ENUM_ORDER_TYPE_FILLING)(fill == 0 ? 2 : fill - 1));


Uma pergunta, quantos contratos você pretendia fechar?

 
Rogerio Giannetti Torres #:

Boa noite.

Carlito a classe CTrade tem por padrão de preenchimento tipo ORDER_FILLING_FOK, você precisa alterar o padrão para ORDER_FILLING_RETURN, ou faça como mostrado abaixo no OnInit(), serve para FOREX e EXCHANGE. 



Uma pergunta, quantos contratos você pretendia fechar?

Rogerio,

Boa tarde

Em primeiro lugar agradeço imensamente o seu retorno.

na verdade estava operando apenas 1 contrato o mínimo.

adicionando esse comando que você informou na função OnInit() não preciso alterar absolutamente nada trade.buy, trade.sell ou trade.positionClose?

agradeço o retorno.

Carlito

 
Carlito Sena #:

Rogerio,

Boa tarde

Em primeiro lugar agradeço imensamente o seu retorno.

na verdade estava operando apenas 1 contrato o mínimo.

adicionando esse comando que você informou na função OnInit() não preciso alterar absolutamente nada trade.buy, trade.sell ou trade.positionClose?

agradeço o retorno.

Carlito

Não não precisa setar mais nada depois disso. Recomendo, além disso ligar os todos os logs e desativar o async.

   trade.SetTypeFilling(ORDER_FILLING_RETURN);
   trade.SetAsyncMode(false);
   trade.LogLevel(LOG_LEVEL_ALL);
 
Carlito Sena #:

Rogerio,

Boa tarde

Em primeiro lugar agradeço imensamente o seu retorno.

na verdade estava operando apenas 1 contrato o mínimo.

adicionando esse comando que você informou na função OnInit() não preciso alterar absolutamente nada trade.buy, trade.sell ou trade.positionClose?

agradeço o retorno.

Carlito

Já responderam, mas se o se EA não é só para Exchange então cabe a seguinte nota!

OnInit(){
   trade.SetTypeFilling(ORDER_FILLING_RETURN); // Em alguns brokers vai dar erro.
   trade.SetAsyncMode(false); // Redundante
...
}
 
Rogerio Giannetti Torres #Boa noite. Carlito a classe CTrade tem por padrão de preenchimento tipo ORDER_FILLING_FOK, você precisa alterar o padrão para ORDER_FILLING_RETURN, ou faça como mostrado abaixo no OnInit(), serve para FOREX e EXCHANGE. 
   int fill = (int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
   cTrade.SetTypeFilling((ENUM_ORDER_TYPE_FILLING)(fill == 0 ? 2 : fill - 1));

[ . . . ]

Bom dia, Rogerio! Eu estava verificando/testando a sua sugestão acima e identifiquei uma (possível) falha (no meu caso, negocio Forex)... Quando utilizo o comando:

Print(SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));

Ele me retorna o valor 3:


Ou seja, o símbolo, na minha corretora, permite os modos de preenchimento SYMBOL_FILLING_FOK (=1) e SYMBOL_FILLING_IOC (=2). Então, considerando a sua fórmula, eu acabaria por definir trade.SetTypeFilling também como ORDER_FILLING_RETURN (=2), que corresponde a "fill - 1", entendeu?

 
Vinicius Pereira De Oliveira #:

Bom dia, Rogerio! Eu estava verificando/testando a sua sugestão acima e identifiquei uma (possível) falha (no meu caso, negocio Forex)... Quando utilizo o comando:

Ele me retorna o valor 3:


Ou seja, o símbolo, na minha corretora, permite os modos de preenchimento SYMBOL_FILLING_FOK (=1) e SYMBOL_FILLING_IOC (=2). Então, considerando a sua fórmula, eu acabaria por definir trade.SetTypeFilling também como ORDER_FILLING_RETURN (=2), que corresponde a "fill - 1", entendeu?

Sim, estou careca de saber disso. Até hoje só deu problema em uma corretora que não aceitou ORDER_FILLING_RETURN <<<  Vc é o segundo caso, qual é o Broker?

 
Rogerio Giannetti Torres #:

Sim, estou careca de saber disso. Até hoje só deu problema em uma corretora que não aceitou ORDER_FILLING_RETURN <<<  Vc é o segundo caso, qual é o Broker?

bom dia a todos,

muito legal ver os comentários e dicas e sugestões dos amigos aqui.

como eu não opero FOREX, com os comandos que o Rogério sugeriu testei na XP e funcionou perfeitamente, realizei alguma operações como o EA e solicitei o LOG da XP e todas as operações foram consideradas a mercado e não mais "TUDO ou NADA", se um dia tiver condições de operar FOREX volto a pedir uma ajudinha.

Rogerio, muito obrigado pela sua dica, resolveu o meu problema aqui.

Carlito