Эта стратегия является последовательной торговой системой, основанной на диапазоне поддержки бычьего рынка. Она в основном использует перекрестные сигналы между 20-недельной простой скользящей средней (SMA) и 21-недельной экспоненциальной скользящей средней (EMA) для определения направления тренда рынка и принятия торговых решений. Стратегия генерирует длинные сигналы, когда скользящие средние пересекаются вверх и выходит, когда они пересекаются вниз, с целью захвата средне- и долгосрочных трендовых возможностей.
Основная логика стратегии заключается в мониторинге относительной позиции 20-недельной SMA и 21-недельной EMA для оценки рыночных тенденций. Когда краткосрочная средняя (20-недельная SMA) превышает долгосрочную среднюю (21-недельную EMA), это указывает на потенциальный восходящий тренд, запуская вход в длинную позицию. Когда краткосрочная средняя падает ниже долгосрочной средней, это сигнализирует о потенциальном конце восходящего тренда, запуская закрытие позиции. Стратегия использует управление позициями %_of_equity с комиссией на 0,1% и скольжением в 3 базисных пункта.
Торговая стратегия Bull Market Support Band - это система, основанная на теории классического технического анализа. Она отслеживает средне- и долгосрочные трендовые возможности с помощью еженедельных пересечений скользящих средних, обладая четкой логикой и контролируемым риском. Однако стратегия плохо работает на различных рынках и демонстрирует некоторое отставание. Благодаря добавлению вспомогательных индикаторов, оптимизации стоп-лосса и улучшенному управлению капиталом, стратегия имеет значительное пространство для оптимизации.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 // © zkdev //@version=6 strategy(title='Demo GPT - Bull Market Support Band', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // ------------------------------------------------------------------------- // Compile-time timestamp constants for default date range // (2018-01-01 00:00:00 UTC -> 1514764800000 // 2069-12-31 23:59:59 UTC -> 3155759999000) // ------------------------------------------------------------------------- const int defaultFromDate = 1514764800000 const int defaultToDate = 3155759999000 // ------------------------------------------------------------------------- // Inputs: date range // ------------------------------------------------------------------------- fromDate = input(title='Start Date', defval=defaultFromDate) toDate = input(title='End Date', defval=defaultToDate) // ------------------------------------------------------------------------- // Indicator settings & calculations // ------------------------------------------------------------------------- smaLength = 20 emaLength = 21 source = close sma = ta.sma(source, smaLength) ema = ta.ema(source, emaLength) // ------------------------------------------------------------------------- // Fetch weekly SMA & EMA // ------------------------------------------------------------------------- outSma = request.security(syminfo.tickerid, 'W', sma, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) outEma = request.security(syminfo.tickerid, 'W', ema, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) // ------------------------------------------------------------------------- // Plot visuals (20w SMA, 21w EMA, fill in between) // ------------------------------------------------------------------------- smaPlot = plot(outSma, color=color.new(color.red, 0), title='20w SMA') emaPlot = plot(outEma, color=color.new(color.green, 0), title='21w EMA') fill(smaPlot, emaPlot, color=color.new(color.orange, 75), fillgaps=true) // ------------------------------------------------------------------------- // We evaluate crossover/crossunder on *every bar* and store the result // ------------------------------------------------------------------------- crossUp = ta.crossover(outSma, outEma) crossDown = ta.crossunder(outSma, outEma) // ------------------------------------------------------------------------- // Trade logic: only operate within chosen date range // Buy when outSma crosses above outEma; Sell (close) when outSma crosses below outEma // ------------------------------------------------------------------------- inDateRange = true if inDateRange // If we have a crossUp event on this bar, buy (go Long) if crossUp strategy.entry('Long', strategy.long) // If we have a crossDown event on this bar, sell (close Long) if crossDown strategy.close('Long')