이 전략은 다양한 기술 지표에 기반한 적응 트렌드 다음 전략으로 다양한 시장 특성에 따라 매개 변수를 자동으로 조정합니다. 이 전략은 시장 트렌드를 포착하기 위해 Chaikin Money Flow (CMF), Detrended Price Oscillator (DPO), Coppock Curve를 결합하고, 다른 시장 특성에 적응하기 위해 변동성 조정 요인을 포함합니다. 시장 변동성에 따라 거래 크기를 동적으로 조정하는 포지션 관리 및 위험 통제 시스템을 포함합니다.
전략의 핵심 논리는 여러 지표 협력을 통해 트렌드 방향과 거래 시기를 확인하는 것입니다.
이 전략은 복수의 지표와 위험 통제 메커니즘을 통해 수익과 위험을 균형 잡는 종합적인 트렌드 다음 시스템입니다. 전략은 최적화 할 수있는 상당한 공간과 함께 강력한 확장성을 가지고 있습니다. 라이브 거래에서 소규모로 시작하고 점진적으로 거래 크기를 증가시키는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Multi-Market Adaptive Trading Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Input parameters i_market_type = input.string("Crypto", "Market Type", options=["Forex", "Crypto", "Futures"]) i_risk_percent = input.float(1, "Risk Per Trade (%)", minval=0.1, maxval=100, step=0.1) i_volatility_adjustment = input.float(1.0, "Volatility Adjustment", minval=0.1, maxval=5.0, step=0.1) i_max_position_size = input.float(5.0, "Max Position Size (%)", minval=1.0, maxval=100.0, step=1.0) i_max_open_trades = input.int(3, "Max Open Trades", minval=1, maxval=10) // Indicator Parameters i_cmf_length = input.int(20, "CMF Length", minval=1) i_dpo_length = input.int(21, "DPO Length", minval=1) i_coppock_short = input.int(11, "Coppock Short ROC", minval=1) i_coppock_long = input.int(14, "Coppock Long ROC", minval=1) i_coppock_wma = input.int(10, "Coppock WMA", minval=1) i_atr_length = input.int(14, "ATR Length", minval=1) // Market-specific Adjustments volatility_factor = i_market_type == "Forex" ? 0.1 : i_market_type == "Futures" ? 1.5 : 1.0 volatility_factor *= i_volatility_adjustment leverage = i_market_type == "Forex" ? 100.0 : i_market_type == "Futures" ? 20.0 : 3.0 // Calculate Indicators mf_multiplier = ((close - low) - (high - close)) / (high - low) mf_volume = mf_multiplier * volume cmf = ta.sma(mf_volume, i_cmf_length) / ta.sma(volume, i_cmf_length) dpo_offset = math.floor(i_dpo_length / 2) + 1 dpo = close - ta.sma(close, i_dpo_length)[dpo_offset] roc1 = ta.roc(close, i_coppock_short) roc2 = ta.roc(close, i_coppock_long) coppock = ta.wma(roc1 + roc2, i_coppock_wma) atr = ta.atr(i_atr_length) // Define Entry Conditions long_condition = cmf > 0 and dpo > 0 and coppock > 0 and ta.crossover(coppock, 0) short_condition = cmf < 0 and dpo < 0 and coppock < 0 and ta.crossunder(coppock, 0) // Calculate Position Size account_size = strategy.equity risk_amount = math.min(account_size * (i_risk_percent / 100), account_size * (i_max_position_size / 100)) position_size = (risk_amount / (atr * volatility_factor)) * leverage // Execute Trades if (long_condition and strategy.opentrades < i_max_open_trades) sl_price = close - (atr * 2 * volatility_factor) tp_price = close + (atr * 3 * volatility_factor) strategy.entry("Long", strategy.long, qty=position_size) strategy.exit("Long Exit", "Long", stop=sl_price, limit=tp_price) if (short_condition and strategy.opentrades < i_max_open_trades) sl_price = close + (atr * 2 * volatility_factor) tp_price = close - (atr * 3 * volatility_factor) strategy.entry("Short", strategy.short, qty=position_size) strategy.exit("Short Exit", "Short", stop=sl_price, limit=tp_price) // Plot Indicators plot(cmf, color=color.blue, title="CMF") plot(dpo, color=color.green, title="DPO") plot(coppock, color=color.red, title="Coppock") hline(0, "Zero Line", color=color.gray) // Alerts alertcondition(long_condition, title="Long Entry", message="Potential Long Entry Signal") alertcondition(short_condition, title="Short Entry", message="Potential Short Entry Signal") // // Performance reporting // if barstate.islastconfirmedhistory // label.new(bar_index, high, text="Strategy Performance:\nTotal Trades: " + str.tostring(strategy.closedtrades) + // "\nWin Rate: " + str.tostring(strategy.wintrades / strategy.closedtrades * 100, "#.##") + "%" + // "\nProfit Factor: " + str.tostring(strategy.grossprofit / strategy.grossloss, "#.##"))