펠더마이어 자금 관리(Peldermayer Money Management): 승률과 페이오프 비율을 고려한 트레이딩 전략

펠더마이어 자금 관리의 개념

펠더마이어 자금 관리는 트레이딩 성과에 따라 포지션 크기를 조절하되, 승률과 페이오프 비율(Payoff Ratio)을 고려하는 방법이다. 이 방법은 트레이더 토마스 펠더마이어(Thomas Peldermayer)가 개발했으며, 트레이딩 전략의 기대값(Expected Value)을 최대화하는 것을 목표로 한다.

펠더마이어 자금 관리에서는 두 가지 핵심 개념인 승률과 페이오프 비율을 사용한다:

  1. 승률(Win Rate): 전체 거래 중 이익 거래의 비율
  2. 페이오프 비율(Payoff Ratio): 평균 이익 거래 크기 / 평균 손실 거래 크기

예를 들어, 어떤 트레이딩 전략의 승률이 60%이고 페이오프 비율이 2라면, 이는 전체 거래의 60%가 이익 거래이며, 평균적으로 이익 거래의 크기가 손실 거래의 크기보다 2배 크다는 것을 의미한다.

펠더마이어 자금 관리는 이 두 가지 요소를 결합하여 포지션 크기를 결정한다. 승률이 높고 페이오프 비율이 큰 전략에는 더 큰 포지션 크기를 할당하고, 승률이 낮거나 페이오프 비율이 작은 전략에는 더 작은 포지션 크기를 할당한다.

펠더마이어 자금 관리 전략

펠더마이어 자금 관리 전략은 다음과 같은 단계로 구현할 수 있다:

  1. 각 트레이딩 전략의 승률과 페이오프 비율을 계산한다.
  2. 트레이딩 전략의 기대값을 계산한다. 기대값은 다음과 같이 계산할 수 있다:
  • 기대값 = (승률 * 평균 이익 거래 크기) – ((1 – 승률) * 평균 손실 거래 크기)
  1. 각 전략에 할당할 포지션 크기를 결정한다. 포지션 크기는 기대값에 비례하도록 할당한다.
  2. 주기적으로 각 전략의 성과를 평가하고, 승률과 페이오프 비율을 업데이트한다. 필요에 따라 포지션 크기를 조정한다.

이 전략을 통해 장기적으로 기대값이 높은 전략에 더 많은 자금을 할당할 수 있으며, 이는 전체 포트폴리오의 수익률 개선에 도움이 될 수 있다.

파이썬 코드 예시

다음은 펠더마이어 자금 관리를 구현한 파이썬 코드의 예시이다:

def calculate_payoff_ratio(winning_trades, losing_trades):
    try:
        if len(winning_trades) == 0 or len(losing_trades) == 0:
            raise ValueError("Winning and losing trades lists cannot be empty.")

        avg_win = sum(winning_trades) / len(winning_trades)
        avg_loss = sum(losing_trades) / len(losing_trades)
        payoff_ratio = avg_win / avg_loss
        return payoff_ratio
    except (ValueError, ZeroDivisionError) as e:
        print(f"Error: {str(e)}")
        return 0

def peldermayer_position_size(capital, risk_per_trade, win_rate, payoff_ratio):
    try:
        if win_rate < 0 or win_rate > 1:
            raise ValueError("Win rate must be between 0 and 1.")
        if payoff_ratio <= 0:
            raise ValueError("Payoff ratio must be greater than 0.")

        loss_rate = 1 - win_rate
        avg_win = risk_per_trade * payoff_ratio
        avg_loss = risk_per_trade
        expected_value = (win_rate * avg_win) - (loss_rate * avg_loss)

        position_size = capital * expected_value / avg_win
        return position_size
    except (ValueError, TypeError) as e:
        print(f"Error: {str(e)}")
        return 0

# 사용 예시
winning_trades = [100, 150, 200, 120, 180]
losing_trades = [-100, -80, -90, -110]

payoff_ratio = calculate_payoff_ratio(winning_trades, losing_trades)
print(f"Payoff Ratio: {payoff_ratio:.2f}")

capital = 100000
risk_per_trade = 1000
win_rate = 0.6

position_size = peldermayer_position_size(capital, risk_per_trade, win_rate, payoff_ratio)
print(f"Position size: {position_size:.2f}")

위 코드에서 calculate_payoff_ratio 함수는 이익 거래와 손실 거래의 리스트를 입력받아 페이오프 비율을 계산한다. 이 함수는 입력된 리스트가 비어 있는 경우 ValueError를 발생시키고, 평균 손실 거래 크기가 0인 경우 ZeroDivisionError를 처리한다.

peldermayer_position_size 함수는 이전 예시와 동일하게 총 자금, 거래당 리스크, 승률, 페이오프 비율을 입력받아 펠더마이어 자금 관리에 따른 포지션 크기를 계산한다.

사용 예시에서는 먼저 이익 거래와 손실 거래의 예시 데이터를 사용하여 페이오프 비율을 계산하고, 그 결과를 출력한다. 그런 다음, 총 자금, 거래당 리스크, 승률을 설정하고, peldermayer_position_size 함수를 호출하여 포지션 크기를 계산한다.

Leave a Reply

error: Content is protected !!