트렌드를 따르는 구매 및 판매 전략은 트렌드를 따르는 간단한 거래 전략입니다. 전제는 이동 평균에 기반한 트렌드 방향을 결정하고 트렌드의 다이프와 블립을 구매 / 판매하는 것입니다.
이 전략은 트렌드 방향을 결정하기 위해 단순 이동 평균 (SMA) 을 사용합니다. 상승 추세에서
이 전략은 또한 트렌드 결정에 Blanchflower 오시일레이터의 %K 및 %D를 사용합니다. %K가 %D를 넘으면 지위를 닫고 반대 방향으로 거래합니다. 또한 MACD 및 신호 라인은 필터로 작용하여 MACD 및 신호에 의해 결정된 트렌드 방향에 부합하는 거래만 취합니다.
전략은 단기, 단기 또는 둘 다로 이동할 수 있습니다. 시작 달과 연도는 그 시점부터 현재까지 백테스팅을 허용합니다. SMA 기간, %K 기간, %D 기간, MACD 매개 변수 등과 같은 모든 매개 변수는 사용자 정의 가능합니다.
이 전략의 주요 위험은 다음과 같습니다.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
트렌드를 따르는 구매 및 판매 전략은 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)