Это адаптивная стратегия, основанная на нескольких технических показателях, которая автоматически корректирует параметры в соответствии с различными характеристиками рынка. Стратегия сочетает в себе денежный поток Чайкина (CMF), детеррентный осциллятор цен (DPO) и кривую Коппока для отслеживания рыночных тенденций, с факторами корректировки волатильности для адаптации к различным особенностям рынка. Она включает в себя комплексную систему управления позициями и контроля рисков, которая динамически корректирует размер торгов на основе волатильности рынка.
Основная логика стратегии заключается в том, чтобы подтвердить направление тренда и сроки торговли посредством сотрудничества с несколькими индикаторами: 1. Использует индикатор CMF для измерения денежного потока и оценки настроения на рынке 2. использует DPO для устранения влияния долгосрочных тенденций и сосредоточиться на среднесрочных колебаниях цен 3. Принимает модифицированный индикатор Коппока для фиксации поворотных точек тренда 4. генерирует торговые сигналы только тогда, когда все три индикатора подтверждают 5. Динамически рассчитывает уровни стоп-лосса и прибыли с использованием ATR 6. Автоматически корректирует параметры рыночной лотереи и волатильности на основе различных рыночных характеристик (акции, форекс, фьючерсы)
Эта стратегия является всеобъемлющей системой, которая балансирует доходность и риск с помощью нескольких индикаторов и механизмов управления рисками. Стратегия имеет сильную расширяемость с значительным пространством для оптимизации. Рекомендуется начинать с небольшого масштаба в живой торговле, постепенно увеличивать размер торговли, постоянно отслеживая эффективность стратегии и своевременно корректируя параметры.
/*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, "#.##"))