트렌드 다음 전략은 이동 평균의 교차를 기반으로하는 트렌드 거래 전략이다. 트렌드 방향을 결정하고 그에 따라 거래 신호를 생성하기 위해 기하급수적인 이동 평균 (EMA) 과 허ల్ 이동 평균 (HMA) 의 교차를 사용합니다. 전략은 단기 오스실레이션보다는 장기적인 가격 추세를 따르는 것을 목표로합니다.
이 전략은 다른 매개 변수와 함께 두 개의 이동 평균을 사용합니다: 더 빠른 EMA와 더 느린 HMA. EMA는 가격 변화에 더 빨리 반응하고 단기 트렌드를 판단하는 데 사용됩니다. HMA는 더 느리게 반응하고 장기 트렌드 방향을 추적합니다.
더 빠른 EMA가 느린 HMA를 넘을 때, 그것은 상승 추세의 시작으로 간주되며, 전략은 다음 바 오픈에서 시장 가격에 긴 주문을 할 것입니다. EMA가 HMA 아래에 넘을 때, 그것은 하락 추세의 시작으로 간주되며, 전략은 다음 바 오픈에서 시장 가격에 짧게됩니다.
입시 시기를 최적화하기 위해 전략에는 하이킨-아시 옵션이 포함되어 있습니다. 활성화되면 구매 및 판매 신호는 일반적인 촛불 대신 하이킨-아시 바를 기반으로합니다. 하이킨-아시 바는 원래 촛불에서 단기 가격 변동을 필터링하여 잘못된 신호를 줄일 수 있습니다.
이 전략은 또한 스톱 로스 설정을 사용합니다. 포지션 손실이 미리 설정된 스톱 로스 비율에 도달하면 포지션은 시장 가격으로 종료되며 거래당 최대 손실을 제한합니다.
이 전략의 장점은 다음과 같습니다.
트렌드를 결정하기 위해 EMA와 HMA의 크로스오버를 사용하면 다른 기간 이동 평균을 활용하고 정확도를 향상시킬 수 있습니다.
트렌드를 기반으로 하는 거래는 소소한 변동에 대한 혼란을 피하고 불필요한 거래를 줄입니다.
하이킨-아시 옵션은 잘못된 신호를 필터링하여 입력 시기를 최적화합니다.
이동 스톱 손실은 거래당 최대 손실을 효과적으로 제한합니다.
사용자 정의 가능한 매개 변수는 다양한 제품과 시간 프레임에 대한 최적화를 허용합니다.
이 전략의 위험은 다음과 같습니다.
트렌드를 따라가는 시스템으로서, 범위에 묶인 시장에서는 실적이 떨어집니다.
트렌드가 뒤집어지면 큰 손실이 발생할 수 있습니다.
부적절한 스톱 손실 설정은 불필요한 스톱을 유발하거나 손실을 증폭시킬 수 있습니다.
잘못된 매개 변수 조정은 과잉 거래 또는 무작위로 이어질 수 있습니다.
EMA와 HMA 기간은 다른 제품과 시간 프레임에 최적화가 필요합니다.
하이킨-아시는 거짓 탈출의 위험을 완전히 피할 수 없습니다.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
트렌드 정확성을 높이기 위해 MACD, KDJ와 같은 더 많은 지표를 활용하십시오.
더 많은 필터를 추가해 볼륨, ATR 같은 것을 추가하면 잘못된 브레이크를 줄일 수 있습니다.
제품과 시간 프레임에 기반한 이동 평균의 매개 변수를 최적화합니다.
더 나은 스톱 로스 동작을 위해 스톱 로스 비율을 조정합니다.
이윤 취득 기능, 예를 들어 이윤 정지 이동 및 부분 이윤 취득을 고려하십시오.
최적화를 위한 위치 비용 기초를 계산하는 대안 방법을 테스트합니다.
트렌드 다음 전략은 이동 평균 크로스오버를 사용하여 트렌드를 식별하고 하이킨-아시 및 이동 스톱 손실을 통해 성능을 최적화합니다. 중장기 트렌드 거래에 적합하며 매개 변수 조정 및 기능 확장으로 더욱 향상 될 수 있습니다. 그러나 사용자는 반전 및 부적절한 스톱 손실의 위험을 인식해야합니다. 전반적으로 다른 제품과 시간 프레임에 걸쳐 작동하는 트렌드 거래에 대한 보편적이고 사용자 정의 가능한 프레임워크를 제공합니다. 적절한 매개 변수 테스트가 적용될 때 필요합니다.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("𝐉𝐔𝐈𝐂𝐘 𝐓𝐑𝐄𝐍𝐃", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=15) //Heikin Ashi Option ha = input(true, title = "Heikin Ashi Source") src = ha ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, barmerge.gaps_off, barmerge.lookahead_off) : close usestoploss = input(true, title="Stop Loss") //EMA len1 = input.int(9, minval=1, title="EMA Length") ema = ta.ema(src, len1) emaline = plot(ema, title="EMA", color=color.blue, linewidth=2) //HMA len2 = input.int(69, minval=1, title="HMA Length") hma = ta.wma(2*ta.wma(src, len2/2)-ta.wma(src, len2), math.floor(math.sqrt(len2))) hmaline = plot(hma, title="HMA", color=color.purple, linewidth=2) fillcolor = hma < ema ? color.blue : color.purple fill(emaline, hmaline, title="EMA Fill", color=color.new(fillcolor, 80), editable=true) //Stop Loss Conditions stoplosspercent = input.float(title="Stop Loss (%)", defval=-6.5, minval=-50, maxval=0, step=.1) / 100 stoploss = strategy.position_avg_price * (1 + stoplosspercent) stop = stoploss > close and stoploss[1] < close[1] and strategy.position_size > 0 and usestoploss //Buy Sell Conditions buy = hma < ema sell = hma > ema //Trades and Alerts if buy strategy.entry("Long Position", strategy.long, comment="BUY") // alert("{\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if sell and strategy.openprofit > 0 strategy.close("Long Position", comment="SELL") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if stop strategy.close("Long Position", comment="STOP") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) //Alternate Labels var pos = 0 if buy and pos <= 0 pos := 1 if sell and pos >= 0 pos := -1 buylabel = pos == 1 and (pos != 1)[1] selllabel = pos == -1 and (pos != -1)[1] //Plot Labels plotshape(buylabel, style=shape.labelup, location=location.belowbar, color=color.blue, text="BUY", textcolor=color.white, size=size.tiny) plotshape(selllabel, style=shape.labeldown, location=location.abovebar, color=color.purple, text="SELL", textcolor=color.white, size=size.tiny) plotshape(stop, style=shape.labeldown, location=location.abovebar, color=color.yellow, text="STOP", textcolor=color.white, size=size.tiny)