구매 및 판매 전략의 추세

저자:차오장, 날짜: 2023-10-17 12:59:59
태그:

img

전반적인 설명

트렌드를 따르는 구매 및 판매 전략은 트렌드를 따르는 간단한 거래 전략입니다. 전제는 이동 평균에 기반한 트렌드 방향을 결정하고 트렌드의 다이프와 블립을 구매 / 판매하는 것입니다.

전략 논리

이 전략은 트렌드 방향을 결정하기 위해 단순 이동 평균 (SMA) 을 사용합니다. 상승 추세에서 디프 (dip) 를 제공하는 드 액션에서, 현재의 의 최고가 이전 의 최고를 깨는 경우 전략은 길게 갈 것입니다. 하락 추세에서 블립 (blip) 을 제공하는 드 액션에서, 현재의 의 최저가 이전 의 최저를 깨는 경우 전략은 짧게 갈 것입니다.

이 전략은 또한 트렌드 결정에 Blanchflower 오시일레이터의 %K 및 %D를 사용합니다. %K가 %D를 넘으면 지위를 닫고 반대 방향으로 거래합니다. 또한 MACD 및 신호 라인은 필터로 작용하여 MACD 및 신호에 의해 결정된 트렌드 방향에 부합하는 거래만 취합니다.

전략은 단기, 단기 또는 둘 다로 이동할 수 있습니다. 시작 달과 연도는 그 시점부터 현재까지 백테스팅을 허용합니다. SMA 기간, %K 기간, %D 기간, MACD 매개 변수 등과 같은 모든 매개 변수는 사용자 정의 가능합니다.

이점 분석

  • 트렌드를 결정하기 위해 SMA를 사용하는 것은 윙사와 잘못된 거래를 피합니다.
  • 블랑크플라워 오시레이터를 적용하면 트렌드 반전을 적시에 감지하고 위험을 제어합니다.
  • MACD 및 신호 필터는 트렌드에 반대되는 잡음 거래를 줄입니다.
  • 커스터마이징 가능한 매개 변수는 다른 가격 행동에 적응합니다.
  • 단장, 단장 또는 쌍방향 거래는 시장 체제에 적응합니다

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  • SMA의 거대한 침투로 인해 큰 손실 위험이 있습니다. SMA 기간을 늘려서 위험을 줄일 수 있습니다.
  • 범위에 묶인 시장에서 빈번한 거래 및 과잉 거래. 거래 빈도를 줄이기 위해 %K 기간을 늘릴 수 있습니다.
  • MACD 및 신호 매개 변수 설정의 비효율적 필터링. 기기별 매개 변수를 최적화해야 합니다.
  • 쌍방향 거래로 인해 손실이 발생해서 축적된 큰 포지션

더 나은 기회

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  • 트렌드 탐지 기능을 유지하면서 을 필터하기 위해 SMA 기간을 최적화
  • 윙사브를 줄이는 동시에 트렌드 반전을 포착하기 위해 %K, %D 매개 변수를 최적화
  • 더 효과적인 노이즈 필터링을 위해 MACD 매개 변수를 최적화
  • 포지션 사이즈 컨트롤을 추가합니다. 예를 들어, 고정량, 변동자본의 % 등.
  • 트레일링 스톱, 타임 스톱, ATR 스톱 등 스톱 손실 메커니즘을 추가합니다.

결론

트렌드를 따르는 구매 및 판매 전략은 SMA에 의해 식별되고 지표에 의해 필터링되는 트렌드에 대한 트레이드 풀백을 간단하고 직설적인 논리를 가지고 있습니다. 세밀한 조정 매개 변수 및 위험 통제는 괜찮은 결과를 초래할 수 있지만, 과잉 적합성을 방지하고 안정성을 향상시키기 위해 여전히 조합 캡슐화가 필요합니다. 전반적으로 실용적인 내일 거래 전략입니다.


/*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)


더 많은