Freqtrade

🧠 Freqtrade 가이드: 나만의 첫 전략(Strategy) 파일 적용하기

jimsjoo 2025. 12. 18. 03:43

🧠 Freqtrade 가이드: 나만의 첫 전략(Strategy) 파일 적용하기

Freqtrade 설치가 '몸체'를 만드는 것이었다면, 전략(Strategy)을 적용하는 것은 '두뇌'를 심는 과정입니다. 기본으로 제공되는 SampleStrategy는 예시일 뿐 수익을 내기 어렵습니다.

오늘은 가장 대중적인 보조지표인 RSI(상대강도지수)를 이용해, "싸게 사서 비싸게 파는" 간단한 전략을 만들고 적용해보겠습니다.


1. 전략 파일 만들기 (Ctrl+C, Ctrl+V 하세요)

Freqtrade 폴더 내의 user_data/strategies/ 폴더로 이동합니다. 여기에 RsiStrat.py라는 파일을 새로 만들고 아래 코드를 복사해서 붙여넣으세요.

(이 코드는 RSI가 30 이하로 떨어지면 '과매도'로 보고 매수, 70 이상으로 오르면 '과매수'로 보고 매도하는 기본 로직입니다.)

# user_data/strategies/RsiStrat.py

import talib.abstract as ta
from freqtrade.strategy import IStrategy
from pandas import DataFrame

class RsiStrat(IStrategy):
    # 1. 기본 설정 (최소 ROI, 손절, 타임프레임)
    minimal_roi = {
        "0": 0.1  # 10% 수익나면 익절
    }
    stoploss = -0.10  # 10% 손실나면 손절
    timeframe = '1h'  # 1시간 봉 기준

    # 2. 지표 계산 (Indicators)
    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI 지표 계산 (기간 14)
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
        return dataframe

    # 3. 매수 조건 (Entry Signal)
    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] < 30) &  # RSI가 30보다 작으면
                (dataframe['volume'] > 0)  # 거래량이 0보다 클 때
            ),
            'enter_long'] = 1  # 매수 신호 발생
        return dataframe

    # 4. 매도 조건 (Exit Signal)
    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 70) &  # RSI가 70보다 크면
                (dataframe['volume'] > 0)
            ),
            'exit_long'] = 1  # 매도 신호 발생
        return dataframe

2. 전략이 안전한지 검증하기 (Backtesting)

전략을 만들었다면 바로 돈을 넣지 말고, 과거 데이터로 테스트를 해봐야 합니다. 이를 백테스팅(Backtesting)이라고 합니다.

Docker 사용자 명령어:
터미널에서 아래 명령어를 입력하세요. (최근 30일 데이터 다운로드 후 테스트)

# 1. 과거 데이터 다운로드 (바이낸스, BTC/USDT, 30일치)
docker compose run --rm freqtrade download-data --exchange binance --pairs BTC/USDT --days 30 -t 1h

# 2. 백테스팅 실행 (전략 파일 이름 지정)
docker compose run --rm freqtrade backtesting --config user_data/config.json --strategy RsiStrat

실행이 끝나면 터미널에 표가 나옵니다.

  • Total profit %: 총 수익률
  • Win / Draw / Loss: 승/무/패 횟수

이 결과가 파란색(수익)이어야 실전 투입이 가능합니다.


3. 실전 봇에 적용하기

백테스팅 결과가 마음에 든다면, 이제 봇이 이 전략을 사용하도록 설정합니다.

방법 A: docker-compose.yml 수정 (추천)

docker-compose.yml 파일을 열어 command: 부분을 찾습니다. --strategy 뒤에 파일명을 적어주세요.

    # 수정 전
    command: >
      trade
      --logfile /freqtrade/user_data/logs/freqtrade.log
      --db-url sqlite:////freqtrade/user_data/freqtrade.sqlite
      --config /freqtrade/user_data/config.json
      --strategy SampleStrategy  <-- 이 부분을 수정

    # 수정 후
    command: >
      ...
      --strategy RsiStrat      <-- 내 전략 이름으로 변경

수정 후 봇을 재시작합니다.

docker compose down
docker compose up -d

방법 B: config.json 수정

config.json 파일 안에 전략 이름을 고정할 수도 있습니다.

    "strategy": "RsiStrat",

🚀 마치며: 파이썬 코딩이 어려우신가요?

위의 코드를 이해하고 수정하려면 파이썬(Python)과 판다스(Pandas) 지식이 필요합니다.

  • "나는 코딩은 모르겠고, 검증된 수익 나는 전략만 쓰고 싶다!"
  • "RSI 말고 볼린저밴드, MACD, 머신러닝 전략은 없나요?"

이런 분들을 위해 저희는 [Freqtrade 전략 마켓플레이스]를 준비하고 있습니다.
전 세계 고수들이 만든 검증된 전략 파일을 클릭 한 번으로 내 봇에 적용할 수 있는 서비스를 기대해 주세요.