이 전략은 자동 거래에 대한 구매 및 판매 신호를 설정하기 위해 이동 평균 크로스오버 및 저항 레벨 브레이크오웃의 기술을 통합합니다. 단기 이동 평균이 아래에서 중기 이동 평균을 넘어서고 주가가 저항 수준을 넘어서면 구매 신호가 생성됩니다. 이 전략은 위험을 제어하기 위해 가격 상승 15%에서 수익을 취하고 가격 감소 3%에서 손실을 중지합니다. 이 성숙한 양적 거래 전략은 시장 추세를 자동으로 식별하고 적절한 위험 관리와 함께 기술적 신호가 나타날 때 위치에 들어갈 수 있습니다.
이 전략은 주로 다음과 같은 기술적 지표와 판단에 기초하여 거래 신호를 생성합니다.
이동 평균 크로스오버 기법: 20일 및 44일 간 간단한 이동 평균을 계산합니다. 20일 SMA가 44일 선을 넘을 때 시장이 상승 추세로 판단되며 구매 신호를 생성합니다.
저항 레벨 브레이크오웃 기술: 주식 가격이 반복적으로 도달했지만 통과하지 못한 가격 레벨은 저항 레벨로 불린다. 그것들을 통과하면 가격이 새로운 상승 추세로 진입한다는 것을 나타냅니다. 이 전략은 이전 폐쇄의 0.7% 이상의 브레이크오웃을 저항 브레이크오웃으로 간주합니다.
RSI 오시레이터: 상대적 강도 지표, 과잉 구매 및 과잉 판매 조건을 식별하는 모멘텀 지표. 이 전략은 과잉 구매 신호로 50 이상의 14 일 RSI 값을 사용합니다.
부피 분석: 지난 10일 평균을 초과하는 부피는 종종 더 강한 구매 또는 판매 관심과 가격 움직임의 추진력을 암시합니다.
구매 신호: 짧은 SMA가 중간 SMA를 넘어서고, RSI가 과잉 구매되고 평균 거래량보다 높고 상승 추세를 나타낼 때 발생한다.
판매 신호: 입시 가격에서 15%의 수익, 3%의 스톱 로스
이 성숙한 양적 거래 전략은 여러 기술적 분석 방법을 통합하여 시장 구조와 트렌드를 식별하고 트렌드 형성에 따라 적절한 리스크 관리를 통해 자동으로 거래 신호를 생성합니다.
이동 평균 기법으로 시장 추세를 원활하게 포착합니다.
가짜 브레이크오웃 중 포지션 개척을 피하기 위해 볼륨 분석을 적용합니다.
스톱 로즈와 테이크 노프트를 설정하여 효과적인 리스크 제어, 리스크/리워드 비율을 최적화합니다.
전체적으로 시장 구조에 대한 훌륭한 판단, 엄격한 거래 규칙 및 위험 통제는 이것을 견고한 양적 거래 전략으로 만듭니다.
이중 이동 평균 시스템은 다른 기간에 대한 매개 변수 조정에 민감할 수 있습니다.
트렌드를 따르는 시스템은 갑작스러운 근본적인 사건에 신속하게 대응할 수 없으며, 스톱 로스 위험에 직면합니다.
비록 스톱 로즈가 설정되어 있지만, 높은 거래 빈도는 피할 수 없는 스톱 로즈 실행을 초래하여 불균형한 수익 수준으로 이어집니다.
기술 지표의 신호는 종종 시장의 가장 좋은 전환점을 뒤쳐집니다.
이동 평균 길이와 같은 매개 변수를 최적화하십시오. 최적을 찾기 위해 매개 변수 조정 방법으로 손실 / 이익 목표를 중지하십시오.
다른 기술 지표들을 추가하여 범위 검출을 위한 볼링거 밴드 (Bollinger Bands) 와 같은 신호의 정확성을 향상시키기 위해 오차를 발견하기 위한 MACD (MACD) 등을 추가합니다.
부정적인 뉴스에 의해 발생되는 스톱 손실을 피하기 위해 기본 및 이벤트 기반 신호를 포함합니다.
거래 리스크를 통제하기 위해 고정된 양, 고정된 비율 방법을 통해 자금 관리를 최적화하십시오.
이 전략은 원활한 운영, 정확한 판단 및 엄격한 거래 규칙을 입증하며, 보다 효과적인 수치적 거래 기술 중 하나를 나타냅니다. 그러나 기술 분석 자체는 시장 읽기에 한계를 가지고 있으므로 더 많은 지표와 기본 / 이벤트 신호를 통합하고, 스톱 손실 / 이익 취득 수준을 최적화하고, 자금 관리 메커니즘을 개선하는 데 더 많은 개선이 있습니다. 요약하자면, 이 전략은 기술 분석 전략 중 높은 수준에 도달했지만 다음 단계의 진화에서 기본 / 이벤트에 의한 주기 거래 전략으로 향해야합니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Advanced Strategy with Conditional Stop Loss", overlay=true) // Parameters ma_length_20 = 20 ma_length_44 = 44 ma_length_100 = 100 rsi_length = 14 volume_length = 10 profit_target = 1.15 // 15% above the buy price stop_loss_target = 0.97 // 3% below the buy price wait_candles = 10 // Number of candles to wait after selling, unless MA cross condition met // Indicators moving_average_20 = ta.sma(close, ma_length_20) moving_average_44 = ta.sma(close, ma_length_44) moving_average_100 = ta.sma(close, ma_length_100) rsi = ta.rsi(close, rsi_length) volumeAvg = ta.sma(volume, volume_length) // Variables to manage the wait period after a sell var int last_sell_candle = 0 // Update last sell candle if (strategy.position_size[1] > 0 and strategy.position_size == 0) last_sell_candle := bar_index // Trend identification uptrend = close > moving_average_20 above_ma20_by_1_percent = close > moving_average_20 * 1.01 ma_cross = ta.crossover(moving_average_20, moving_average_44) or ta.crossunder(moving_average_20, moving_average_44) close_near_high = (close >= high * 0.993) and (close <= high) // Buy condition (only in uptrend, above 1% from 20-day MA, and respecting new filter) can_buy_after_cross = ma_cross and close > high[1] can_buy_after_wait = (bar_index - last_sell_candle) > wait_candles buy_condition = (can_buy_after_cross or can_buy_after_wait) and uptrend and above_ma20_by_1_percent and close > moving_average_44 and close > moving_average_100 and close > high[1] and rsi > 50 and volume > volumeAvg and not close_near_high // Entry if (buy_condition and strategy.position_size == 0) strategy.entry("Buy", strategy.long) // Exit conditions if (strategy.position_size > 0) // Profit target profit_level = strategy.position_avg_price * profit_target strategy.exit("Take Profit", "Buy", limit=profit_level) // Dynamic Stop Loss - Check on every bar if the price has dropped 3% below the buy price stop_loss_level = strategy.position_avg_price * stop_loss_target if (low < stop_loss_level) strategy.close("Buy", comment="Stop Loss") // Plotting plot(moving_average_20, color=color.green, title="20-Day Moving Average") plot(moving_average_44, color=color.blue, title="44-Day Moving Average") plot(moving_average_100, color=color.red, title="100-Day Moving Average")