피셔 유리크 후속 정지 전략

저자:차오장, 날짜: 2024-02-02 14:57:33
태그:

img

전반적인 설명

피셔 유리크 트레일링 스톱 전략 (Fisher Yurik trailing stop strategy) 은 피셔 유리크 지표와 트레일링 스톱 메커니즘을 통합한 양적 거래 전략이다. 피셔 유리크 지표를 사용하여 수익을 차단하고 수익을 보호하면서 수익을 극대화하기 위해 트레일링 스톱을 설정하면서 구매 및 판매 신호를 생성합니다.

전략 논리

  1. 백테스트/라이브 거래 시간 프레임을 정의하기 위한 입력 날짜 범위
  2. 피셔 유리크 지표의 입력 매개 변수, 기본 2 기간
  3. 영업이익 취득 및 손해 중지 비율, 5%의 이익과 2%의 손실에 대한 부실
  4. 피셔 유리크 지표의 주요 및 신호 라인을 계산
  5. 주요 라인이 신호 라인 위에 넘어가면 구매 신호를 생성
  6. 트레일링 스톱을 설정하고, 진입 후 가격이 2% 떨어지면 긴 지위를 종료
  7. 가격 상승률이 5%를 넘으면 수익을 취하라

이점 분석

  1. 피셔 유리크 지표는 트렌드, 정확한 구매 신호를 쉽게 식별합니다.
  2. 대부분의 수익에서 트래일링 스톱 잠금, 문턱을 넘어 스톱을 피
  3. 사용자 정의 가능한 매개 변수는 다른 시장 환경에 적합합니다
  4. 간단하고 이해하기 쉬운 구현

위험 분석

  1. 부적절한 매개 변수 조정 너무 공격적인 거래를 일으킬 수 있습니다, 신중한 테스트를 요구
  2. 너무 큰 스톱 로스는 예상 이상의 손실을 초래할 수 있습니다.
  3. 이윤 을 너무 많이 받는 것 은 이윤 을 단축 시키고 수익성 을 제한 할 수 있다
  4. 각기 다른 제품들에 대해 적절한 매개 변수를 결정해야 합니다.

위험은 스톱/프로프트 비율, 테스트 매개 변수, 신호 필터, 포지션 사이징 규칙을 조정하여 해결할 수 있습니다.

더 나은 기회

  1. 전략에 대한 영향을 위해 피셔 유리크 매개 변수를 최적화
  2. 신호 품질을 향상시키기 위해 MACD, KD와 같은 신호 필터를 추가하십시오.
  3. 볼링거 밴드에서 벗어나는 것과 같은 입시 조건을 추가합니다.
  4. 거래 리스크별로 제어하기 위해 포지션 사이즈링 규칙을 포함
  5. 후속 정지 방법을 향상, 예를 들어 부드러운, 캔들리어 출구

결론

피셔 유리크 트레일링 스톱 전략은 트렌드 식별과 리스크 관리를 결합합니다. 매개 변수 조정, 지표 조합 및 스톱 로스 향상으로 허용 가능한 위험 허용 범위 내에서 좋은 수익을 얻는 대부분의 도구에 적합합니다.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)

// Date Ranges 
from_month = input(defval = 1, title = "From Month")
from_day   = input(defval = 1, title = "From Day")
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month")
to_day     = input(defval = 1, title = "To Day")
to_year    = input(defval = 9999, title = "To Year")
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
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)

var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na

price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)

Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])

up = Fish >= 0

ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish

var float entryPrice = na
var float stopPrice = na
 
if (ExtBuffer1 > ExtBuffer1[1])
    entryPrice := close*dusus
    stopPrice := close * cost 
 
if (ExtBuffer2 < ExtBuffer2[1])
    entryPrice := close
    stopPrice := close * cost

// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)


더 많은