
쌍평준 변동율 자율화 거래 전략과 다단계 수익 최적화 시스템은 단선 거래자를 위해 특별히 설계된 효율적인 양적 거래 전략이다. 이 전략의 핵심은 빠른 평균선 ((EMA5) 과 느린 평균선 ((EMA15) 의 교차 신호에 의존하며, RSI 동력을 확인하고, ATR 변동율 지표를 통해 스톱 손실과 수익 수준을 동적으로 조정한다. 시스템 설계는 두 단계의 수익 모드를 채택하고, 각각 다른 변동율의 배수에서 평정되어, 신속히 수익을 고정하고, 가격 전개 상황을 충분히 포착하여 완전한 위험과 이익 관리 프레임워크를 형성한다.
이 전략은 2개의 지수 이동 평균 (EMA) 의 교차를 기본 입문 신호로 사용하여, 상대적으로 강한 지수 (RSI) 의 2차 확인을 보조하고, 평균 실제 파장 (ATR) 과 결합하여 동적인 중단 및 수익 목표를 설정합니다. 구체적인 구현 원칙은 다음과 같습니다:
입장 조건:
동적 위험 관리:
전략의 핵심 디자인 아이디어는 EMA를 통해 트렌드의 전환점을 포착하고, RSI를 통해 신호 품질을 필터링하고, ATR을 사용하여 동적으로 탈퇴 수준을 조정하여 전략이 다른 시장 변동 환경에 적응할 수 있도록하는 것입니다.
동적 위험 관리: ATR을 변동률 기준으로 사용하여, 전략이 다른 변동률 환경에 자동으로 적응할 수 있도록 하며, 높은 변동률의 시장에서 자동으로 중지 및 수익 공간을 확대하고, 낮은 변동률의 시장에서 자동으로 중지 및 수익 수준을 강화합니다.
계층적 수익 구조: 이 전략은 두 단계의 수익 모드를 사용한다 ((1.5배의 ATR과 3배의 ATR), 1단계 목표가 달성될 때 지분을 50% 평정하고, 이는 일부 수익의 빠른 잠금을 보장하고, 나머지 포지션이 더 큰 움직임을 계속 잡을 수 있도록 한다.
다중 확인 메커니즘: EMA와 RSI 지표의 쌍중 확인을 통해 많은 가짜 신호를 효과적으로 필터링하여 거래의 정확성을 향상시킵니다.
시각화 거래 관리: 전략은 차트에 명확하게 표시 된 거래 신호와 동적 계산의 중지, 이익 수준을, 거래의 가동성과 투명성을 크게 향상 .
자동화 경고 시스템: 내장된 경고 조건은 거래 신호가 발생했을 때 자동으로 거래자에게 알리고, 거래 기회를 놓치지 않도록 한다.
매개 변수 조정 가능: 전략은 ATR 배수의 사용자 정의 설정을 제공하여 거래자가 자신의 위험 선호도에 따라 유연하게 조정할 수 있습니다.
급격한 시장 역전 위험: 전략이 단기 EMA 교차에 기반하기 때문에 시장의 급격한 변동이나 가짜 돌파가 발생하면 신호 역전이 자주 발생하여 연속적인 손실이 발생할 수 있습니다. 해결책은 중요한 뉴스 발표 또는 극단적으로 변동하는 시장의 거래 중지, 또는 추가 시장 환경 필터 조건을 추가하는 것입니다.
고정 비율의 막힘이 부족하다: ATR의 동적 조정으로 약간의 적응력이 제공되지만, 시장의 구조적 변화 (예: 폭파) 의 경우 1배의 ATR의 막힘은 자금을 보호하기에 충분하지 않을 수 있다. 실형에서 특정 상품의 역사적 변동 특성에 따라 ATR의 곱수를 조정하는 것이 좋습니다.
변수 민감성: EMA 주기와 RSI 하락값의 선택은 전략에 큰 영향을 미치며, 다른 시장 조건에 따라 최적의 변수가 변할 수 있다. 역사적 데이터 재검토를 통해 타겟 시장에 적합한 변수 조합을 결정하는 것이 좋습니다.
음반의 유동성 위험: 시장의 변동성이 낮은 시간에 ATR 계산의 스톱 로드 범위가 너무 작아 가격의 약간의 변동으로 스톱 로드를 유발할 수 있습니다. 최소 스톱 점수를 기본 경보로 설정할 수 있습니다.
거래 비용 영향: 전략은 짧은 라인 거래를 위해 설계되어 있으며, 자주 거래하는 것은 높은 거래 비용을 초래합니다. 실제 응용에서는 점차와 수수료가 수익에 대한 침해를 중개해야합니다.
거래 시간 필터링을 도입: 코드에서 높은 변동 시간 (London-New York 교차 시간 같은) 에서 거래하는 것이 권장되지만 알고리즘에 하드 코딩되지 않습니다. 시장 시간을 기반으로 한 필터를 추가하여 최적의 거래 시간에만 신호를 생성하고 낮은 변동 시간 동안의 가짜 신호를 피할 수 있습니다.
최적 RSI 주기와 마이너스: 현재 RSI는 표준 14 주기와 50의 중간 마이너스를 채택하고, 특정 시장 특성에 따라 RSI 주기를 사용 된 시간 프레임과 더 잘 일치하는 값으로 조정할 수 있으며, 비대칭 마이너스를 사용 하는 것을 고려 할 수 있습니다.
트렌드 필터를 추가: EMA 교차는 트렌드 방향을 지시할 수 있지만, 50주기 EMA와 같은 더 긴 기간의 트렌드 지표를 추가하는 것을 고려할 수 있습니다.
동적 포지션 관리: 현재 전략은 고정 포지션을 사용한다. ATR 또는 잔액 비율에 기반한 동적 포지션 관리를 구현할 수 있으며, 다양한 변동률 환경에서 포지션 크기를 자동으로 조정하여 위험 노출의 일관성을 유지한다.
철회 제어 메커니즘: 계좌의 권익에 기반한 철회 제어 논리를 추가하여 특정 철회 값을 달성하면 거래 규모를 자동으로 축소하거나 거래를 중지하여 자금을 보호하십시오.
신호 품질 가중: 신호에 품질 평가를 할 수 있다 (예: EMA 교차 각, RSI 판독 강도 등에 기초하여) 그리고 평가 동력에 따라 포지션 또는 스톱 로즈 폭을 조정하여 고품질 신호에 더 큰 무게를 부여한다.
쌍평준 변동율 자율적 거래 전략과 다단계 수익 최적화 시스템은 기술 지표, 동적 위험 관리 및 다단계 수익 목표를 유기적으로 결합한 단선 거래 시스템이다. 그것의 핵심 장점은 적응력이 강하고, 위험 통제가 엄격하며, 좋은 시각화 및 자동화 특성을 가지고 있다. EMA를 통해 가격 동력의 변화를 포착하고, RSI는 신호의 유효성을 확인하고, ATR는 동적으로 출구 수준을 조정하여 완전한 거래 폐쇄 고리를 형성한다.
이 전략은 특히 유동성이 높고 변동성이 높은 시장에서 짧은 라인 거래자에게 적합하지만 사용자는 시장 조건의 필터링과 다양한 시장 환경에 대응하기 위해 변수 최적화에 주의를 기울여야합니다. 제안된 최적화 방향에 따라, 전략은 특히 추세 필터링과 동적 포지션 관리를 추가하는 측면에서 더 많은 성능을 향상시킬 여지가 있습니다.
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Scalping XAUUSD with Alerts By Fahrizal", overlay=true, default_qty_type=strategy.fixed, default_qty_value=0.1)
// Custom Inputs
tpMultiplier1 = input.float(1.5, "TP1 Multiplier (ATR)", minval=0.5, step=0.1)
tpMultiplier2 = input.float(3.0, "TP2 Multiplier (ATR)", minval=1.0, step=0.1)
slMultiplier = input.float(1.0, "SL Multiplier (ATR)", minval=0.5, step=0.1)
// Indicator Definitions
emaFast = ta.ema(close, 5)
emaSlow = ta.ema(close, 15)
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
// Variables to store levels
var float longSL = na
var float longTP1 = na
var float longTP2 = na
var float shortSL = na
var float shortTP1 = na
var float shortTP2 = na
// Plot to chart
plot(emaFast, color=color.green, title="EMA5")
plot(emaSlow, color=color.red, title="EMA15")
// Buy/Sell conditions
buySignal = ta.crossover(emaFast, emaSlow) and rsi > 50
sellSignal = ta.crossunder(emaFast, emaSlow) and rsi < 50
// Calculate and store TP and SL levels when signals trigger
if (buySignal)
longSL := close - (atr * slMultiplier)
longTP1 := close + (atr * tpMultiplier1)
longTP2 := close + (atr * tpMultiplier2)
strategy.entry("Buy", strategy.long)
strategy.exit("TP1 Long", "Buy", qty_percent=50, limit=longTP1)
strategy.exit("TP2 Long", "Buy", qty_percent=50, limit=longTP2)
strategy.exit("SL Long", "Buy", stop=longSL)
if (sellSignal)
shortSL := close + (atr * slMultiplier)
shortTP1 := close - (atr * tpMultiplier1)
shortTP2 := close - (atr * tpMultiplier2)
strategy.entry("Sell", strategy.short)
strategy.exit("TP1 Short", "Sell", qty_percent=50, limit=shortTP1)
strategy.exit("TP2 Short", "Sell", qty_percent=50, limit=shortTP2)
strategy.exit("SL Short", "Sell", stop=shortSL)
// Display signals on the chart
plotshape(buySignal, title="Buy", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
// Display levels on chart using labels
if (buySignal)
label.new(bar_index, high, "SL: " + str.tostring(longSL, "#.##") + "\nTP1: " + str.tostring(longTP1, "#.##") + "\nTP2: " + str.tostring(longTP2, "#.##"),
color=color.blue, textcolor=color.white, style=label.style_label_down)
if (sellSignal)
label.new(bar_index, low, "SL: " + str.tostring(shortSL, "#.##") + "\nTP1: " + str.tostring(shortTP1, "#.##") + "\nTP2: " + str.tostring(shortTP2, "#.##"),
color=color.red, textcolor=color.white, style=label.style_label_up)
// Simple notifications when positions are opened
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected! Check chart for SL, TP1, TP2 levels.")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected! Check chart for SL, TP1, TP2 levels.")
// Plot levels (optional)
plot(buySignal ? longTP1 : na, "TP1 Long", color=color.green, style=plot.style_cross)
plot(buySignal ? longTP2 : na, "TP2 Long", color=color.lime, style=plot.style_cross)
plot(buySignal ? longSL : na, "SL Long", color=color.red, style=plot.style_cross)
plot(sellSignal ? shortTP1 : na, "TP1 Short", color=color.green, style=plot.style_cross)
plot(sellSignal ? shortTP2 : na, "TP2 Short", color=color.lime, style=plot.style_cross)
plot(sellSignal ? shortSL : na, "SL Short", color=color.red, style=plot.style_cross)