
트리플 초상승승평선 돌파 전략은 여러 다른 변수 설정을 이용한 초상승승평선과 defines의 EMA를 이용하여 트렌드 방향을 파악하고 거래를 하는 전략이다. 이 전략의 주요 아이디어는 적어도 두 개의 초상승평선선이 defines의 EMA선 위에 다목적 상태를 나타낼 때 다목적 상태를 구축하는 것이다. 적어도 두 개의 초상승평선선이 defines의 EMA선 아래에 공허 상태를 나타낼 때 공허 상태를 구축하는 것이다.
이 전략은 3개의 다른 변수를 가진 초상향 평균선과 큰 경향의 방향을 정의하는 EMA를 설정하여 포지션 구축과 포지션을 판단합니다:
세 개의 초 트렌드 평행선을 supertrend1, supertrend2, supertrend3로 설정합니다. 색상은 각각 초록색으로 상승 추세를 나타내고, 빨간색으로 하향 추세를 나타냅니다.
EMA 평평한 이동 평균 ematrend을 설정하여 큰 트렌드를 정의합니다. 세 개의 초 트렌드 평균선이 모두 이 EMA보다 높을 때 큰 상장 다면 트렌드로 정의되며, 반대로 공허 트렌드로 정의됩니다.
적어도 두 개의 초상향평균선이 대판 다머리 상태에서 동시에 다머리 ((녹색) 을 표시하면 방향값이 0보다 작을 때 다머리 신호로 판단한다. 적어도 두 개의 초상향평균선이 대판 공허 상태에서 동시에 공허 (붉은) 을 표시하면 방향값이 0보다 크면 공허 신호로 판단한다.
다음으로 신호가 나오면 상장/공백을 한다.
고정 스톱은 리스크 수익률, 즉 수익률이 3; 이동 스톱은 하락 한 ATR 즉 스톱이다.
스톱로스 또는 스프레이드 조건이 발생했을 때 포지션을 청산하십시오.
이 전략은 다음과 같은 장점을 가지고 있습니다.
트리플 초트렌드 평균선과 결합된 트렌드를 판단하는 EMA를 사용하여 트렌드 신호를 효과적으로 식별할 수 있다.
다공간 조건부 판단 규칙은 명확하고, 이해하기 쉽고, 구현하기 쉽다.
모바일 스톱 및 고정 스톱을 설정하여 위험을 효과적으로 제어한다.
필요에 따라 초변수를 조정할 수 있고, 전략을 최적화할 수 있다.
이 전략에는 위험도 있습니다.
초변수 설정을 잘못하면 좋은 거래 기회를 놓치게 될 수 있다. 다른 ATR 주기, ATR 배수, EMA 주기 변수를 테스트할 수 있다.
돌파 실패의 확률이 존재하고, 초변수를 조정하여 확률을 줄일 수 있다.
중지 또는 중지 설정이 너무 느슨하면 손실 확률이 증가합니다. 중지 범위를 적절히 좁혀야합니다.
복사 데이터는 과도한 적합 문제를 일으킬 수 있다. 다시장 다주기 테스트에 주의를 기울여야 한다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
최적의 초변수 조합을 테스트한다. 다양한 ATR 주기, ATR 곱수, EMA 평균 주기들을 조합하여 최적의 변수를 찾는다.
거래 품종을 추가하십시오. 전략의 효과를 확인하기 위해 주식, 디지털 화폐와 같은 다양한 품종을 추가 할 수 있습니다.
다른 지표와 함께 필터링 신호. 예를 들어, RSI, MACD와 같은 지표가 트렌드 신호를 잘못 읽지 않도록 추가 할 수 있습니다.
손해 막기 메커니즘을 최적화한다. ATR/변동률 변화에 따른 손해 막기 방법을 테스트할 수 있다.
트리플 초트렌드 평균선 돌파 전략은 전체적으로 비교적 간단하고 실용적인 트렌드 추적 전략이다. 그것은 동시에 여러 초트렌드 평균선과 트렌드 판단 EMA를 결합하여 기회를 발굴하고 위험을 효과적으로 제어한다. 매개 변수 최적화 및 규칙 최적화를 통해 더 나은 효과를 얻을 수 있다. 이 전략은 이해하기 쉽고 학습 가치가 있다.
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
// author=theasgard and moonshot-indicator (ms)
// year 2021
//
// This is a well knowen strategy by using 3 different Supertrends and a trend-defining EMA,
// feel free to play around with the settings, a backtest on 8h ETHUSDT pair brought some good results using
// the 233EMA and investing 75% of a 10k start capital
//
// the idea is to have at least 2 supertrnds going green above the trend-EMA to go long and exit by turning
// 2 supertrends red (idea: 1 supertrend in red could initialize a take profit)
// shorts work vice versa
// The EMA shows in green for uptrends and in red for downtrends, if it is blue no Signal will be taken because
// the 3 supertrends are not all above or below the trendline(EMA)
//
// Update 1:
// Fixed a minor input error
// Added ATR stoploss, and commented out the percentage stop loss
// Added time window to backtest
// Added exit on risk/revard is met
// This version is only buy...wait for next update adding shorts
strategy("ms hypertrender", overlay=true)
// set up 3 supertrendlines and colour the direction up/down
atrPeriod1 = input(10, "ATR Length 1")
factor1 = input.float(1.0, "ATR Factor 1", step = 0.01)
[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend 1", color = color.green, style=plot.style_linebr)
downTrend1 = plot(direction1 < 0? na : supertrend1, "Down Trend 1", color = color.red, style=plot.style_linebr)
atrPeriod2 = input(11, "ATR Length 2")
factor2 = input.float(2.0, "ATR Factor 2", step = 0.01)
[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend 2", color = color.green, style=plot.style_linebr)
downTrend2 = plot(direction2 < 0? na : supertrend2, "Down Trend 2", color = color.red, style=plot.style_linebr)
atrPeriod3 = input(12, "ATR Length 3")
factor3 = input.float(3.0, "ATR Factor 3", step = 0.01)
[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend 3", color = color.green, style=plot.style_linebr)
downTrend3 = plot(direction3 < 0? na : supertrend3, "Down Trend 3", color = color.red, style=plot.style_linebr)
//set up the trend dividing EMA and color uptrend nutreal downtrend
len = input.int(233, minval=1, title="Trend-EMA Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
//general Bull or Bear Trend? Visualized by ema
ematrend = ta.ema(src, len)
generaluptrend = supertrend1 > ematrend and supertrend2 > ematrend and supertrend3 > ematrend
generaldowntrend = supertrend1 < ematrend and supertrend2 < ematrend and supertrend3 < ematrend
emacolor = if generaluptrend
color.green
else if generaldowntrend
color.red
else
color.blue
plot(ematrend, title="EMA", color=emacolor, linewidth=3, offset=offset)
// Bullish? min 2 supertrends green
bullish = (direction1 < 0 and direction2 < 0) or (direction1 < 0 and direction3 < 0) or (direction2 < 0 and direction3 < 0) and generaluptrend
extremebullish = direction1 < 0 and direction2 < 0 and direction3 < 0 and generaluptrend //all 3 green
// Bearish? min 2 supertrends red
bearish = (direction1 > 0 and direction2 > 0) or (direction1 > 0 and direction3 > 0) or (direction2 > 0 and direction3 > 0) and generaldowntrend
extremebearish = direction1 > 0 and direction2 > 0 and direction3 > 0 and generaldowntrend //all 3 red
// Open Long
//plotchar(((bullish and not bullish[1]) or (extremebullish and not extremebullish[1])) and (emacolor==color.green)? close : na, title = 'Start Long', char='▲', color = #80eb34, location = location.belowbar, size = size.small)
// TP 10% Long
TP10long = ((generaluptrend and bullish[1]) or (generaluptrend and extremebullish[1])) and (direction1 > 0 or direction2 > 0 or direction3 > 0)
//plotchar(TP10long and not TP10long[1]? close : na, title = 'TP on Long', char='┼', color = #ffd000, location = location.abovebar, size = size.tiny)
// Exit Long
//plotchar(extremebearish and not extremebearish[1] or bearish and not bearish[1]? close : na, title = 'Close all Longs', char='Ꭓ', color = #ff0037, location = location.abovebar, size = size.tiny)
stopsupertrendup = if supertrend1 < supertrend2 and supertrend1 < supertrend3
(supertrend1)
else if supertrend2 < supertrend1 and supertrend2 < supertrend3
(supertrend2)
else if supertrend3 < supertrend1 and supertrend3 < supertrend2
(supertrend3)
lowestLows = ta.lowest(low, 1)
// Open Short
//plotchar(((bearish and not bearish[1]) or (extremebearish and not extremebearish[1])) and (emacolor==color.red)? close : na, title = 'Start Short', char='▼', color = #0547e3, location = location.abovebar, size = size.small)
// TP 10% Short
TP10short = ((generaldowntrend and bearish[1]) or (generaldowntrend and extremebearish[1])) and (direction1 < 0 or direction2 < 0 or direction3 < 0)
//plotchar(TP10short and not TP10short[1]? close : na, title = 'TP on Short', char='┼', color = #ffd000, location = location.belowbar, size = size.tiny)
// Exit Short
//plotchar(extremebullish and not extremebullish[1] or bullish and not bullish[1]? close : na, title = 'Close all Shorts', char='Ꭓ', color = #ff0037, location = location.belowbar, size = size.tiny)
stopsupertrenddown = if supertrend1 > supertrend2 and supertrend1 > supertrend3
(supertrend1)
else if supertrend2 > supertrend1 and supertrend2 > supertrend3
(supertrend2)
else if supertrend3 > supertrend1 and supertrend3 > supertrend2
(supertrend3)
highestHighs = ta.highest(high,1)
// Set stop loss level with input options (optional)
//longLossPerc = input.float(title="Long Stop Loss (%)",
// minval=0.0, step=0.1, defval=1) * 0.01
//shortLossPerc = input.float(title="Short Stop Loss (%)",
// minval=0.0, step=0.1, defval=1) * 0.01
// Determine stop loss price
//longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
//shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
openlong = (extremebullish and not extremebullish[1]) and (emacolor==color.green)//(((bullish and not bullish[1]) or
openshort = (extremebearish and not extremebearish[1]) and (emacolor==color.red)//(((bearish and not bearish[1]) or
exitlong = lowestLows<(stopsupertrendup - ((stopsupertrendup / 100) * 0.1)) //(extremebearish and not extremebearish[1] or bearish and not bearish[1]) or TP10long or
exitshort = highestHighs>(stopsupertrenddown - ((stopsupertrenddown / 100) * 0.1)) //(extremebullish and not extremebullish[1] or bullish and not bullish[1]) or TP10short
//strategy.entry("buy", strategy.long, when=openlong)
//strategy.entry("sell", strategy.short, when=openshort)
//strategy.close("buy", when=exitlong)
//strategy.close("sell", when=exitshort)
// Submit exit orders based on calculated stop loss price
//if (strategy.position_size > 0)
// strategy.exit(id="Long Stop", stop=longStopPrice)
//if (strategy.position_size < 0)
// strategy.exit(id="Short Stop", stop=shortStopPrice)
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time")
USE_ENDTIME = input(false,title="Define the ending period for backtests (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Mar 2021 19:30 +0000"), title = "Backtest End Time")
TARGET_PROFIT_MODE = input(false,title="Exit when Risk:Reward met")
REWARD_RATIO = input(3,title="Risk:[Reward] (i.e. 3) for exit")
// Trailing stop loss {
TSL_ON = input(true,title="Use trailing stop loss")
var entry_price = float(0)
ATR_multi_len = 26
ATR_multi = input(2, "ATR multiplier for stop loss")
ATR_buffer = ta.atr(ATR_multi_len) * ATR_multi
plotchar(ATR_buffer, "ATR Buffer", "A", location = location.top)
risk_reward_buffer = (ta.atr(ATR_multi_len) * ATR_multi) * REWARD_RATIO
take_profit_long = low > entry_price + risk_reward_buffer
take_profit_short = low < entry_price - risk_reward_buffer
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
stop_loss_price := math.max(stop_loss_price, close - trailing_SL_buffer)
// plot TSL line
trail_profit_line_color = color.green
if strategy.position_size == 0 or not TSL_ON
trail_profit_line_color := color.black
stop_loss_price := close - trailing_SL_buffer
plot(stop_loss_price,color=trail_profit_line_color)
// }
if true
buy_condition = openlong
exit_condition = exitlong
//ENTRY:
if buy_condition
if strategy.position_size == 0
entry_price := close
trailing_SL_buffer := ATR_buffer
stop_loss_price := close - ATR_buffer
msg = "entry"
if strategy.position_size > 0
msg := "pyramiding"
strategy.entry("Long",strategy.long, comment=msg)
//EXIT:
// Case (A) hits trailing stop
if TSL_ON and strategy.position_size > 0 and close <= stop_loss_price
if close > entry_price
strategy.close("Long", comment="take profit [trailing]")
else if close <= entry_price
strategy.close("Long", comment="stop loss")
// Case (B) take targeted profit relative to risk
if strategy.position_size > 0 and TARGET_PROFIT_MODE
if take_profit_long
strategy.close("Long", comment="take profits [risk:reward]")
// Case (C)
if strategy.position_size > 0 and exit_condition
if take_profit_long
strategy.close("Long", comment="exit[rsi]")