이 전략은 쌍평평선 지표와 상대적으로 강한 지표 ((RSI) 지표의 조합을 사용하여 고주파 스칼핑 거래를 수행하며, 전략의 전반적인 위험 수준을 제어하기 위해 마틴게일 포지션 원칙을 결합합니다.
이 전략은 먼저 stoch 지표를 사용하여 사용자 정의 오스컬레이터를 그리며, 변수 오스실레이터Period를 5로 설정하고, k1과 k2의 위아래 마이너스를 설정하여, 상장 정리 영역을 구축한다. 무작위 지표 값이 상장 정리 영역에 들어갔을 때, 회귀 기회가 있을 수 있음을 나타낸다.
둘째, RSI와 결합하여 과매매 현상을 판단한다. RSI 지표는 시장이 상하계를 돌파할 때를 효과적으로 식별할 수 있다. 이 전략은 RSI의 과매매 선이 70이고, 과매매 선이 30이다.
또한, 이 전략은 trendActivity 인자를 주요 트렌드 필터로 도입합니다. 무작위 지표와 RSI가 반전 조건을 동시에 충족할 때, 주요 트렌드가 여전히 충분히 활발한지 확인하여 흔들리는 시장의 가짜 돌파구로 인한 손실을 피합니다.
마지막으로, 이 전략은 고전적인 마틴겔 위탁 원칙을 적용하여 전반적인 위험을 통제한다. 거래 수를 동적으로 조정하여, 첫 번째 포지션 손실의 경우 위탁을 수행하여 손실 균형을 달성하여 최대 인출을 제어한다.
RSI 지표의 도입은 과매매 현상을 효과적으로 식별할 수 있으며, 역전 시기를 판단하는 데 도움을 준다.
진동기는 거래판 정리 영역을 판단하고, 가짜 침입 신호를 필터링할 수 있다.
주요 트렌드 필터의 설정은 진동상황의 손실을 방지한다.
마틴게일 가저의 효율적인 통제 전략의 최대 회수율은 전략의 지속가능한 수익성의 핵심이다.
RSI 지표가 비정상적 인 경우 오버 바이 오버 세일 판단 오류로 인해 오류가 발생할 수 있으므로 특히 주의해야 합니다.
진동기 매개 변수 설정이 잘못되면 과도한 필터링 신호 또는 가짜 돌파구를 식별할 수 있다. 이는 역사적 실태 데이터에 따라 매개 변수를 최적화해야 한다.
마틴겔은 특정 환경에서 상쇄 손실을 초래한다. 상쇄 단계가 너무 많으면 계정 부실의 중대한 위험이 발생할 수 있다.
이 전략은 단지 15분 주기 GBPUSD 통화에 대한 데이터를 검증했다. 다른 시장과 다른 주기에는 데이터 적합성의 위험이 있을 수 있다.
RSI 파라미터를 최적화하여 현재 시장 환경에 더 적합한 파라미터를 찾습니다.
테스트 및 최적화 진동기의 매개 변수를 더 정확하게 판별할 수 있습니다.
손해 중지 논리를 추가한다. 손해가 일정 정도에 도달하면 적극적으로 손해를 중지하고, 단독 손해를 효과적으로 제어한다.
주요 트렌드 필터의 설정 규칙을 최적화하여 역전 기회를 놓치지 않도록 합니다.
다양한 위자율 설정을 테스트하십시오. 너무 큰 위자율이 급속한 손실을 초래하지 않도록하십시오.
이 전략은 쌍평선 지표, RSI 지표 및 사용자 정의 오스컬러를 통합하여 단기간에 상하계 범위를 돌파하는 현상을 판단하고, 주요 트렌드 필터를 보조하여 가짜 범위를 피하여 효율적인 스칼핑 거래를 수행합니다. 또한 고전적인 마틴겔 가 포지션 원칙을 도입하여 전반적인 위험 수준을 제어합니다. 이 전략은 매개 변수 최적화 및 엄격한 위험 관리를 통해 안정적인 수익을 얻을 수 있습니다.
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cloudofw
//@version=5
strategy("F2.2 Martingale Scalping Strategy", overlay=true)
// Input parameters
rsiOverbought = input.int(70, "RSI Overbought Threshold")
rsiOversold = input.int(30, "RSI Oversold Threshold")
oscillatorPeriod = input.int(5, "Period for oscillator")
k1 = input.float(0.2, "K1 for oscillator's zone")
k2 = input.float(0.5, "K2 for oscillator's zone")
trendActivity = input.float(1.0, "Main Trend filter", minval=0.1)
decreasePerOrder = input.float(0.1, "Trend filter decrease per order", minval=0.01)
// Calculate custom oscillator and RSI
oscillator = ta.stoch(close, high, low, oscillatorPeriod)
rsiValue = ta.rsi(close, 14)
zoneHigh = 100 - k1 * 100
zoneLow = k2 * 100
// Entry conditions
longCondition = oscillator < zoneLow and trendActivity > 0 and rsiValue < rsiOversold
shortCondition = oscillator > zoneHigh and trendActivity > 0 and rsiValue > rsiOverbought
// Martingale logic
var lot_multiplier = 1.0
var last_lot_size = strategy.equity * 0.01
var trade_1_profit = 0.0
if (strategy.position_size != 0)
lot_multiplier := last_lot_size / strategy.position_size < 1.5 ? lot_multiplier * 1.5 : 1.0
trade_1_profit := strategy.grossprofit
else
lot_multiplier := 1.0
trade_1_profit := 0.0
lot_size = strategy.equity * 0.01 * lot_multiplier + trade_1_profit
last_lot_size := lot_size
// Trading logic
if longCondition and strategy.position_size == 0
strategy.entry("Long", strategy.long)
if shortCondition and strategy.position_size == 0
strategy.entry("Short", strategy.short)
// Exit conditions
if longCondition == false and strategy.position_size > 0
strategy.close("Long")
if shortCondition == false and strategy.position_size < 0
strategy.close("Short")
// Indicators on chart
plotshape(series=longCondition, title="Buy Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition, title="Sell Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
plot(oscillator, color=color.blue, title="Oscillator")
hline(zoneHigh, "Upper Zone", color=color.red)
hline(zoneLow, "Lower Zone", color=color.green)