트렌드에 따라 수익을 창출하는 전략은 장기적인 트렌드와 단기적 인퇴를 탐지하는 것을 목표로 하며, 전반적인 상승 트렌드 중에 장기적인 포지션을 취하고 단기적 인 하락을 포착하며, 합리적인 스톱 로스 및 수익을 취하는 수준을 트렌드를 따라 적시에 수익을 취하도록 설정합니다.
이 전략은 주로 EMA와 RSI를 사용하여 장기 및 단기 트렌드를 결정합니다. 구체적으로, 장기 트렌드를 판단하기 위해 50 일 EMA와 200 일 EMA를 사용하고, 트렌드 강도를 측정하기 위해 RSI를 사용합니다. 장기 트렌드가 상승 추세 (200 일 EMA 상승) 과 강 (RSI 50 이상) 이며 단기 트렌드가 인하 (최후 2 개의 촛불이 낮게 닫습니다) 을 볼 때 긴 포지션을 취합니다.
포지션에 진입한 후 전략은 스톱 로스를 설정하고 이윤을 취합니다. 가격이 진입 가격보다 2x BHD 유닛 이상 상승하면 이윤이 취됩니다. 가격이 진입 가격보다 3x BHD 유닛 이상 떨어지면 포지션은 중단됩니다. BHD 단위는 마지막 200 개의 촛불의 진폭에 따라 계산됩니다.
따라서 전략은 장기 및 단기 트렌드 특성을 완전히 고려하고, 위험을 통제하면서 수익을 증가시키고, 트렌드를 따르면서 적시에 수익을 창출합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
장기 및 단기 동향을 고려하고 강도 지표와 결합하여 다양한 시장에 맹목적으로 진출하는 것을 피합니다.
진입자는 트렌드 방향을 따르고, 승률이 높습니다.
이윤을 취하고 손실을 멈추는 지점은 적시에 이윤을 취하고 위험을 통제 할 수 있습니다.
TP와 SL는 변동성에 기반한 역동적이고 상대적으로 합리적입니다.
백테스트는 기호와 기간에 걸쳐 좋은 수익성과 안정성을 보여줍니다.
단순하고 명확한 논리, 모든 기술 수준에서 이해하기 쉽고 실행하기 쉽습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
잘못된 입구 방향으로 이어지는 장기/단기적 판단 오류
시장의 절벽 같은 추락은 정지점을 뚫을 수 있습니다.
잘못된 파라미터 설정은 성능에 부정적인 영향을 미칩니다.
TP가 너무 꽉 잡혀서 조기 종료될 수도 있습니다.
백테스트 ≠ 라이브 성능, 지속적인 최적화가 필요합니다.
해결책:
매개 변수를 최적화하고, MA 기간을 조정하고, 교차 검증 지표를 추가합니다.
더 넓은 스톱, 위치 크기, 다른 위험 통제.
파라미터들을 평가하기 위한 광범위한 백테스팅
시장 조건에 기반한 동적 TP 최적화
현재 백테스팅, 최적화, 실시간 조정
이 전략은 다음과 같이 더 최적화 될 수 있습니다.
매개 변수 조정, MA 기간, BHD 단위 기간 등
더 나은 단기 정확성을 위해 지표, MACD, KD 등을 추가합니다.
TP/SL 최적화, 변동성에 기반한 동적 크기 등
트렌드 강도에 따라 포지션 크기를 추가합니다.
더 많은 기호와 시간 프레임에서 견고성을 테스트합니다.
포획을 피하기 위해 닫기 가격 > 오픈과 같은 필터를 추가합니다.
더 많은 자동화와 지능을 위해 기계 학습을 통합합니다.
이것은 승률, 수익률, 안정성, 적응력 등을 향상시킬 수 있습니다.
전체적으로 트렌드 전략에서 수익을 취하는 것은 긴 / 짧은 트렌드를 고려하고, 트렌드를 따라, 명확한 TP / SL의 장점을 가지고 있습니다. 그것은 안정적이고 효율적인 트렌드 다음 접근법입니다. 그러나 지속적인 최적화와 라이브 조정을 필요로하는 위험이 있습니다. 논리는 명확하고 구현하기가 쉽습니다. 트레이더에게 연구하고 적용 할 가치가 있습니다. 추가 최적화로 강력한 양 전략이 될 수 있습니다.
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 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/ // © BHD_Trade_Bot // @version=5 strategy( shorttitle = 'Take Profit On Trend', title = 'Take Profit On Trend (by BHD_Trade_Bot)', overlay = true, calc_on_every_tick = true, calc_on_order_fills = true, use_bar_magnifier = true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2021) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) is_back_test_time() => true // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // RSI rsi200 = ta.rsi(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 50) hist = emacd - emacd_signal // BHD Unit bhd_unit = ta.rma(high - low, 200) * 2 bhd_upper = ema200 + bhd_unit bhd_lower = ema200 - bhd_unit // All n candles is going down all_body_decrease(n) => isValid = true for i = 0 to (n - 1) if (close[i] > close[i + 1]) isValid := false break isValid // ENTRY CONDITIONS // Long-term uptrend entry_condition1 = rsi200 > 51 and hist > 0 // Short-term downtrend entry_condition2 = all_body_decrease(2) ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS and is_back_test_time() strategy.entry('entry', strategy.long) // CLOSE CONDITIONS // Price increase 2 BHD unit take_profit = close > strategy.position_avg_price + bhd_unit * 2 // Price decrease 3 BHD unit stop_loss = close < strategy.position_avg_price - bhd_unit * 3 CLOSE_CONDITIONS = take_profit or stop_loss if CLOSE_CONDITIONS strategy.close('entry') // Draw plot(ema50, color=color.orange, linewidth=2) plot(ema200, color=color.purple, linewidth=2) bhd_upper_line = plot(bhd_upper, color=color.teal) bhd_lower_line = plot(bhd_lower, color=color.teal) fill(bhd_upper_line, bhd_lower_line, color=color.new(color.teal, 90))