이 거래 시스템은 "동적 리스크 조정 레버리지 거래 시스템"이라고 불리며, 역사적 평균에 비해 현재의 시장 변동성에 기초하여 거래를 관리하는 것을 목표로합니다. 이 시스템은 ATR 지표에 기초하여 열린 거래의 목표 수를 계산하고 그에 따라 레버리지를 조정합니다. 피라미드 접근 방식을 사용하여 거래를 열고 닫으며 동시에 여러 포지션을 허용합니다.
이 시스템은 아래의 단계를 수행합니다.
14주기 ATR를 계산하고 닫기 가격으로 나누어서 정상화합니다.
정상화 된 ATR의 100일 간직 이동 평균 (SMA) 을 계산합니다.
정상화된 ATR의 100일 SMA의 비율을 계산합니다.
이 비율의 역수 (2/ratio) 를 기준으로 목표 레버리지를 결정합니다.
목표 레버리지를 5로 곱하여 오픈 트레이드의 목표 수를 계산합니다.
그래프 목표와 현재 오픈 트레이드
구매할 확률이 있는지 확인 (현재의 오픈 트레이드가 목표보다 적다면) 또는 트레이드를 닫을 확률이 있는지 확인 (현재의 오픈 트레이드가 목표 + 1보다 많다면)
구매할 기회가 있다면, 긴 거래를 열고 openTrades 배열에 추가하세요.
무역을 닫을 기회와 openTrades 배열에 거래가 존재한다면, 배열을 참조하여 가장 최근의 거래를 닫고 배열에서 제거하십시오.
이 시스템은 시장 변동성에 따라 오픈 트레이드와 레버리지를 동적으로 조정하여 트렌드를 파악하는 것을 목표로합니다. 더 나은 통제를 위해 오픈 트레이드를 추적하기 위해 배열을 사용합니다.
이 전략의 장점:
시장 변동성 변화에 따라 레버리지와 포지션 크기를 동적으로 조정하면 위험을 효과적으로 관리할 수 있습니다.
시장의 변동성을 반영하는 목표 포지션 크기를 계산하기 위해 ATR 지표를 사용하는 것은 합리적인 선택입니다.
다중 포지션을 가진 피라미딩은 트렌드로부터 이익을 얻을 수 있습니다.
매트리에서 각 거래를 기록하면 개시 및 폐업 거래의 명시적인 통제가 가능합니다.
이 전략은 몇 가지 매개 변수를 가지고 있으며 실행 및 운영이 쉽습니다.
논리는 명확하고 코드 구조는 최적화와 반복을 쉽게 하기 위해 잘 조직되어 있습니다.
이 전략의 위험은:
ATR는 과거의 변동성을 반영할 뿐이고, 미래의 변화를 예측할 수 없기 때문에 부적절한 레버리지 조정으로 이어질 수 있습니다.
피라미딩은 트렌드가 역전될 때 손실을 쌓을 수 있습니다.
배열 기록 거래는 간단한 오픈/클로즈 작업에만 적용됩니다. 복잡한 논리에 더 복잡한 데이터 구조가 필요합니다.
목표 레버리지와 포지션 크기의 설정은 고정된 매개 변수보다는 기호의 특성에 따라 조정되어야 합니다.
단일 지표에 의존하는 것은 오해의 소지가 있습니다. 다른 변동성 지표 또는 기계 학습 알고리즘은 안정성을 향상시킬 수 있습니다.
이 전략은 아래와 같은 측면에서 최적화 될 수 있습니다.
스톱 로스를 추가하면 스톱 로스 수준에 도달하면 손실을 적극적으로 절감합니다.
각기 다른 ATR 기간을 테스트하여 지표 매개 변수를 최적화합니다.
고정량 입력과 같은 다른 입력 전략을 시도하고 결과를 테스트하십시오.
다른 변동성 메트릭을 추가합니다. Bollinger Bands WIDTH, KD, RSI 등과 같이 조합 사용을 위해.
단순한 평형화 대신 변동성을 예측하기 위해 머신러닝 모델을 사용하세요.
ATR 배수 또는 변동 함수 사용 등 포지션 크기의 계산을 최적화합니다.
전략 분석 및 최적화를 위해 입력 가격, 시간 등과 같은 더 많은 입력 세부 사항을 기록합니다.
최적의 매개 변수 집합을 찾기 위해 자동 최적화를 위한 매개 변수 최적화를 추가합니다.
이 전략은 트렌드 중에 리스크 노출을 관리하기 위해 ATR을 기반으로 레버리지와 포지션 크기를 동적으로 조정하며, 특정 장점을 가지고 있습니다. 그러나 매개 변수 설정 어려움 및 지표 최적화 공간과 같은 과제는 추가 개선이 남아 있습니다. 전반적으로 논리는 명확하고 작동하고 최적화하는 것이 쉽고 심도있는 연구와 응용에 가치가 있습니다.
/*backtest start: 2022-10-09 00:00:00 end: 2023-10-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("I11L - Risk Adjusted Leveraging", overlay=false, pyramiding=25, default_qty_value=20, initial_capital=20000, default_qty_type=strategy.percent_of_equity,process_orders_on_close=false, calc_on_every_tick=false) atr = ta.atr(14) / close avg_atr = ta.sma(atr,100) ratio = atr / avg_atr targetLeverage = 2 / ratio targetOpentrades = 5 * targetLeverage plot(targetOpentrades) plot(strategy.opentrades) isBuy = strategy.opentrades < targetOpentrades isClose = strategy.opentrades > targetOpentrades + 1 var string[] openTrades = array.new_string(0) if(isBuy) strategy.entry("Buy"+str.tostring(array.size(openTrades)),strategy.long) array.push(openTrades, "Buy" + str.tostring(array.size(openTrades))) if(isClose) if array.size(openTrades) > 0 strategy.close(array.get(openTrades, array.size(openTrades) - 1)) array.pop(openTrades)