Esta estrategia combina el indicador MACD y el método de gestión de dinero Martingale para capturar los movimientos de tendencia del mercado mientras se controlan los riesgos. La estrategia utiliza el cruce de la línea rápida MACD y la línea lenta como señales de negociación, y adopta un número limitado de enfoques de Martingale para controlar el tamaño de la posición. Cuando ocurre una operación perdedora, la estrategia duplicará el número de contratos para la próxima operación, hasta un máximo de tres veces, con el fin de recuperar las pérdidas anteriores. Al mismo tiempo, la estrategia establece condiciones de take-profit y stop-loss para controlar aún más los riesgos.
Al combinar el indicador MACD y el método de gestión de dinero Martingale, esta estrategia busca obtener ganancias de los mercados de tendencia al tiempo que controla los riesgos. La lógica de la estrategia es clara y fácil de implementar, pero todavía hay riesgos asociados con el apalancamiento de Martingale y limitaciones de las relaciones fijas de toma de ganancias y stop-loss. En el futuro, la estrategia puede optimizarse ajustando dinámicamente el enfoque de apalancamiento, optimizando las señales comerciales, adoptando métodos de toma de ganancias y stop-loss adaptativos e implementando la gestión de posiciones para mejorar la robustez y rentabilidad de la estrategia.
/*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")