Realização Parcial

BRUNO CONTE DE FREITAS
44

Bom dia pessoal, estou quebrando a cabeça para conseguir fazer realização parcial, porém nao esta dando certo. Abaixo segue as minha condições de entrada, onde faço uma entrada a mercado. Caso o preço vir contra eu aumento a posição até 5x. Até ai esta Ok. O problema esta que não consigo achar uma solução para por a saída parcial dos aumentos de posições. Por exemplo. Compro um lote a mercado com um gain de 100 pontos. O preço vem contra e compro mais 2 lotes na segunda entrada. Porém quero fazer uma parcial desses 2 lotes com 50 pontos de gain, deixando uma ordem limit. Caso não atingir o gain denovo, e o preço vir contra,faria mais um aumento, efetuando a terceira entrada com mais 4 contratos. Quanto essa terceira compra for feita, automaticamente queria que cancelasse a parcial pendente da segunda entrada e abrisse uma parcial a limit para terceira entrada com os 4 contratos para um gain de 50 pontos. Obrigado


//+------------------------------------------------------------------+
// COMPRA/VENDA A MERCADO                                            |
//+------------------------------------------------------------------+
   if(!posicaoAberta && !ordemPendente && ultimoTick.last>mmHandleBuffer[0] + variacaoMedia && HoraNegociacao() && MetaDiaria())
      {
         VendaMercado();
      }
   else
      if(!posicaoAberta && !ordemPendente && ultimoTick.last<mmHandleBuffer[0] - variacaoMedia && HoraNegociacao()&& MetaDiaria())
         {
            CompraMercado();
         }
         
//+------------------------------------------------------------------+
// COMPRA/VENDA SEGUNDA ENTRADA                                      |
//+------------------------------------------------------------------+
   if(posicaoAberta && !ordemPendente && PositionGetInteger(POSITION_MAGIC) == magicNum && HoraNegociacao() && apCheck)
     {
        if(PositionGetDouble(POSITION_VOLUME) == lote && lote2>0 && variacaoMedia2>0)    
          {
            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && !ordemAberta)
              {
                 ordemAberta = true;
                 CompraSegEntrada();
              }                                
            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && !ordemAberta)
              {
                 ordemAberta = true;
                 VendaSegEntrada();
              }            
        else
            {
               ordemAberta = false;
            }
          }
//+------------------------------------------------------------------+
// COMPRA/VENDA TERCEIRA ENTRADA                                      |
//+------------------------------------------------------------------+
        if(PositionGetDouble(POSITION_VOLUME) == lote + lote2 && lote3>0 && variacaoMedia3>0)
          {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && !ordemAberta)
              {
                 ordemAberta = true;
                 CompraTecEntrada();
              }
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && !ordemAberta)
              {
                 ordemAberta = true;
                 VendaTecEntrada();
              }
        else
            {
               ordemAberta = false;
            }   
          }
//+------------------------------------------------------------------+
// COMPRA/VENDA QUARTA ENTRADA                                       |
//+------------------------------------------------------------------+
        if(PositionGetDouble(POSITION_VOLUME) == lote + lote2 + lote3 && lote4>0 && variacaoMedia4>0)  
          { 
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && !ordemAberta)
              {
                 ordemAberta = true;
                 CompraQuaEntrada();
              }
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && !ordemAberta)
              {
                 ordemAberta = true;
                 VendaQuaEntrada();
              }
        else
            {
               ordemAberta = false;
            }   
          }
//+------------------------------------------------------------------+
// COMPRA/VENDA QUINTA ENTRADA                                       |
//+------------------------------------------------------------------+
        if(PositionGetDouble(POSITION_VOLUME) == lote + lote2 + lote3 + lote4 && lote5>0 && variacaoMedia5>0) 
          {
             if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && !ordemAberta)
               {
                  ordemAberta = true;
                  CompraQuiEntrada();
               }
        if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && !ordemAberta)
          {
             ordemAberta = true;
             VendaQuiEntrada();
          }
        else
            {
               ordemAberta = false;
            }
          }
     }
   
ALESSANDRO VIEIRA DA CRUZ
121
BRUNO CONTE DE FREITAS:
Alguém consegue me ajudar?

Cara já resolveu ?

Se não, use isso:

https://www.mql5.com/pt/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclosepartial

Documentação sobre MQL5: Biblioteca Padrão / Classes de negociação / CTrade / PositionClosePartial
Documentação sobre MQL5: Biblioteca Padrão / Classes de negociação / CTrade / PositionClosePartial
  • www.mql5.com
[in] Nome do instrumento de negociação, segundo o qual deverá ser fechada parte da posição. Se, para o fechamento parcial da posição, for especificado o símbolo (sem bilhete), será selecionada a primeira posição encontrado nesse símbolo (identificador do Expert Advisor). Por conseguinte, em alguns casos, é melhor usar a varante...
Thiago Duarte
163479
Thiago Duarte  
BRUNO CONTE DE FREITAS:
Alguém consegue me ajudar?

Essa biblioteca pode te ajudar: https://www.mql5.com/pt/code/25893

Symbol Trade Made Simple
Symbol Trade Made Simple
  • www.mql5.com
This library shows useful informations and do some functions to a symbol. Version 1.13, updated 27/Mar/2020. SYMBOL: SymbolOpenPositionsTotal(str symbol) - return the number of opened positions. SymbolOpenPositionsVolume(str symbol) - return the total volume of opened positions. SymbolPendingOrdersTotal(str symbol) - return the number of...
Rodrigo Pagani
18
Rodrigo Pagani  

BRUNO CONTE DE FREITAS:

Bom dia pessoal, estou quebrando a cabeça para conseguir fazer realização parcial, porém nao esta dando certo. Abaixo segue as minha condições de entrada, onde faço uma entrada a mercado. Caso o preço vir contra eu aumento a posição até 5x. Até ai esta Ok. O problema esta que não consigo achar uma solução para por a saída parcial dos aumentos de posições. Por exemplo. Compro um lote a mercado com um gain de 100 pontos. O preço vem contra e compro mais 2 lotes na segunda entrada. Porém quero fazer uma parcial desses 2 lotes com 50 pontos de gain, deixando uma ordem limit. Caso não atingir o gain denovo, e o preço vir contra,faria mais um aumento, efetuando a terceira entrada com mais 4 contratos. Quanto essa terceira compra for feita, automaticamente queria que cancelasse a parcial pendente da segunda entrada e abrisse uma parcial a limit para terceira entrada com os 4 contratos para um gain de 50 pontos. Obrigado



Boa tarde Bruno,
Estou tentando resolver este mesmo problema, você conseguiu uma solução?
Caso vc conseguiu, poderia me ajudar?

Desde já, Grato

Rodrigo Pagani