거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Telegram에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
라이브러리

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - MetaTrader 5용 라이브러리

조회수:
6
평가:
(2)
게시됨:
\MQL5\Include\
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

CRiskCalculator는 Expert Advisors 및 거래 도구의 리스크 관리와 거래량 계산을 처리하도록 설계된 객체 지향 MQL5 헤더 라이브러리입니다 . 이 라이브러리는 특정 계좌의 리스크 금액과 핍 단위의 손절 거리(Stop Loss)를 기반으로 화폐 가치의 핍 값과 정확한 랏 크기를 계산합니다 .

자동 거래에서 흔히 발생하는 문제 중 하나는 교차 통화 쌍(예: 유로(EUR) 표시 계좌에서 GBPJPY를 거래하는 경우)에 대한 포지션 규모 산정입니다 . 이 클래스는 MetaTrader 5의 기본 심볼 속성과 교차 통화 쌍을 위한 대체 변환 시스템을 결합하여 이러한 문제를 해결합니다 .

주요 기능

  • 듀얼 엔진 계산: 기본 계산 방법으로 브로커의 기본 속성( SYMBOL_TRADE_TICK_VALUE 및 SYMBOL_TRADE_TICK_SIZE )을 사용합니다 . 해당 매개변수를 브로커에서 제공하지 않거나 초기화되지 않은 경우, 자동으로 수동 기준/호가 통화 추출 및 환율 조회 방식으로 전환됩니다 .

  • 브로커 매개변수 정규화: 계산된 거래량을 SYMBOL_VOLUME_MIN과 SYMBOL_VOLUME_MAX 사이로 자동 제한하고, SYMBOL_VOLUME_STEP에 맞춰 브로커 거부 오류(예: TRADE_RETCODE_INVALID_VOLUME)를 방지합니다 .

  • 깔끔한 객체 지향 설계: CRiskCalculator 클래스 내에 캡슐화되어 전역 범위가 복잡해지지 않으므로, 기존 EA 프로젝트나 사용자 정의 지표에 쉽게 적용할 수 있습니다 .

  • 자동 구성: 초기화 시 현재 계좌의 기본 통화(ACCOUNT_CURRENCY)를 자동으로 감지합니다 .

통합 예시

Expert Advisor 또는 스크립트에서 이 클래스를 사용하려면 CRiskCalculator.mqh 파일을 MQL5/Include/ 디렉터리에 배치하고 객체를 생성하십시오 :

#include <CRiskCalculator.mqh>

// 차트에 고대비 패널을 표시하는 헬퍼 함수
void DrawChartPanel(const string &lines[])
  {
   int x = 20, y = 30;
   int width = 280, lineHeight = 18;
   int height = (ArraySize(lines) * lineHeight) + 20;

   // 1. 배경 상자 생성 (흰색, 검은색 또는 사용자 지정 차트에서 표시됨)
   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. 패널 내부에 텍스트 줄 렌더링하기
   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()
  {
   // 리스크 계산기 인스턴스 생성
   CRiskCalculator riskCalc;

   string symbol     = _Symbol;
   double riskAmount = 100.0; // 계좌 통화로 표시된 목표 위험
   double slPips     = 25.0;  // 핍 단위의 손절 거리

   // 매개변수 계산
   double lotSize      = riskCalc.CalculateLotSize(symbol, riskAmount, slPips);
   double pipValPerLot = riskCalc.GetPipValuePerLot(symbol);

   // 출력 줄 준비
   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);

   // 차트에 GUI 패널 표시
   DrawChartPanel(info);
  }
차트 예시

클래스 참조

메서드 반환 유형 설명
GetPipValuePerLot(string symbol) double

계좌 통화로 표시된 1 표준 랏당 1 핍의 금전적 가치를 반환합니다 .

GetPipValue(string symbol, double volume) double

지정된 거래량에 대한 1 핍의 총 금전적 가치를 반환합니다 .

CalculateLotSize(string symbol, double riskAmount, double slPips) double

목표 현금 리스크와 핍 단위의 손절매(Stop Loss)에 대한 랏 크기를 계산하고 정규화합니다 .


MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/77130

Gueta Position Sizer: Risk and Lot Guard HUD Gueta Position Sizer: Risk and Lot Guard HUD

MT5용 실시간 리스크 계산기 및 랏 사이즈 가드 HUD입니다. 계좌 잔고, 목표 리스크 비율, 동적 ATR 스톱로스(최소 랏 오버슈트 경고 기능 포함)를 기반으로 정확한 랏 크기를 계산합니다.

RJO Daily Pivot Levels  Classic and  Fibonacci for MT5 RJO Daily Pivot Levels Classic and Fibonacci for MT5

클래식 및 피보나치 방식을 지원하는 MetaTrader 5용 일일 피벗 포인트(PP) 지표입니다. 이전에 마감된 일봉을 기반으로 PP, R1-R3 및 S1-S3을 표시합니다.

Margin Risk Simulator Margin Risk Simulator

Shows the prices of the current symbol at which the account reaches margin call and stop out, with a what-if mode for extra volume, the maximum volume you can add and pending orders that trigger on the way.

GridPro Panel — open-source grid trading EA with on-chart control panel GridPro Panel — open-source grid trading EA with on-chart control panel

open-source grid trading EA with on-chart control panel