듀얼 트렌드 팔로잉 양적 전략


생성 날짜: 2024-02-27 15:54:24 마지막으로 수정됨: 2024-02-27 15:54:24
복사: 0 클릭수: 579
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

듀얼 트렌드 팔로잉 양적 전략

개요

이 전략의 핵심 아이디어는 123 역전 전략과 무지개 진동기 지표를 결합하여 전략의 성공률을 높이기 위해 이중 트렌드 추적을 구현하는 것입니다. 이 전략은 단기 및 중기 가격 트렌드를 추적하여 포지션을 동적으로 조정하여 대장 이상의 초과 수익을 달성합니다.

전략 원칙

이 전략은 두 부분으로 구성되어 있습니다.

  1. 123 역전략: 만약 지난 2일 종결값이 하락하고 오늘 종결값이 상승하고 9일 슬로 K 라인이 50보다 낮다면, 더 많은 것을; 만약 지난 2일 종결값이 상승하고 오늘 종결값이 하락하고 9일 패스트 K 라인이 50보다 높다면, 공백을 다.

  2. 무지개 진동기 지표: 이 지표는 이동 평균에 대한 가격의 편차를 나타냅니다. 지표가 80 이상이면 시장이 불안정해지는 것을 나타냅니다. 지표가 20 이하이면 시장이 역전되는 것을 나타냅니다.

이 전략은 둘을 결합하고, 동시에 더 많은 코스피 신호가 발생했을 때 포지션을 열고, 그렇지 않으면 포지션을 평정한다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이중 필터링으로 신호 품질을 높이고 오차율을 낮춘다.
  2. 동적으로 포지션을 조정하여 일방적인 손실을 줄여줍니다.
  3. 단기 및 중기 지표를 통합하여 전략적 안정성을 높여라.

위험 분석

이 전략에는 다음과 같은 위험도 있습니다.

  1. 매개 변수 최적화가 잘못되면 과합이 발생할 수 있습니다.
  2. 이중 포지션은 거래 비용을 증가시킵니다.
  3. 금고의 가격이 급격하게 변동할 때, 스톱피스 포인트는 쉽게 뚫릴 수 있다.

이러한 위험은 변수 조정, 포지션 관리를 최적화, 합리적인 스톱로스 설정으로 줄일 수 있습니다.

최적화 방향

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

  1. 최적화된 변수를 찾아서 최적의 변수 조합을 찾습니다.
  2. 포지션 관리 모듈을 추가하여 변동률과 회수 동력에 따라 포지션을 조정합니다.
  3. 스톱 손실 모듈을 추가하고, 이동 스톱 손실을 합리적으로 설정한다.
  4. 트렌드 전환점을 판단하는 데 도움이 되는 기계 학습 알고리즘을 추가합니다.

요약하다

이 전략은 123 역전 전략과 무지개 진동기 지표를 통합하여, 두 개의 트렌드 추적을 구현하고, 높은 안정성을 유지하면서도, 약간의 초과 수익의 여지가 있습니다. 지속적인 최적화를 통해, 전략 수익률을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/05/2021
// 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
// Ever since the people concluded that stock market price movements are not 
// random or chaotic, but follow specific trends that can be forecasted, they 
// tried to develop different tools or procedures that could help them identify 
// those trends. And one of those financial indicators is the Rainbow Oscillator 
// Indicator. The Rainbow Oscillator Indicator is relatively new, originally 
// introduced in 1997, and it is used to forecast the changes of trend direction.
// As market prices go up and down, the oscillator appears as a direction of the 
// trend, but also as the safety of the market and the depth of that trend. As 
// the rainbow grows in width, the current trend gives signs of continuity, and 
// if the value of the oscillator goes beyond 80, the market becomes more and more 
// unstable, being prone to a sudden reversal. When prices move towards the rainbow 
// and the oscillator becomes more and more flat, the market tends to remain more 
// stable and the bandwidth decreases. Still, if the oscillator value goes below 20, 
// the market is again, prone to sudden reversals. The safest bandwidth value where 
// the market is stable is between 20 and 80, in the Rainbow Oscillator indicator value. 
// The depth a certain price has on a chart and into the rainbow can be used to judge 
// the strength of the move.
//
// 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


RO(Length, LengthHHLL) =>
    pos = 0.0
    xMA1 = sma(close, Length)
    xMA2 = sma(xMA1, Length)
    xMA3 = sma(xMA2, Length)
    xMA4 = sma(xMA3, Length)
    xMA5 = sma(xMA4, Length)
    xMA6 = sma(xMA5, Length)
    xMA7 = sma(xMA6, Length)
    xMA8 = sma(xMA7, Length)
    xMA9 = sma(xMA8, Length)
    xMA10 = sma(xMA9, Length)
    xHH = highest(close, LengthHHLL)
    xLL = lowest(close, LengthHHLL)
    xHHMAs = max(xMA1,max(xMA2,max(xMA3,max(xMA4,max(xMA5,max(xMA6,max(xMA7,max(xMA8,max(xMA9,xMA10)))))))))
    xLLMAs = min(xMA1,min(xMA2,min(xMA3,min(xMA4,min(xMA5,min(xMA6,min(xMA7,min(xMA8,min(xMA9,xMA10)))))))))
    xRBO = 100 * ((close - ((xMA1+xMA2+xMA3+xMA4+xMA5+xMA6+xMA7+xMA8+xMA9+xMA10) / 10)) / (xHH - xLL))
    xRB = 100 * ((xHHMAs - xLLMAs) / (xHH - xLL))
    pos:= iff(xRBO > 0, 1,
           iff(xRBO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Rainbow Oscillator", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Rainbow Oscillator ----")
LengthRO = input(2, minval=1)
LengthHHLL = input(10, minval=2, title="HHV/LLV Lookback")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posRO = RO(LengthRO, LengthHHLL)
pos = iff(posReversal123 == 1 and posRO == 1 , 1,
	   iff(posReversal123 == -1 and posRO == -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 )