Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - biblioteca para MetaTrader 5
- Visualizações:
- 15
- Avaliação:
- Publicado:
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
A CRiskCalculator é uma biblioteca de cabeçalhos MQL5 orientada a objetos, projetada para lidar com a gestão de risco e cálculos de volume para Expert Advisors e ferramentas de negociação . Ela calcula valores monetários por pip e tamanhos precisos de lotes com base em um valor de risco específico da conta e na distância do Stop Loss em pips .
Um problema comum na negociação automatizada é o cálculo do tamanho da posição em pares de moedas cruzadas (por exemplo, negociar GBPJPY em uma conta denominada em euros) . Essa classe resolve esse desafio combinando as propriedades nativas dos símbolos do MetaTrader 5 com um sistema de conversão alternativo para pares de moedas cruzadas .
Principais recursos
-
Cálculo com motor duplo: utiliza as propriedades nativas da corretora (SYMBOL_TRADE_TICK_VALUE e SYMBOL_TRADE_TICK_SIZE) como método principal de cálculo . Se esses parâmetros não estiverem disponíveis ou não forem inicializados pela corretora, o sistema recorre automaticamente à extração manual da moeda-base/moeda de cotação e às consultas de taxas de conversão .
-
Normalização de parâmetros da corretora: Limita automaticamente os volumes calculados entre SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX e os alinha ao SYMBOL_VOLUME_STEP para evitar erros de rejeição da corretora (como TRADE_RETCODE_INVALID_VOLUME) .
-
Design OOP limpo: Encapsulado dentro da classe CRiskCalculator, sem poluição no escopo global, facilitando sua integração em projetos de EAs existentes ou indicadores personalizados .
-
Autoconfiguração: detecta automaticamente a moeda base da conta atual (ACCOUNT_CURRENCY) na inicialização .
Exemplo de integração
Para usar esta classe em seu Expert Advisor ou script, coloque o arquivo CRiskCalculator.mqh dentro do diretório MQL5/Include/ e instancie o objeto :
#include <CRiskCalculator.mqh> // Função auxiliar para renderizar um painel de alto contraste no gráfico void DrawChartPanel(const string &lines[]) { int x = 20, y = 30; int width = 280, lineHeight = 18; int height = (ArraySize(lines) * lineHeight) + 20; // 1. Criar caixa de fundo (visível em gráficos brancos, pretos ou personalizados) string bgName = "RiskCalc_BG"; if(ObjectFind(0, bgName) < 0) ObjectCreate(0, bgName, OBJ_RECTANGLE_LABEL, 0, 0, 0); ObjectSetInteger(0, bgName, OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetInteger(0, bgName, OBJPROP_XDISTANCE, x); ObjectSetInteger(0, bgName, OBJPROP_YDISTANCE, y); ObjectSetInteger(0, bgName, OBJPROP_XSIZE, width); ObjectSetInteger(0, bgName, OBJPROP_YSIZE, height); ObjectSetInteger(0, bgName, OBJPROP_BGCOLOR, clrDarkSlateGray); ObjectSetInteger(0, bgName, OBJPROP_BORDER_COLOR, clrDodgerBlue); ObjectSetInteger(0, bgName, OBJPROP_BORDER_TYPE, BORDER_FLAT); ObjectSetInteger(0, bgName, OBJPROP_SELECTABLE, false); // 2. Exibir linhas de texto dentro do painel for(int i = 0; i < ArraySize(lines); i++) { string lblName = "RiskCalc_Lbl_" + IntegerToString(i); if(ObjectFind(0, lblName) < 0) ObjectCreate(0, lblName, OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, lblName, OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetInteger(0, lblName, OBJPROP_XDISTANCE, x + 12); ObjectSetInteger(0, lblName, OBJPROP_YDISTANCE, y + 10 + (i * lineHeight)); ObjectSetString(0, lblName, OBJPROP_TEXT, lines[i]); ObjectSetString(0, lblName, OBJPROP_FONT, "Segoe UI"); ObjectSetInteger(0, lblName, OBJPROP_FONTSIZE, 9); ObjectSetInteger(0, lblName, OBJPROP_COLOR, (i == 0) ? clrYellow : clrWhite); ObjectSetInteger(0, lblName, OBJPROP_SELECTABLE, false); } ChartRedraw(0); } void OnStart() { // Instanciar a calculadora de risco CRiskCalculator riskCalc; string symbol = _Symbol; double riskAmount = 100.0; // Risco-alvo na moeda da conta double slPips = 25.0; // Distância do Stop Loss em pips // Calcular parâmetros double lotSize = riskCalc.CalculateLotSize(symbol, riskAmount, slPips); double pipValPerLot = riskCalc.GetPipValuePerLot(symbol); // Preparar as linhas de saída string info[6]; info[0] = "=== RISK & POSITION CALCULATOR ==="; info[1] = "Symbol: " + symbol; info[2] = "Account Currency: " + AccountInfoString(ACCOUNT_CURRENCY); info[3] = "Target Risk: $" + DoubleToString(riskAmount, 2); info[4] = "Calculated Lot Size: " + DoubleToString(lotSize, 2) + " lots"; info[5] = "Pip Value (1 Lot): " + DoubleToString(pipValPerLot, 2); // Exibir o painel da interface gráfica no gráfico DrawChartPanel(info); }

Referência da classe
| Método | Tipo de retorno | Descrição |
| GetPipValuePerLot(string símbolo) | double | Retorna o valor monetário de 1 pip para 1 lote padrão na moeda da conta . |
| GetPipValue(string símbolo, double volume) | double | Retorna o valor monetário total de 1 pip para um volume especificado . |
| CalculateLotSize(string símbolo, double valorDeRisco, double slPips) | double | Calcula e normaliza o tamanho do lote para um risco em dinheiro alvo e um Stop Loss em pips . |
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/77130
Gueta Position Sizer: Risk and Lot Guard HUD
Calculadora de risco em tempo real e HUD de controle do tamanho do lote para o MT5. Calcula o tamanho exato do lote com base no saldo da conta, na porcentagem de risco alvo e no Stop Loss dinâmico baseado no ATR, com aviso de ultrapassagem mínima do lote.
RJO Daily Pivot Levels Classic and Fibonacci for MT5
Indicador de Pontos de Pivô Diários para o MetaTrader 5 com os métodos Clássico e de Fibonacci. Exibe PP, R1-R3 e S1-S3 com base na vela diária anterior já fechada.
Accumulation/Distribution
O Indicador Accumulation/Distribution (Acumulação/Distribuição ou A/D) é determinado pelas mudanças de preço e volume.
Accelerator Oscillator (AC)
O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.