이 전략의 핵심 아이디어는 포트폴리오의 자산의 투자 비율을 고정시키는 것입니다. 자산 가치가 상승하면 투자자는 비율을 유지하기 위해 일부를 판매합니다. 떨어지면 투자자는 비율을 보충하기 위해 더 많이 구입합니다. 전략은 상대적으로 안정적인 자산에 적합합니다.
이 전략은 먼저 투자 비율 파라미터 %_invested, 즉 포트폴리오의 자산의 비율을 설정합니다.
포지션이 0일 때 %_invested와 초기 자본을 기준으로 구매 계약을 계산합니다.
보유할 때 투자한 금액의 비율을 투자된 주식 %_invested와 비교합니다. 너무 낮다면 더 많은 계약을 구입합니다. 너무 높다면 계약을 판매합니다.
2단계를 반복해서 투자율을 고정시켜
빈번한 거래 없이 안정적인 자산을 장기적으로 보유할 수 있습니다.
재산 변동으로 인한 주기적인 재균형 수익
상관관계가 없는 자산에 대한 투자 다각화는 포트폴리오 위험을 감소시킵니다.
거품이 터지기 전에 완전히 투자하는 것을 피함으로써 완전한 손실을 방지합니다.
변동성 자산의 손실 위험은 높습니다.
빈번한 거래는 더 많은 수수료를 의미합니다.
재균형이 늦어질 수도 있고, 가장 좋은 입출구점이 없어질 수도 있습니다.
잘못된 비율 설정은 과잉 거래로 이어질 수 있습니다.
위험은 다음과 같이 감소 할 수 있습니다.
높은 변동성을 피하기 위해 자산을 신중하게 선택합니다.
거래 빈도를 줄이기 위해 재균형 논리를 최적화합니다.
최소 위치 변경 단위를 설정하여 과잉 거래를 방지합니다.
과도한 농도를 방지하기 위해 비율 설정을 최적화합니다.
이 전략은 다음과 같이 개선될 수 있습니다.
특정 임계치에서 손실을 줄이기 위해 스톱 로스 로직을 추가합니다.
트렌드가 아닌 지점을 피하기 위해 재균형하기 전에 신호 검증을 추가합니다.
자산별로 비율, 스톱 손실 비율을 조정합니다.
최적의 매개 변수를 찾기 위해 매개 변수 최적화 모듈을 추가합니다.
동적 할당을 위해 다른 자산에 재투자하기 위해 포지션 폐쇄를 지원합니다.
고정 비율 전략은 다양화와 위험 통제를 제공합니다. 그러나 뒤떨어진 재균형 및 변동성 자산 손실과 같은 위험이 있습니다. 손실 중지 논리와 신호 검증에 대한 추가 개선은 안정성을 향상시킬 수 있습니다.
/*backtest start: 2022-09-21 00:00:00 end: 2022-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // strategy("Fixed Fractioning", overlay=true, initial_capital=100000.0) percent_invested=input(50.0,title="Percent Invested",maxval=100.0,minval=0.0) fraction_invested=percent_invested/100 from_day=input(1,title="From Day",maxval=31,minval=1) from_month=input(1,title="From Month",maxval=12,minval=1) from_year=input(2017,title="From Year",maxval=2018,minval=1900) to_day=input(1,title="To Day",maxval=31,minval=1) to_month=input(1,title="To Month",maxval=12,minval=1) to_year=input(2018,title="To Year",maxval=2018,minval=1900) // === FUNCTION EXAMPLE === from: https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/ start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window finish = timestamp(to_year, to_month, to_day, 23, 59) // backtest finish window window() => true // create function "within window of time" strategy.initial_capital = 50000 if strategy.position_size==0 and window() contracts_to_buy=(fraction_invested*strategy.initial_capital)/close strategy.entry("long",long=true,qty=contracts_to_buy,limit=close,when=contracts_to_buy>1) invested=(strategy.position_size*close)/strategy.equity if invested<fraction_invested and window() contracts_to_buy=((fraction_invested-invested)*strategy.equity)/close strategy.order("long",long=true,qty=contracts_to_buy,limit=close,when=contracts_to_buy>1) else if invested>fraction_invested and window() contracts_to_sell=((invested-fraction_invested)*strategy.equity)/close strategy.order("sell",long=false,qty=contracts_to_sell,limit=close,when=contracts_to_sell>1)