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

Para adicionar comentários, por favor Faça o login ou registrar
omadruga
15
omadruga  

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?


Rogerio Giannetti Torres
2037
Rogerio Giannetti Torres  

Olá colega,

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

omadruga
15
omadruga  
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.
Rogerio Giannetti Torres
2037
Rogerio Giannetti Torres  
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.

omadruga
15
omadruga  

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.

Para adicionar comentários, por favor Faça o login ou registrar