이중 요인 반전 거래 전략

저자:차오장, 날짜: 2023-12-27 17:22:31
태그:

img

전반적인 설명

이 전략은 우선 거래에 대한 가격 반전 신호를 활용하고, 두 가지 요인 기반 시스템을 구현하여 스크리닝을 위해 트렌드 필터링 지표를 결합합니다. 가격 반전 부분은 123 역전 거래 시스템을 채택하고, 트렌드 필터링 부분은 추출 트렌드 (ETT) 시스템을 사용합니다. 조합은 두 가지 요인 기반 반전 거래 전략을 형성합니다.

전략 논리

가격 반전 부분은 123 반전 시스템을 사용합니다. 이 시스템은 울프 젠슨의 책 How I Tripled My Money In The Futures Market, 183. 페이지에서 나온 것입니다. 거래 신호 생성에는 다음과 같은 조건이 있습니다.

  1. 이전 폐쇄는 2 일 전 폐쇄보다 낮습니다.
  2. 현재 폐쇄는 이전 폐쇄보다 높습니다.
  3. 9일 느린 스토카스틱은 50보다 낮습니다.

위의 조건이 충족되면 구매 신호가 생성됩니다. 반대로,

  1. 이전 클로즈는 2일 전 클로즈보다 높습니다
  2. 현재 폐쇄는 이전 폐쇄보다 낮습니다.
  3. 9일 빠른 스토카스틱은 50보다 높습니다.

판매 신호가 생성됩니다.

이 반전 시스템의 목표는 가격이 일시적으로 반전될 때 단기적인 반전을 포착하는 것입니다.

트렌드 필터링 부분은 트렌드 추출 (ETT) 시스템을 사용합니다. ETT 시스템은 필터와 이동 평균 조합을 통해 트렌드 방향을 판단합니다. 이 전략에서 주요 기능은 명확한 트렌드가 없을 때 반전 작업을 피하여 가격 반전 신호를 확인하는 것입니다.

이 전략은 두 가지 하위 전략의 거래 신호를 결합하여 궁극적으로 이중 요인 구동 반전 거래 시스템을 실현합니다.

이점 분석

이중 요인 반전 거래 전략은 각각의 하위 전략의 장점을 조합하여 통합합니다.

  1. 123 회전 시스템은 단기 회전 기회를 포착 할 수 있습니다.
  2. ETT 시스템은 명확한 트렌드가 없는 시나리오를 효과적으로 필터링할 수 있으며, 역전 거래 위험을 피합니다.
  3. 이중 요소가 신호 품질을 향상시킵니다.

따라서 이 전략은 유효하지 않은 반전 신호를 효과적으로 필터 할 수 있습니다. 올바른 트렌드 판단과 함께 반전 작업을 수행하여 거래 시스템의 전반적인 성능을 향상시킵니다.

위험 분석

이중 요인 반전 거래 전략은 다음과 같은 주요 위험을 가지고 있습니다.

  1. 가격 전환 후 원래 트렌드가 계속될 위험이 있습니다. 컴파일러 매개 변수 설정이 잘못되면 과도하게 빈번한 전환 신호 생성으로 이어질 수 있으며, 따라서 트렌드 기회를 놓칠 수 있습니다.
  2. ETT 시스템에서의 판단 오류의 위험. ETT 시스템 자체에도 판단 오류가 있으며, 역거래에서 손실을 초래합니다.
  3. 이중 요인 원동 메커니즘의 본질적인 위험. 가능성이 낮지만 두 거래 신호가 동시에 잘못된 판단을 할 가능성이 여전히 있으며 손실을 증폭시킵니다.

위의 위험을 줄이기 위해 고려 사항은 컴파일러 매개 변수를 조정하고, 더 나은 판단을 위해 반전 및 ETT 전략을 최적화하고, 반전 거래에 대한 중지 손실 범위를 적절히 확장하는 것을 포함합니다. 실제로, 두 가지 요소로 인해 발생하는 본질적인 위험은 포지션 사이징 제어에 완전히 고려되어야합니다.

최적화

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

  1. 더 나은 매개 변수 조합을 위해 반전 시스템 매개 변수를 최적화
  2. 더 높은 판단 정확성을 위해 ETT 시스템 매개 변수를 최적화
  3. 다른 가격 역전 전략을 ETT와 결합해보세요.
  4. 위치 크기를 제어 메커니즘을 추가
  5. 더 많은 요소를 가지고 운전

전략 논리와 주요 거래 신호가 변하지 않으면 매개 변수 및 조합 최적화를 통해 더 나은 백테스트 결과를 기대할 수 있습니다.

결론

이중 요인 반전 거래 전략은 여러 요인 판단 시스템을 위해 가격 반전 신호와 트렌드 필터링을 유기적으로 결합합니다. 단일 반전 신호 전략과 비교하면이 전략은 명확한 추세가 없을 때 잘못된 신호를 피하면서 단기 가격 반전을 더 잘 파악 할 수 있으며, 이로 인해 신호 품질을 향상시킬 수 있습니다. 매개 변수 최적화 및 다른 요소를 추가함으로써 더 나은 성능을 기대할 수 있습니다.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/08/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Extracting The Trend
// The related article is copyrighted material from Stocks & Commodities Mar 2010
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


ETT(Length,Delta,Trigger) =>
    pos = 0
    xBandpassFilter = 0.0
    xPrice = hl2
    beta = cos(3.1415 * (360 / Length) / 180)
    gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
    alpha = gamma - sqrt(gamma * gamma - 1)
    xBandpassFilter := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
    xMean = sma(xBandpassFilter, 2 * Length)
    pos :=iff(xMean > Trigger, 1,
	       iff(xMean < Trigger, -1, nz(pos[1], 0)))     
    pos

strategy(title="Combo Backtest 123 Reversal & Extracting The Trend", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthETT = input(20, minval=1)
Delta = input(0.5)
Trigger = input(0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posETT = ETT(LengthETT,Delta,Trigger)
pos = iff(posReversal123 == 1 and posETT == 1 , 1,
	   iff(posReversal123 == -1 and posETT == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

더 많은