이 전략은 간단한 이동평균 (SMA) 교차와 트레이드 필터링에 기반한 자동화 거래 시스템이다. 빠른 및 느린 SMA의 교차를 활용하여 입력 신호를 생성하고 트레이드 지표를 결합하여 트렌드 강도를 확인합니다. 전략에는 또한 동적 인 스톱 손실 및 스톱 포트 메커니즘과 시간 기반의 출퇴 조건이 포함되어 있으며 위험 관리를 최적화하고 수익성을 높이기 위해 고안되었습니다.
이 전략의 핵심 원칙은 다음과 같은 몇 가지 핵심 요소에 기반합니다.
SMA 교차 신호:
거래량 필터링:
동적 중단 및 중단:
시간적 기본 탈퇴:
재검토 기간 동안 설정:
트렌드 트래킹과 동력 결합: 이 전략은 SMA 교차와 거래량 필터링을 결합하여 강력한 트렌드 시장을 포착할 수 있으며, 약한 시장에서 자주 거래하는 것을 피할 수 있습니다.
유연한 위험 관리: 동적 스톱 손실 및 스톱 포트 메커니즘은 전략이 시장 변동에 따라 자동으로 위험 노출을 조정하도록 허용하여 수익을 보호하고 잠재적 손실을 제한하는 데 도움이됩니다.
자금 보유를 막기 위해: 최대 보유 기간 제한은 전략이 불리한 시장 조건에서 장기적으로 손실 입지를 보유하는 것을 방지하고 자금의 효율적인 사용을 촉진하는 데 도움이됩니다.
사용자 정의 가능: 여러 가지 조정 가능한 매개 변수 (SMA 주기, Stop Loss Holding Percentage, 최대 보유 시간 등) 는 전략이 다른 시장과 거래 스타일에 따라 최적화 될 수 있도록합니다.
시각화 지원: 전략은 그래프에 SMA 라인과 거래 신호를 그려서 전략의 성능을 직관적으로 이해하고 분석합니다.
뒤쳐져있는 것: SMA 지표는 본질적으로 뒤떨어져 있으며, 급격히 반전되는 시장에서 지연된 진입 또는 놓친 기회를 초래할 수 있다.
가짜 돌파구 위험: 이변 시장에서, SMA 교차는 빈번한 가짜 파헤팅 신호를 생성할 수 있으며, 과도한 거래와 거래 비용을 증가시킬 수 있다.
거래액은 다음과 같습니다: 거래량 지표에 과도하게 의존하는 것은 특정 시장 조건에서 특히 유동성이 낮거나 거래량이 비정상적 인 시기에 전략에 오류를 일으킬 수 있습니다.
고정된 비율의 손해/손해배상: 고정된 비율의 손해배상 및 손해배상 차단은 모든 시장 조건에 적합하지 않을 수 있으며, 특히 변동성이 급격하게 변하는 시기에 적합할 수 있다.
시간적 기준으로 출퇴할 수 있는 한계: 고정된 최대 보유 기간은 유리한 추세가 아직 끝나지 않은 상태에서 조기 평형으로 이어질 수 있으며 잠재적인 수익에 영향을 미칩니다.
동적 매개 변수 조정: 다양한 시장 주기와 변동성에 적응하기 위해 SMA 주기와 Stop Loss Stop Loss 비율 및 최대 보유 기간의 동적 조정을 구현합니다.
추가 필터를 포함합니다: 다른 기술 지표 (RSI, MACD 등) 를 추가 필터링 조건으로 도입하여 거래 신호의 정확성을 향상시킵니다.
트랜잭션 기준에 적응: 동적으로 조정되는 거래량 기준을 개발하여 다른 시장 단계의 거래량 특성에 더 잘 적응합니다.
더 나은 탈퇴 메커니즘: 시장 구조 또는 동력 지표에 기반한 스마트 탈퇴 메커니즘을 탐구하여 고정 시간 탈퇴를 대체하고 전략의 적응성을 향상시킵니다.
유동성 조정: 시장의 변동에 기반한 동적 스톱 로지 및 스톱 포지션 레벨 조정을 구현하여 위험을 더 잘 관리하고 수익을 캡처합니다.
여러 시간 프레임 분석: 여러 시간 프레임의 데이터 분석을 통합하여 전략의 시장 추세와 역전을 식별하는 능력을 향상시킵니다.
기계 학습 최적화: 기계 학습 알고리즘을 사용하여 전략 매개 변수를 동적으로 최적화하여 다른 시장 환경에서 전략의 성능을 향상시킵니다.
/*backtest start: 2024-06-30 00:00:00 end: 2024-07-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Simple_CrossOver_Bot_V1_EBO", overlay=true) // INPUTS dateStart_Year = input.int(2018, title="Start Year", minval=2000) dateStart_Month = input.int(1, title="Start Month", minval=1, maxval=12) dateStart_Day = input.int(1, title="Start Day", minval=1, maxval=31) dateEnd_Year = input.int(2019, title="End Year", minval=2000) dateEnd_Month = input.int(1, title="End Month", minval=1, maxval=12) dateEnd_Day = input.int(1, title="End Day", minval=1, maxval=31) fast_SMA_input = input.int(7, title="SMA Fast") slow_SMA_input = input.int(25, title="SMA Slow") volume_SMA_input = input.int(20, title="Volume SMA") stop_loss_percent = input.float(1.0, title="Stop Loss (%)", step=0.1) / 100 take_profit_percent = input.float(2.0, title="Take Profit (%)", step=0.1) / 100 max_bars_in_trade = input.int(50, title="Max Bars in Trade", minval=1) // INDICATORS fast_SMA = ta.sma(close, fast_SMA_input) slow_SMA = ta.sma(close, slow_SMA_input) volume_SMA = ta.sma(volume, volume_SMA_input) // STRATEGY LONG = ta.crossover(fast_SMA, slow_SMA) and fast_SMA > slow_SMA and volume > volume_SMA SHORT = ta.crossunder(fast_SMA, slow_SMA) and fast_SMA < slow_SMA and volume < volume_SMA // TRIGGERS testPeriodStart = timestamp(dateStart_Year, dateStart_Month, dateStart_Day) testPeriodEnd = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day) timecondition = true // Track bar index for entries var int long_entry_bar_index = na var int short_entry_bar_index = na if timecondition if LONG strategy.entry(id="LONG", direction=strategy.long) long_entry_bar_index := bar_index if SHORT strategy.entry(id="SHORT", direction=strategy.short) short_entry_bar_index := bar_index // Exit conditions for LONG if not na(long_entry_bar_index) and bar_index - long_entry_bar_index >= max_bars_in_trade strategy.close("LONG") long_entry_bar_index := na // Exit conditions for SHORT if not na(short_entry_bar_index) and bar_index - short_entry_bar_index >= max_bars_in_trade strategy.close("SHORT") short_entry_bar_index := na // Standard exits if LONG strategy.exit("Exit LONG", from_entry="LONG", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_percent)) if SHORT strategy.exit("Exit SHORT", from_entry="SHORT", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_percent)) // PLOTS plot(fast_SMA, color=color.green, linewidth=1, title="Fast SMA") plot(slow_SMA, color=color.yellow, linewidth=1, title="Slow SMA") plot(volume_SMA, color=color.blue, linewidth=1, title="Volume SMA") plotshape(series=LONG, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small) plotshape(series=SHORT, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small) // Uncomment the following lines for alerts // alertcondition(LONG, title="LONG") // alertcondition(SHORT, title="SHORT")