추세 추종 매수 및 매도 전략


생성 날짜: 2023-10-17 12:59:59 마지막으로 수정됨: 2023-10-17 12:59:59
복사: 0 클릭수: 628
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

추세 추종 매수 및 매도 전략

개요

트렌드 추적 구매/판매 전략은 간단한 트렌드를 따르는 일일 거래 전략이다. 이 전략의 기본 아이디어는 이동 평균에 따라 트렌드 방향을 판단하고, 트렌드 속의 흔들림에서 구매/판매하는 것이다.

전략 원칙

이 전략은 간단한 이동 평균 SMA를 사용하여 트렌드 방향을 판단한다. 상승 추세에서 K 선이 낮은 지점을 나타낼 때, 전략은 이전 K 선의 최고 지점을 돌파 할 때 더 많이 한다. 하향 추세에서 K 선이 높은 지점을 나타낼 때, 전략은 이전 K 선의 최저 지점을 돌파 할 때 공백을 한다.

이 전략은 또한 Blanchflower 지표 %K와%D를 사용하여 트렌드를 판단한다. %K가 %D를 통과할 때 평소 위치로 역방향 거래를 한다. 또한, 전략은 MACD와 Signal 곡선을 필터링 조건으로 사용하여 MACD와 Signal이 트렌드 방향에 부합하는 경우에만 거래를 수행한다.

이 전략은 단지 더 많은 공백을 하거나, 단지 공백을 하거나, 동시에 더 많은 공백을 할 수 있다. 시작 날짜는 측정의 시작 달과 해를 설정할 수 있다. 이동 평균 주기, K 주기, D 주기, MACD 파라미터 등과 같은 모든 매개 변수는 사용자 정의할 수 있다.

우위 분석

  • 이동 평균을 사용하여 트렌드 방향을 판단하면 흔들림을 효과적으로 필터링하여 잘못된 거래를 피할 수 있습니다.
  • 블랑치플라워 지표의 적용은 트렌드 반전을 제 시간에 판단하여 위험을 통제할 수 있습니다.
  • MACD와 신호의 필터링은 트렌드 방향에 부합하지 않는 노이즈 거래를 줄여줍니다.
  • 다양한 품종의 가격 행동에 맞게 사용자 정의 가능한 매개 변수
  • 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있으며, 더 많은 것을 할 수 있습니다.

위험 분석

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

  • 이동 평균을 크게 뚫고 큰 손실을 초래할 위험. 이동 평균 주기를 적절히 늘려 위험을 줄일 수 있습니다.
  • 흔들림 트렌드 중 거래 빈도가 오버 트레이딩을 유발한다. %K 사이클을 늘려 거래 빈도를 줄일 수 있다.
  • MACD 및 Signal 파라미터를 잘못 설정하면 필터링이 무효 납니다. 특정 품종에 따라 최적화 파라미터를 사용해야 합니다.
  • 양방향 거래시 여분의 포지션이 축적되어 큰 손실이 발생한다. 포지션 규모를 제한한다.

최적화 방향

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

  • 이동 평균 주기를 최적화하여 추세 판단을 유지하면서 최대한의 흔들림을 필터링하십시오.
  • %K,%D 변수를 최적화하여 포착 트렌드 반전을 유지하면서 휘파람을 줄입니다.
  • 노이즈 트랜잭션을 더 잘 필터링하기 위해 MACD 변수를 최적화합니다.
  • 포지션 통제를 강화하는 것, 예를 들어 고정된 개수 포지션 개설, 부동의 포지션 등
  • 이동 상쇄, 시간 상쇄, ATR 상쇄와 같은 상쇄 전략을 추가합니다.

요약하다

트렌드 추적 거래 전략의 전체적인 아이디어는 명확하고 간단하며, 이동 평균을 통해 트렌드 방향을 판단하고, 지표 필터를 사용하여 트렌드에 있는 거래 기회를 잠금한다. 이 전략은 파라미터 최적화를 통해 좋은 효과를 얻을 수 있지만, 여전히 최적화 된 위험을 줄이고 안정성을 높이기 위해 콤바인 코드 패키징이 필요합니다. 또한, 위험을 제어하기 위해 적절한 최적화가 중요합니다.

전략 소스 코드
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)

// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)

//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal

if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)//	if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
    if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
		strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
    if (k < k[1])
		strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")

if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
    if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
		strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
    if (k > k[1])
		strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)