Strategi ini menggabungkan penunjuk MACD dan kaedah pengurusan wang Martingale untuk menangkap pergerakan pasaran trend sambil mengawal risiko. Strategi ini menggunakan persilangan garis cepat MACD dan garis perlahan sebagai isyarat perdagangan, dan mengamalkan sebilangan pendekatannya Martingale untuk mengawal saiz kedudukan. Apabila perdagangan yang rugi berlaku, strategi akan menggandakan jumlah kontrak untuk perdagangan seterusnya, sehingga maksimum tiga kali, untuk memulihkan kerugian sebelumnya. Pada masa yang sama, strategi menetapkan syarat mengambil keuntungan dan berhenti kerugian untuk mengawal risiko lebih lanjut.
Dengan menggabungkan penunjuk MACD dan kaedah pengurusan wang Martingale, strategi ini bertujuan untuk mendapat keuntungan daripada pasaran yang sedang berkembang sambil mengawal risiko. Logik strategi jelas dan mudah dilaksanakan, tetapi masih ada risiko yang berkaitan dengan levaran Martingale dan batasan nisbah keuntungan dan stop-loss tetap. Pada masa akan datang, strategi dapat dioptimumkan dengan menyesuaikan pendekatan levaran secara dinamik, mengoptimumkan isyarat perdagangan, mengamalkan kaedah mengambil keuntungan dan stop-loss yang adaptif, dan melaksanakan pengurusan kedudukan untuk meningkatkan ketahanan dan keuntungan strategi.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Advanced MACD Strategy with Limited Martingale", overlay=true, initial_capital=500) // MACD 설정 변경 fastLength = 15 slowLength = 30 signalSmoothing = 9 [macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing) // 계약수 및 이전 거래 결과 기록 var float contractSize = 0.02 // 계약 수를 0.05로 시작 var int martingaleCount = 0 // 마틴게일 카운트 var float lastTradeResult = 0 // 매수 및 매도 조건 longCondition = ta.crossover(macdLine, signalLine) shortCondition = ta.crossunder(macdLine, signalLine) // 매수 신호 if (longCondition) strategy.entry("Long", strategy.long, qty=contractSize) lastTradeResult := strategy.netprofit // 매도 신호 if (shortCondition) strategy.entry("Short", strategy.short, qty=contractSize) lastTradeResult := strategy.netprofit // 익절 및 손절 조건 strategy.close("Long", when=(close / strategy.position_avg_price >= 1.015)) strategy.close("Short", when=(strategy.position_avg_price / close >= 1.01)) strategy.close("Long", when=(close / strategy.position_avg_price <= 0.99)) strategy.close("Short", when=(strategy.position_avg_price / close <= 0.99)) // 마틴게일 전략 적용 if (strategy.netprofit < lastTradeResult) if (martingaleCount < 3) contractSize := contractSize * 2 martingaleCount := martingaleCount + 1 else contractSize := 0.02 // 리셋 할 때 0.05로 리셋 martingaleCount := 0 else contractSize := 0.02 // 초기화 martingaleCount := 0 // 매수, 매도 포인트 화살표로 표시 plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")