공부방 ›

[강좌] [EA 만들기 5] 손절·익절과 "계좌 1%만 걸기" 랏 계산 코드

大현자 마스터운영진2026. 11. 01. 12:21조회 357추천 21댓글 0

4편 EA는 수량이 0.01랏으로 고정이에요. 그런데 계좌가 1천 달러든 10만 달러든 똑같이 0.01랏을 쓰면 이상하죠. 프로들은 보통 "손절에 걸리면 계좌의 1%만 잃게" 수량을 정해요. 이걸 코드로 만들어 볼게요.

원리 (금 예시)

  • 계좌 1만 달러, 1% = 100달러까지 잃어도 됨
  • 손절 30달러 (금값이 30달러 반대로 가면 손절)
  • 금 1랏 = 100온스 → 금값 1달러 움직이면 1랏당 100달러
  • 1랏으로 손절 맞으면 30 × 100 = 3,000달러 손실
  • 그러니까 100 ÷ 3,000 = 0.033랏 → 0.03랏

코드 (4편 EA에 추가)

OnTick 위쪽 아무 곳에 붙여넣으세요.

input double RiskPct = 1.0;   // 한 번 손절에 잃을 계좌 비율 (%)

double LotsByRisk(double riskPct, double stopPoints)
{
   double risk      = AccountInfoDouble(ACCOUNT_EQUITY) * riskPct / 100.0;
   double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
   double tickSize  = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   if(tickValue <= 0 || tickSize <= 0 || stopPoints <= 0) return 0;

   double lossPerLot = stopPoints * _Point / tickSize * tickValue; // 1랏 손절 시 손실
   double lots = risk / lossPerLot;

   double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   double minL = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   double maxL = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
   lots = MathFloor(lots / step) * step;      // 브로커가 받는 단위로 내림
   if(lots < minL) return 0;                  // 최소 수량보다 작으면 거래 안 함
   return MathMin(lots, maxL);
}

그리고 4편 코드의 주문 부분에서 `Lots` 대신 아래처럼 쓰면 돼요.

   double lots = LotsByRisk(RiskPct, StopPts);
   if(lots <= 0) return;
   if(goldenCross) trade.Buy(lots, _Symbol, ask, ...);   // 나머지는 그대로

왜 이렇게 계산해요?

  • TICK_VALUE / TICK_SIZE: "가격이 최소 단위만큼 움직이면 1랏에 얼마가 변하나"를 브로커가 알려주는 값이에요. 금·외환·지수마다 달라서 직접 외울 필요 없이 이걸 쓰면 어느 종목이든 맞게 계산돼요.
  • MathFloor로 내림: 0.0337랏 같은 숫자는 주문이 안 돼요. 브로커 단위(보통 0.01)로 내려서 위험이 1%를 넘지 않게 해요.
  • 최소 수량보다 작으면 거래 안 함: 계좌가 작아서 0.01랏도 1%를 넘으면, 억지로 들어가지 않는 게 맞아요.

손절·익절 정하는 팁

  • 손절은 "이 가격까지 오면 내 생각이 틀린 것"인 자리에 둬요. 너무 좁으면 잡음에 털리고, 너무 넓으면 랏이 작아져요.
  • 익절은 손절의 1.5~2배부터 시작해서 백테스트로 비교해 보세요.
  • 손절 없는 EA는 만들지 마세요. 한 번의 큰 움직임에 계좌가 끝날 수 있어요.
1% 규칙의 의미는 "10번 연속 져도 계좌의 약 10%만 잃는다"는 거예요. 살아남아야 다음 기회가 있어요.

댓글 0

목록
Vantage 앱 광고광고
현자 탄생기념 부스터 이벤트