Ordem Pendente como Take Profit parcial no modo Hedging é possível?

 

Oi pessoal, 

To abrindo ordem via CTrade.OrderOpen com BUY_LIMIT com 10 lotes com stop loss sem take profit dessa maneira:

CTrade t_buy;
t_buy.OrderOpen(_Symbol, ORDER_TYPE_BUY_LIMIT, 10, 0, p, sl, 0, ORDER_TIME_DAY);

Quando a ordem entra (e vira uma Position) eu queria colocar take profits parciais pra essa operacao apenas (lembrando que no modo hedging terão varias compras e vendas simultaneas e independentes). Li no manual que se vc informar no MqlTradeRequest o ticket da position, ele entende que é pra executar uma ordem em cima daquela position, e não abrir uma ordem nova. Então to tentando fazer isto desta maneira:

ResetLastError();
   MqlTick             tick;    SymbolInfoTick(_Symbol,tick);
   MqlTradeRequest     request; ZeroMemory(request);
   MqlTradeResult      result;  ZeroMemory(result);
   MqlTradeCheckResult check;   ZeroMemory(check);

   request.action       = TRADE_ACTION_DEAL;
   request.symbol       = _Symbol;
   request.volume       = 2;
   request.type         = ORDER_TYPE_SELL_LIMIT;
   request.price        = takeProfit; // variavel com o valor do take profit correto 
   request.type_filling = ORDER_FILLING_FOK;
   request.deviation    = 0;
   request.sl           = 0;
   request.tp           = 0;
   request.magic        = Magic_Number;
   request.position     = t_buy.RequestPosition(); 

t_buy.OrderSend(request, result);

Mas quando ele executa o código acima  a Position de Entrada já existe, ele da erro 10013 - Invalid Request:

2019.01.10 21:50:11.251 2018.09.03 09:45:40   CTrade::OrderSend: exchange sell limit 2.00 position #2 WIN$N [invalid request].

Alguem pode me ajudar? Existe alguma classe ou tutorial especifico pra lidar com ordens no modo hedging?


 

Olá colega,

poderia postar no idioma correto. Aqui é em português.

 
Rogerio Giannetti Torres:

Olá colega,

poderia postar no idioma correto. Aqui é em português.

Perdão amigo, não tinha reparado. Atualizei o post para ficar em portugues tudo. Obrigado pelo aviso.
 
omadruga:
Perdão amigo, não tinha reparado. Atualizei o post para ficar em portugues tudo. Obrigado pelo aviso.

Opa,

dá um   Print(t_buy.RequestPosition()) é bem capaz de estar com valor incorreto.

Eu acho mais fácil usar a função PositionClosePartial da classe trade.

 

Eu dei uma pesquisada aqui e realmente é uma limitação do Modo Hedge mesmo.

Nele voce pode apenas abrir novas ordens (a mercado ou pendentes), e todo nova ordem obrigatoriamente abre uma nova posicao, independente se ja existem outras posicoes abertas.

Fechar posições (total ou parcialmente) a mercado apenas ou via sl e tp definidos na abertura da posicão.

Então o que eu queria fazer não tem como, tenho que acompanhar a variacao de preco e fazer os take profits parciais a mercado.

Mas obrigado pela atenção Rogerio.

Razão: