
이 전략은 동력 기술에 기반한, ATR을 이용한 일간 흔들림 거래 전략이다. 이 전략은 스테이블리의 코리 호앙에 의해 제작되었다.
동력 지표를 사용하여 트렌드 방향을 파악하고, ATR 지표와 결합하여 스톱로스 라인을 설정하여, 낮은 가격과 높은 가격의 충격 거래 전략을 달성합니다.
코드는 먼저 측정 시간 범위를 설정합니다.
다음으로 지수 부분에서 다음과 같은 지수를 계산합니다.
트렌드를 판단하는 주요 논리는 다음과 같습니다.
만약 close가 이전 하락의 스톱 라인 vstop보다 높으면 상승 트렌드로 판단되며, close가 이전 상승의 스톱 라인 vstop보다 낮으면 하락 트렌드로 판단된다.
동향이 바뀌면 스톱 라인의 위치를 조정한다.
구체적으로, 상승 추세에 있어서는, 스톱 로프는 이전 K선 최고 가격과 ATR의 수를 것으로 설정된다. 하향 추세에 있어서는, 스톱 로프는 이전 K선 최저 가격과 ATR의 수를 더하여 설정된다.
트렌드 트래킹 스톱 손실을 달성할 수 있습니다.
거래 규칙 부분에서는, 스톱로스 라인을 뚫고 포지션을 열 때 더 많은 코오피를 한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
다음의 몇 가지 측면에서 최적화할 수 있습니다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
다양한 ATR 변수를 테스트하여 최적의 변수 조합을 찾습니다. 여러 개의 변수를 다시 테스트하여 수익 위험 비율을 평가할 수 있습니다.
ATR에 기반한 변동률 지표와 결합한 손해 줄 최적화 . 변동률 지표를 도입하여 변동이 커지면 적절하게 손해 줄 수 있다.
트렌드 필터링과 함께, 흔들리는 시장을 피하기 위해 포지션을 열 필요가 없습니다. 트렌드 판단 지표를 증가시킬 수 있으며, 트렌드가 명확한 경우에만 포지션을 열 수 있습니다.
포지션 관리 메커니즘을 추가한다. 포지션은 자금 사용률, 연속 상쇄 횟수 등에 따라 조정할 수 있다.
야간 간격 리스크 관리를 강화한다. 종결 전에 적극적으로 손실을 막아 야간 간격 가격의 폭등을 방지한다.
이 전략은 기초적인 일일 흔들림 거래 전략으로, 전체적인 생각은 명확하며, 동력 기술 사용으로 추세를 판단하고, ATR 지표를 사용하여 슬라이드 트래킹 스톱로스를 수행하여 위험을 효과적으로 제어 할 수 있습니다.
최적화 할 수있는 여지가 많으며 추세를 판단하고, 손실을 막고, 포지션을 관리하는 등의 여러 측면에서 개선 할 수 있습니다. 전략은 실물 거래에 더 적합합니다.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
/////////////////////////////////////////////////////////////
//START - SET DATE RANGE
// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay = input(defval = 1, title = "From Day", minval = 1)
FromYear = input(defval = 2010, title = "From Year")
ToMonth = input(defval = 12, title = "To Month", minval = 1)
ToDay = input(defval = 31, title = "To Day", minval = 1)
ToYear = input(defval = 2020, title = "To Year")
startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true
/////////////////////////////////////////////////////////////
//END - SET DATE RANGE
/////////////////////////////////////////////////////////////
//START - INDICATORS
length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)
/////////////////////////////////////////////////////////////
//END - INDICATORS
/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange
strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)
/////////////////////////////////////////////////////////////
//END - TRADING RULES