고정주식 거래 전략


생성 날짜: 2023-09-22 16:51:25 마지막으로 수정됨: 2023-09-22 16:51:25
복사: 0 클릭수: 621
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략의 핵심 아이디어는 투자자가 자산 중 특정 자산의 투자 지분을 항상 고정 유지한다는 것입니다. 자산 가치가 상승하면 투자자는 투자 지분을 유지하기 위해 일부를 판매합니다. 자산 가치가 떨어지면 투자자는 투자 지분을 보충하기 위해 구매합니다. 이 전략은 상대적으로 안정적인 자산에 적용됩니다.

전략 원칙

이 전략은 먼저 투자 지분 파라미트 %_invested, 즉 포트폴리오에서 차지하는 자산의 비율을 설정해야 합니다. 다음 논리에 따라 포지션을 조정합니다:

  1. 포지션이 0일 때, %_invested와 initial_capital의 설정된 투자 비율에 따라 구매해야 하는 계약의 수

  2. 포지션을 보유할 때, 투자된 금액과 계좌의 총권익의 비율 invested와 설정된 투자 몫 percent_invested를 비교한다. 투자된 금액의 비율이 너무 낮으면, 투자 몫을 보충하기 위해 계약을 구매한다. 투자된 금액의 비율이 너무 높으면, 투자 몫을 유지하기 위해 계약을 판매한다.

  3. 단계 2를 반복하여, 투자 비율을 고정시켜주세요.

전략적 이점

  • 상대적으로 안정적인 자산을 장기간 보유할 수 있고, 자주 거래할 필요가 없다.

  • 자산의 변동에서 이익을 얻기 위해 정기적으로 포지션을 조정하십시오.

  • 포트폴리오의 위험을 줄이기 위해 여러 가지 관련없는 자산에 분산 할 수 있습니다.

  • 전체 지분 손실을 방지할 수 있고, 거품이 터졌을 때 모든 투자를 잃지 않도록 할 수 있다.

위험 분석

  • 변동성이 높은 자산은 손실 위험이 높습니다.

  • 거래에 대한 수수료가 자주 필요합니다.

  • 포지션 조정에는 시간 지연이 있을 수 있으며, 최적의 매매 지점을 놓칠 수 있다.

  • 이 비율을 잘못 설정하면 과도한 거래가 발생할 수 있습니다.

위험은 다음과 같이 줄일 수 있습니다.

  1. 재산을 신중하게 선택하고, 변동성이 높은 재산을 피하십시오.

  2. 포지션 조정 논리를 최적화하고 거래 빈도를 낮추십시오.

  3. 포지션 변동의 최소 단위를 설정하여 과도한 거래를 피하십시오.

  4. 100%의 최적화 설정으로 재원을 과도하게 집중하는 것을 방지합니다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 자산가격이 어느 정도 떨어지면 자동으로 손실을 멈추는 Stop Loss 논리를 추가합니다.

  2. 트레이딩 신호 검증을 추가하여 트렌드 변동이 아닌 지점에서 포지션을 조정하는 것을 피하십시오.

  3. 서로 다른 자산 설정에 대해 서로 다른 투자 비율, 중지 손실 비율 등의 매개 변수.

  4. 매개 변수 최적화 모듈을 추가하여 역사 데이터에 따라 매개 변수를 자동으로 최적화한다.

  5. 동적 자산 배치를 위해 다른 자산에 재투자를 지원합니다.

요약하다

이 전략은 고정 투자 지분을 통해 분산 투자, 위험 통제의 효과를 달성하며 안정 자산의 장기 보유에 적용된다. 그러나 이 전략에는 포지션 조정 지연, 위험 자산 투자 위험 등의 문제가 있다. 후속으로는 스톱 로직, 신호 검증 등의 방법을 최적화하여 전략 안정성을 더욱 향상시킬 수 있다.

전략 소스 코드
/*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)