Realização Parcial

 

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;
            }
          }
     }
   
 
Alguém consegue me ajudar?
 
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...
 
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...
 

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

 

Bom Dia pessoal

Gostaria de saber se no Mt5, na hora que faço as parciais ele consegue deslocar o preço médio, igual a plataforma do profitchart faz.

alguém poderia me ajudar?

 
ads2911 #:

Bom Dia pessoal

Gostaria de saber se no Mt5, na hora que faço as parciais ele consegue deslocar o preço médio, igual a plataforma do profitchart faz.

alguém poderia me ajudar?

Olá

Sério mesmo? O PROFIT faz isso? Como ele calcula o lucro/prejuízo corretamente se o preço médio é alterado?

 
ads2911 #:

Bom Dia pessoal

Gostaria de saber se no Mt5, na hora que faço as parciais ele consegue deslocar o preço médio, igual a plataforma do profitchart faz.

alguém poderia me ajudar?

Se voce gosta de uma plataforma porque nao usa ela? Usa algum indicador personalizado ou robo?