이 전략은 단순한 이동 평균과 가중 이동 평균의 교차를 기반으로 거래 신호를 생성하며, 포지션을 관리하기 위해 스톱 로스와 수익을 취합니다. 이 전략은 동적 요소 ( 이동 평균 교차) 와 정적 요소 ( 고정 스톱 로스와 수익률) 를 통합하여 동적 요소와 정적 요소의 얽힌 효과를 달성합니다.
핵심 논리는 서로 다른 기간을 가진 두 개의 이동 평균을 계산하는 것입니다. 하나는 9 일 간 간단한 이동 평균이고 다른 하나는 21 일 가중화 이동 평균입니다. 짧은 기간 9 일 SMA가 장기 기간 21 일 WMA보다 높을 때 구매 신호가 생성됩니다. 짧은 기간 라인이 장기 기간 라인의 아래에 넘을 때 판매 신호가 생성됩니다.
신호를 받은 후, 주문은 설정된 스톱 로스 및 영업률에 따라 배치된다. 예를 들어, 스톱 로스 비율이 5%로 설정되면, 스톱 로스 가격은 엔트리 가격의 95%로 설정된다. 만약 영업률이 5%라면, 영업률은 엔트리 가격의 105%로 설정된다. 이것은 동적 요인 (출입 및 출출 시기를 결정하는 이동 평균 크로스오버) 와 정적 요인 ( 고정 스톱 로스 및 영업률) 의 융합을 실현한다.
이 전략은 동적 기술 지표와 정적 전략 매개 변수를 결합하여 동적 및 정적 시스템의 장점을 가지고 있습니다. 기술 지표는 동적으로 시장 특성을 캡처 할 수 있으며 트렌드를 포착하는 데 유용합니다. 매개 변수 설정은 안정적인 위험 및 수익 통제를 제공하며, 위치 관리의 무작위성을 줄이는 데 도움이됩니다.
순수 동적 시스템과 비교하여 이 전략은 비합리적 결정의 영향을 줄이는 위치 관리에서 더 견고합니다. 순수 정적 시스템과 비교하여 이 전략은 입시 선택에서 더 유연하며 시장 변화에 더 잘 적응합니다. 따라서 이 전략은 전반적인 견고성과 수익성이 좋습니다.
이 전략의 위험은 주로 두 가지 측면에서 발생합니다. 첫째, 이동 평균에서 잘못된 신호가 발생할 가능성이 있습니다. 시장이 범위에 묶여있을 때, 이동 평균은 종종 교차가 발생할 수 있으며, 전략이 윙싱 될 수 있습니다.
두 번째로, 고정 스톱 로스 및 트레이프 리프트가 극단적인 시장 조건에 적응할 수 없는 위험입니다. 블랙 스완 이벤트가 거대한 시장 변동을 유발할 때, 미리 설정된 스톱 로스 및 트레이프 리프트 레벨이 침투하여 위험을 효과적으로 제어할 수 없습니다.
대책은: 첫째, 잘못된 신호의 가능성을 줄이기 위해 주요 시간 노드를 피하고, 둘째, 시장 변동성과 특별한 이벤트에 따라 적응적인 스톱 손실 알고리즘을 활성화하여 스톱 손실과 수익을 시장에 조정합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
최적의 매개 변수를 찾기 위해 다양한 매개 변수 조합을 테스트합니다.
유효하지 않은 신호를 피하기 위해 필터링 조건을 추가합니다.
시장과 함께 움직이기 위해 적응적인 스톱 로스 알고리즘을 적용합니다.
다른 지표를 포함하여, 범위에 묶인 시장을 피하여 트렌드 강도를 판단합니다.
자동으로 매개 변수를 최적화하기 위해 기계 학습 방법을 활용합니다.
매개 변수 테스트, 필터 추가, 정지 개선, 트렌드 판단 등을 통해 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.
이 전략은 역동 지표와 정적 매개 변수를 성공적으로 결합하여 유연성과 견고성을 균형 잡습니다. 순수한 역동 및 정적 전략과 비교하면이 전략은 전반적으로 더 잘 수행됩니다. 물론, 전략이 더 효과적이도록 매개 변수를 조정하고 필터, 적응 중지, 기계 학습 등을 추가하여 최적화 할 여지가 있습니다.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Définition des périodes pour les moyennes mobiles wmaLength = input.int(9, title="WMA Length") mmaLength = input.int(21, title="MMA Length") // Paramètres de Stop Loss et Take Profit en pourcentage stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100 takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100 // Calcul des moyennes mobiles wmaValue = ta.wma(close, wmaLength) mmaValue = ta.sma(close, mmaLength) // Conditions pour les signaux d'achat et de vente buySignal = ta.crossover(wmaValue, mmaValue) sellSignal = ta.crossunder(wmaValue, mmaValue) // Génération des ordres en fonction des signaux if buySignal strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage)) if sellSignal strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage)) // Affichage des moyennes mobiles sur le graphique plot(wmaValue, color=color.blue, title="WMA") plot(mmaValue, color=color.red, title="MMA") // Affichage des signaux sur le graphique pour référence plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")