
이 전략은 단순 이동 평균과 중화 이동 평균의 교차를 기반으로 거래 신호를 생성하고, 정지 및 정지와 결합하여 포지션을 관리한다. 이 전략은 동적 요소 (중계 이동 평균의 교차) 와 정적 요소 (정적 정지 및 정지 비율) 를 결합하여 동적 정지 효과를 달성한다.
핵심 논리는 두 개의 다른 주기의 이동 평균을 계산하는 것인데, 하나는 9일 간소 이동 평균이고, 하나는 21일 중화 이동 평균이다. 짧은 주기의 9일 간소 이동 평균 위에 긴 주기의 21일 중화 이동 평균을 가로질러 구매 신호를 발생시키며, 짧은 주기선의 아래로 긴 주기선의 가로질러 판매 신호를 발생시킨다.
신호를 수신한 후, 설정된 스톱 스톱 비율에 따라 주문한다. 예를 들어, 스톱 스톱 비율이 5%로 설정되면, 스톱 스톱 가격은 출구 가격의 95%로 설정된다. 스톱 스톱 비율이 5%라면, 스톱 스톱 가격은 출구 가격의 105%로 설정된다. 이렇게 하면 동적 인자 ((이동 평균의 교차는 출구 및 출구를 결정하는 시간) 과 정적 인자 (( 고정 된 스톱 스톱 스톱 비율) 의 결합이 이루어진다.
이 전략은 동적 기술 지표와 정적 전략 매개 변수를 결합하여 동적 시스템의 장점을 갖는다. 기술 지표는 동적으로 시장 특성을 포착하여 추세를 파악하는 데 도움이 되며, 매개 변수 설정은 안정적인 위험 및 수익 제어를 제공하여 포지션 관리의 무작위성을 줄이는 데 도움이 된다.
순수 동적 시스템과 비교할 때, 이 전략은 포지션 관리에서 더 안정적이며, 비합리적 의사 결정의 영향을 줄일 수 있다. 순수 정적 시스템과 비교할 때, 이 전략의 입시 선택은 더 유연하며, 시장의 변화에 적응할 수 있다. 따라서, 이 전략은 전체적으로 안정성과 수익성이 좋다.
이 전략의 위험은 주로 두 가지 측면에서 온다. 첫째, 이동 평균이 잘못된 신호를 생성할 가능성이 있다. 시장이 충격적인 정리 상태에 있을 때, 이동 평균이 자주 교차하여 전략이 갇히게 될 수 있다. 둘째, 고정된 스톱 스탠드가 특별한 시장 상황에 적응할 수 없는 위험이다. 갑작스러운 사건이 시장의 큰 변동으로 인해, 미리 설정된 스톱 스탠드 위치가 뚫려서 위험을 효과적으로 제어할 수 없다.
대책 1은 핵심 시간 노드를 피하고 잘못된 신호의 가능성을 줄이는 것이다. 대책 2는 시장의 변동률과 특별한 사건에 따라 적응적 인 손실을 중지하는 알고리즘을 활성화하여 손실을 중지하는 것이 시장에 따라 조정된다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다양한 변수들을 테스트하여 최적의 변수를 찾습니다.
필터링 조건을 추가하여 무효 신호를 방지합니다.
시장과 연계된 적응형 손실 차단 알고리즘을 적용합니다.
다른 지표와 함께 강하고 약한 추세를 판단하고, 흔들리는 시장을 피하십시오.
기계 학습 방법을 사용하여 매개 변수를 자동으로 최적화하십시오.
다양한 변수를 테스트하고, 필터링 조건을 추가하고, 스톱 스톱을 개선하고, 트렌드를 판단하는 방법 등을 통해 전략의 안정성과 수익률을 더욱 높일 수 있다.
이 전략은 역동적인 지표와 정적인 매개 변수를 성공적으로 결합하여 유연성과 안정성을 동시에 갖는다. 순전히 역동적이고 순전히 정적인 전략에 비해 이 전략의 전반적인 성능이 더 좋다. 물론, 여전히 최적화 할 수있는 공간이 있으며, 매개 변수 조정, 필터 조건, 자율적 인 손실, 기계 학습과 같은 방법을 통해 전략 효과를 향상시킬 수 있습니다.
/*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")