능동적 적응형 퀀트 그리드 거래 전략
개요
본 전략은 동적으로 조정되는 거래 그리드를 구축하여 변동성 장세에서 안정적인 수익을 실현합니다. 전략은 설정된 그리드 수에 따라 자동으로 그리드 간격과 상한/하한 가격을 계산합니다. 가격이 각 그리드 라인을 돌파할 때마다 분할 매수 또는 매도 포지션을 구축합니다. 가격이 기존 그리드 라인에 다시 도달하면 점진적으로 이익 실현 청산을 진행합니다. 해당 전략은 수동 및 자동 그리드 매개변수 조정을 모두 지원하여 시장 환경 변화에 적응할 수 있습니다.
전략 원리
-
입력 매개변수를 기반으로 그리드 경계와 그리드 라인 가격 배열을 계산합니다.
-
가격이 특정 그리드 라인보다 낮고 해당 그리드 라인에 대응하는 주문이 없을 경우, 해당 그리드 라인 가격에 매수 주문을 설정합니다. 가격이 이전 그리드 라인(첫 번째 제외)보다 높고 이전 그리드 라인에 대응하는 보유 포지션이 있을 경우, 이전 그리드 라인의 매수 포지션을 청산합니다.
-
자동 그리드 매개변수 조정이 활성화된 경우, 최근 일정 수의 캔들 데이터를 기반으로 정기적으로 그리드의 상한/하한 가격, 그리드 간격 및 그리드 배열을 재계산합니다.
장점 분석
-
변동성 장세에서 수익 목표를 실현합니다. 상승/하락 장세에서 다양한 가격대에 분할 포지션을 구축하고 이익 실현 청산을 통해 전반적으로 수익을 창출합니다.
-
수동 또는 자동 그리드 매개변수 조정을 선택할 수 있습니다. 수동 조정은 인적 개입이 필요하지만 더 통제 가능하며, 자동 조정은 작업 부담을 줄이고 전략이 시장 환경 변화에 적응할 수 있도록 합니다.
-
최대 그리드 수를 제한하여 단방향 리스크를 통제할 수 있습니다. 가격이 모든 그리드 라인을 돌파하면 해당 방향의 리스크가 통제됩니다.
-
그리드 간격을 조정하여 각 주문의 손익 폭을 제어할 수 있습니다. 그리드 간격을 줄이면 단일 손익 규모가 작아집니다.
리스크 분석
-
급격한 변동 장세에서 차익 거래 리스크가 존재합니다. 가격이 여러 그리드 사이를 빠르게 오갈 경우 차익 거래에 노출될 수 있습니다.
-
적절한 초기 자금 설정이 필요합니다. 초기 자금이 부족하면 충분한 수의 그리드 라인을 유지할 수 없습니다.
-
그리드 수가 너무 많거나 적으면 전략 수익에 불리합니다. 그리드 수가 너무 적으면 변동성을 충분히 활용하지 못하고, 너무 많으면 단일 손익이 너무 작아집니다. 최적의 매개변수를 결정하기 위한 테스트가 필요합니다.
-
자동 그리드 매개변수 조정은 조작 리스크가 존재합니다. 그리드 매개변수 계산은 일정 수의 캔들 데이터에 의존하므로 단기 조작의 영향을 받을 수 있습니다.
최적화 방향
-
손절 로직 추가. 변동 손절 또는 트레일링 스탑을 설정하여 단방향 손실 리스크를 추가로 제어합니다.
-
알고리즘을 도입하여 그리드 매개변수 최적화. 다양한 시장 단계의 매개변수 설정을 테스트한 후 머신러닝 방법으로 모델을 학습시켜 매개변수의 자동 최적화를 실현할 수 있습니다.
-
더 많은 지표를 결합하여 시세 판단. MACD, KD 등 지표를 활용하여 현재 상승 추세인지 하락 추세인지 판단하고 그리드 수 또는 매개변수를 조정합니다.
-
드로다운 제어 최적화. 최대 드로다운 비율을 설정하고 임계값에 도달하면 전략을 중단하여 손실 확대를 방지합니다.
요약
본 전략은 변동성 장세의 특징을 최대한 활용하여 동적 그리드 거래를 통해 안정적인 수익 목표를 실현합니다. 매개변수 설정의 유연성을 고려하면서도 작업 부담을 줄였습니다. 변동성 장세에서 본 전략은 이상적인 수익 선택지라고 할 수 있습니다. 향후 추가 최적화를 통해 전략의 적용 범위를 넓히고 드로다운 제어를 개선하여 더 지속적이고 안정적인 수익을 창출할 수 있습니다.
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average- 1

