Parciais no robô: como realizar parte da posição automaticamente
Por Jackson Jordão · 23 de outubro de 2026 · 6 min

Parcial é fechar só uma fração da posição quando o preço chega a um alvo intermediário, e deixar o restante aberto. O robô faz isso enviando uma ordem contrária com volume menor que o da posição, ou usando o método PositionClosePartial da classe CTrade, da biblioteca padrão do MQL5.
A ideia parece simples, mas tem armadilhas: o volume precisa respeitar o lote mínimo e o passo do ativo, o stop do restante costuma ser movido, e a conta pode ser netting ou hedging. Neste artigo você vê como cada ponto entra na regra do robô.
Por que usar parciais
Quem opera à mão costuma realizar uma parte no primeiro alvo para garantir algum resultado e manter o resto atrás de um movimento maior. O robô pode repetir exatamente essa disciplina, sem hesitação e sem esquecer de executar.
- Reduz o risco da posição depois que ela anda a favor.
- Combina bem com mover o stop para o ponto de entrada no restante da posição (breakeven).
- Permite alvos em estágios, por exemplo metade no primeiro alvo e o resto num alvo maior ou no trailing stop.
- Deixa o comportamento do robô documentado em regras claras, fáceis de testar no backtest.
Parcial não é garantia de lucro. Ela muda a forma da curva de resultados: costuma reduzir oscilações, mas também corta parte dos ganhos nas operações em que o preço seguiria muito além do primeiro alvo. Só o teste com a sua estratégia mostra se compensa.
O que o robô precisa definir
Antes de programar, escreva as regras. Um robô sério não decide isso na hora; os parâmetros ficam configuráveis nas entradas (inputs):
- Gatilho da parcial: pontos de lucro, múltiplo do risco (por exemplo 1R) ou um nível de preço.
- Percentual a realizar: 50%, 30% ou outro valor.
- O que fazer com o stop do restante: manter, levar ao breakeven ou iniciar um trailing.
- Quantas parciais: apenas uma ou várias em alvos sucessivos.
- Parcial só uma vez por posição, para o robô não repetir o fechamento a cada tick.
Como fechar uma parte da posição no MT5
Para saber o tamanho atual, o robô lê a propriedade POSITION_VOLUME da posição selecionada. Depois calcula o volume da parcial e o ajusta aos limites do ativo. A documentação do MQL5 define esses limites em SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX e SYMBOL_VOLUME_STEP.
O cálculo do volume vem em quatro passos: multiplicar o volume da posição pelo percentual, arredondar para baixo para um múltiplo de SYMBOL_VOLUME_STEP, conferir se o resultado é maior ou igual a SYMBOL_VOLUME_MIN e conferir se o volume que sobra na posição também é válido.
Com o volume pronto, há dois caminhos:
- CTrade::PositionClosePartial(ticket, volume): método da biblioteca padrão que fecha parte de uma posição. Em contas hedging, indique o ticket da posição. Em contas netting, também existe a versão por símbolo.
- OrderSend com TRADE_ACTION_DEAL: o robô monta a requisição (MqlTradeRequest) com tipo oposto ao da posição, o volume da parcial e, em contas hedging, o campo position com o ticket.
Dica: Sempre confira o retorno da operação (retcode) e use o tipo de preenchimento aceito pelo ativo. Se a corretora rejeitar a ordem, o robô deve tentar de novo ou registrar o erro, e não assumir que a parcial foi feita. Veja o artigo sobre tipos de preenchimento, em /blog/tipos-preenchimento-ordem-fok-ioc-return-mt5.
Netting ou hedging: muda a lógica
Na conta netting, comum na B3, existe uma única posição por ativo. Uma ordem contrária com volume menor reduz essa posição, e isso é a parcial. Já na conta hedging, comum no Forex, cada operação é uma posição com seu próprio ticket, e a parcial reduz o volume daquela posição específica.
Por isso o robô precisa identificar a posição correta. Num robô que roda vários setups na mesma conta, o ideal é separar cada operação por um número mágico (magic number). O artigo sobre vários robôs na mesma conta, em /blog/varios-robos-mesma-conta-metatrader-5, mostra os cuidados para evitar conflito.
Parcial e stop: o que fazer com o restante
Depois da parcial, o risco da posição muda e o stop também deveria mudar. O caso mais comum é levar o stop do restante para o preço de entrada. Assim, se o mercado voltar, a parte que sobrou sai sem perda, descontados spread e eventual slippage.
Outra opção é entregar o restante a um trailing stop. O funcionamento dos dois está no artigo sobre trailing e breakeven, em /blog/trailing-stop-breakeven-robo-metatrader-5. Em ambos os casos, o robô deve modificar o stop respeitando a distância mínima exigida pelo ativo (SYMBOL_TRADE_STOPS_LEVEL).
Dica: Uma armadilha clássica: o robô realiza a parcial, mas o stop e o alvo continuam calculados sobre o volume antigo, ou o painel de risco ainda mostra a exposição inicial. Atualize o risco com o volume atual da posição.
Cuidados com o lote mínimo
O erro mais frequente em parciais é o lote pequeno demais. Se a posição é de 0,02 lote e o passo é 0,01, uma parcial de 50% é possível. Se for 0,01 lote, não há como dividir: o robô precisa pular a parcial ou fechar tudo, conforme a regra definida.
Na B3, vale o mesmo raciocínio nos contratos futuros. Com 1 contrato de mini índice ou de mini dólar, não existe parcial. Para dividir a saída, a estratégia precisa operar ao menos 2 contratos, e isso pesa na gestão de risco. O artigo sobre gestão de risco, em /blog/gestao-de-risco-robo-forex-metatrader-5, explica como dimensionar o lote.
Como testar antes de usar em conta real
- Rode o backtest em ticks reais e confira no histórico de negociações se cada parcial saiu uma única vez, no volume esperado.
- Teste com lotes de tamanhos diferentes, inclusive o mínimo, para ver o que o robô faz quando não dá para dividir.
- Compare os resultados com e sem parcial, no mesmo período, para saber o efeito real da regra.
- Faça um período em conta demo, para ver o comportamento diante de rejeições e de reinício do terminal.
Falando em reinício: o robô deve ser capaz de lembrar se a parcial já foi feita. Se o MetaTrader fechar e abrir de novo, ele precisa deduzir isso lendo a posição (por exemplo, comparando o volume atual com o inicial, guardado em uma variável global do terminal) e não repetir a parcial.
Resumo
- Parcial é fechar uma fração da posição no alvo intermediário e deixar o resto aberto.
- No MQL5, use CTrade::PositionClosePartial ou uma ordem contrária com volume menor.
- Ajuste o volume ao SYMBOL_VOLUME_STEP e ao SYMBOL_VOLUME_MIN; com lote mínimo não há parcial.
- Conta netting e conta hedging tratam a posição de forma diferente; identifique a posição certa.
- Depois da parcial, atualize o stop do restante e controle para que ela ocorra uma única vez.
Quer parciais no seu robô?
A Digital Master12 programa robôs para MetaTrader 4 e 5 com parciais, breakeven, trailing e alvos em estágios, tudo configurável nas entradas. Sem promessa de resultado: o foco é o robô executar exatamente a regra que você definiu.
- Descreva a estratégia pelo Termo de Referência do site ou direto pelo WhatsApp.
- Receba a análise da regra, com as dúvidas e os pontos de risco levantados.
- Receba o robô testado em conta demo, com o código-fonte.