
이 전략은 고전적인 트렌드 추적 시스템이다. 그것은 이동 평균의 황금 포크를 사용하여 트렌드 방향을 판단하고, 동치안 통로를 돌파할 때 진입한다. 동치안 통로의 파라미터를 50일로 설정하면, 단기 시장 소음을 효과적으로 필터링 할 수 있다. 이동 평균을 40일과 120일로 설정하면, 지수 이동 평균을 더 잘 잡을 수 있다.
이 전략은 다음과 같은 몇 가지 요인에 기반합니다.
40일 및 120일 지수 이동 평균을 사용하여 트렌드를 판단하는 지표를 구축한다. 빠른 선이 아래에서 느린 선을 통과하면 금색 포크 신호로 상승 추세에 진입하는 것을 나타냅니다. 빠른 선이 위에서 아래로 느린 선을 통과하면 죽은 포크 신호로 하향 추세에 진입하는 것을 나타냅니다.
동천 통로 매개 변수는 50일로 설정되어 있으며, 시장의 단기 변동을 필터링한다. 가격이 상승 궤도를 돌파할 때만 더 많이 하고, 하락 궤도를 돌파할 때만 빈 것으로 설정되어 있다.
스톱로스는 가격 아래의 4배 ATR로 설정한다. ATR은 시장의 변동성과 위험을 효과적으로 측정하고, 스톱로스는 특정 배수로 설정되어 단편 거래의 손실을 제어한다.
지수 이동 평균은 현재의 가격 추세에 더 잘 부합하는 반면, 단순 이동 평균은 지나치게 부드럽다.
50일 통로 기간은 40·120일 평균선과 함께 사용되며, 가짜 돌파구를 효과적으로 필터링할 수 있다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이동 평균 조합은 시장의 경향 방향을 효과적으로 판단할 수 있다. 40일 평균선은 단기 경향을 포착할 수 있고, 120일 평균선은 중장기 경향을 판단할 수 있다.
동천 통로는 소음을 필터링하여 상하를 쫓는 것을 피한다. 가격만 통로를 뚫고 진입하면 거래시장의 중간의 흔들림 영역을 효과적으로 피할 수 있다.
단편적 거래 손실을 통제하고 포지션 파장을 방지하기 위해 합리적으로 설정된 스톱 스포트. 단편적 손실 통제는 수익의 지속성을 보장합니다.
지수 이동 평균은 가격 변화의 추세에 더 적합하며, 시스템의 보유 기간은 더 길 수 있으며, 추세 거래 사상에 적합합니다.
이동 평균 파라미터는 트렌드 포착의 민감성과 필터 잡음의 안정성을 고려한 것이다.
이 전략에는 몇 가지 위험도 있습니다.
장기간 포지션을 보유하는 위험: 이 전략은 추세 추적 전략으로, 장기간 수평 정리 또는 추세가 역전되면 큰 손실에 직면 할 것입니다.
가짜 브레이크 위험: 가격이 통로 근처에 닿을 때, 가짜 브레이크의 비율이 발생할 수 있으며, 이로 인해 불필요한 거래가 발생할 수 있습니다.
매개 변수 설정 위험: 이동 평균과 통로 매개 변수의 설정은 너무 주관적이며, 다른 시장에 따라 매개 변수 조합을 조정해야 하며, 그렇지 않으면 시스템의 안정성에 영향을 줄 수 있다.
스톱포인트 너무 작은 위험: 설정된 스톱포인트 너무 작아서, 너무 많은 스톱포인트 출전을 당하게 되고, 이윤에 영향을 미치게 된다.
대응방법:
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
다양한 평행선의 조합을 테스트하여 최적의 변수 조합을 찾는다. 다양한 단순, 지수, 헐 등의 이동 평균의 조합을 테스트할 수 있다.
채널 사이클과 매개 변수를 최적화하여 브레이크 신호를 더 효율적으로 만듭니다. 시장의 변동 주파수와 결합하여 최적화 할 수 있습니다.
트렌드 실행 중에 트렌드 추적 스톱을 적용하고, 트렌드 종료 후에 고정 스톱을 적용하는 최적화된 스톱 전략.
MACD, KD 등의 지표를 사용하여 다중 인자 검증을 통해 신호의 정확도를 높인다.
포지션 관리 전략을 늘리고, 트렌드 실행 중에 포지션을 늘리고, 수익을 최적화한다.
다양한 품종 특성에 따라 파라미터 조합을 선택하여 시스템 파라미터의 융통성을 강화한다.
이 전략은 전체적으로 트렌드 추적 시스템으로 전형적이고 간단하다. 핵심은 이동 평균의 사용과 통로의 돌파구 필터링이다. 상쇄 전략도 클래식하고 실용적이다. 이 전략은 양적 시스템 개발의 기본 프레임워크로 사용할 수 있으며, 직접 사용할 수 있으며, 수익도 안정적이다. 최적화된 테스트를 통해 시스템의 안정성과 수익률을 더욱 향상시킬 수 있다.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Robrecht99
//@version=5
strategy("Long Term Trend Following System", overlay=true, margin_long=0, margin_short=0, pyramiding=4)
// Backtest Range //
Start = input(defval = timestamp("01 Jan 2017 00:00 +0000"), title = "Backtest Start Date", group = "backtest window")
Finish = input(defval = timestamp("01 Jan 2100 00:00 +0000"), title = "Backtest End Date", group = "backtest window")
//Moving Averages //
len1 = input.int(40, minval=1, title="Length Fast EMA", group="Moving Average Inputs")
len2 = input.int(120, minval=1, title="Length Slow EMA", group="Moving Average Inputs")
src1 = input(close, title="Source Fast MA")
src2 = input(close, title="Source Slow MA")
maFast = input.color(color.new(color.red, 0), title = "Color Fast EMA", group = "Moving Average Inputs", inline = "maFast")
maSlow = input.color(color.new(color.blue, 0), title = "Color Slow EMA", group = "Moving Average Inputs", inline = "maSlow")
fast = ta.ema(src1, len1)
slow = ta.ema(src2, len2)
plot(fast, color=maFast, title="Fast EMA")
plot(slow, color=maSlow, title="Slow EMA")
// Donchian Channels //
Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs")
Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs")
h1 = ta.highest(high[1], Length1)
l1 = ta.lowest(low[1], Length2)
fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs")
upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper")
lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower")
u = plot(h1, "Upper", color=upperColor)
l = plot(l1, "Lower", color=upperColor)
fill(u, l, color=fillColor)
strategy.initial_capital = 50000
//ATR and Position Size //
length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (multiplier * atr))
// Buy and Sell Conditions //
entrycondition1 = ta.crossover(fast, slow)
entrycondition2 = fast > slow
sellcondition1 = ta.crossunder(fast, slow)
sellcondition2 = slow > fast
// Buy and Sell Signals //
if (close > h1 and entrycondition2)
strategy.entry("long", strategy.long, qty=amount)
stoploss = close - atr * 4
strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2)
strategy.close(id="long")
if (close < l1 and sellcondition2)
strategy.entry("short", strategy.short, qty=amount)
stoploss = close + atr * 4
strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2)
strategy.close(id="short")