Fechamento posição conta EDGE

 

Ola, boa noite!

Senhores, preciso de um norte, emitir ordens type ORDER_TYPE_BUY, ORDER_TYPE_SELL, etc...tranquilo, mais já a do tipo ORDER_TYPE_CLOSE_BY que estou com dificuldade como segue abaixo.

Acho que com o aumento de desenvolvedores para 'Hedging' provavelmente essa vai ser uma dificuldade comum aos iniciantes como eu.

Considerando a posição do tipo EDGE  (imagem em anexo):



Desejo fechar a posição, uma das configurações que estou tentando usar:

MqlTradeRequest{  
action:TRADE_ACTION_CLOSE_BY 
magic:2501801 
order:0 
symbol:"WIN@" 
volume:0.0 
price:0.0 
stoplimit:0.0 
sl:0.0 
tp:0.0 
deviation:100 
type:ORDER_TYPE_CLOSE_BY 
type_filling:ORDER_FILLING_FOK 
type_time:ORDER_TIME_GTC 
position = 18 
position_by = 18}

Os valores zerados acima na realidade não foram informados, mais na pesquisa da ordem aparece como zero.

Retorna erro "invalid request".

2017.05.30 18:04:17.440 2017.04.19 17:25:00   failed close position #18 sell 1.00 WIN@ by position #18 [Invalid request]

2017.05.30 18:04:17.440 2017.04.19 17:25:00   Erro enviar ordem: Invalid request


NOTA: para sair da operação estou usando provisoriamente uma alternativa: alterar o SL ou TP com o  preço do tickt.


Tem que ser preenchido mais alguma opção para o envio da ordem, ou tem opção a mais desnecessária? 

Grato antecipadamente,

Daniel

 

Resolvido! Vou compartilhar aqui talvez ajude alguém na sequencia:

Primeiramente foi mérito e atenção do Sr. Márcio Pulcinelli em um grupo do face.

Então vamos la, pelo que entendi:


1) Usando OrderSend:

1.1) A opção action:TRADE_ACTION_CLOSE_BY deve ser usada quando se deseja fechar a posição quando se tem 2 posições (ordens distintas) opostas já abertas.

1.2) Se não tiver as 2 ordens, deveria abrir a oposta e em um segundo momento fazer a ordem dizendo que uma fecha a outra.

1.3) Não cheguei a por em prática isso, não sei se procede, mais é o entendimento que fiquei.


2) Usando CTrade

2.1) Simples e funcionou:

bool  PositionClose( 
   const ulong   ticket,                  //  bilhete da posição 
   ulong         deviation=ULONG_MAX      // desvio 
   )


Atenciosamente,

Daniel

 
Perfeito !! Resolveu meu problema!!
 

@Daniel Andrejczuk

Boa tarde. Estou passando pela mesma dificuldade que você citou. A minha dúvida é se a função PositionClose (ou ainda PositionCloseBy, que relaciona 2 posições) envia uma ordem a mercado para seus respectivos encerramentos? Ou esta função faz uma compensação das posições internaente, zerando-as sem a necessidade de enviar novas ordens?

Grato.