В этой статье рассматривается стратегия торговли, основанная на простой скользящей средней. Стратегия сравнивает цену закрытия с 17-периодной скользящей средней, идя длинный, когда цена закрытия пересекает пересечение передвижной средней и идти короткий, когда он пересекает ниже.
Для расчета скользящей средней стратегия использует следующие параметры:
На основе этих параметров функция getMAType() используется для расчета 17-периодного SMA цены закрытия.
Затем сравните взаимосвязь между ценой закрытия и скользящей средней:
Когда цена закрытия пересекает скользящую среднюю сверху, генерируется длинный сигнал. Когда она пересекает ниже сверху, генерируется короткий сигнал.
В течение периода обратного тестирования открывать длинные позиции при появлении длинных сигналов и открывать короткие позиции при появлении коротких сигналов.
Самое большое преимущество этой стратегии заключается в том, что логика очень проста и ясна. Только с помощью одного индикатора он оценивает изменение тренда на основе изменения направления индикатора. Стратегия проста в понимании и реализации, подходит для обучения новичков.
Кроме того, скользящие средние относятся к индикаторам, следующим за тенденцией, которые могут эффективно отслеживать изменения тенденции и избегать помех от краткосрочного шума рынка.
Благодаря корректировке параметров, он может адаптироваться к различным циклам и различным продуктам.
Во-первых, эта стратегия основана только на одном показателе, поэтому критерии оценки относительно едины, что может привести к большему количеству ложных сигналов.
Кроме того, как система, следующая за тенденцией, она плохо работает на рынках с ограниченным диапазоном и боковыми рынками.
Кроме того, без стоп-лосса или прибыли существует риск увеличения потерь.
Решения заключаются в включении других индикаторов, оптимизации комбинаций параметров для уменьшения ложных сигналов. Добавить стоп-лосс и взять прибыль для контроля рисков и оптимизировать снятие.
Вот несколько идей для оптимизации стратегии:
Корректировка параметров скользящей средней, оптимизация цифр периодов, например, изменение на 30-периодные или 50-периодные.
Попробуйте различные типы скользящих средних, как EMA, VIDYA и т. Д. Они имеют различную чувствительность к изменениям цен.
Добавить другие индикаторы в комбинации, например, MACD для оценки силы; RSI для снижения ложных сигналов.
Добавьте механизмы остановки потери.
Добавьте механизмы получения прибыли, установите целевой процент прибыли, чтобы максимизировать прибыль.
Эти оптимизации могут сделать стратегию более стабильной и избежать чрезмерных снижений.
Эта статья анализирует простую торговую стратегию, основанную на 17-периодической скользящей средней. Стратегия имеет простые источники сигналов, простые в понимании и реализации, относящиеся к типичной системе, следующей за трендом.
/*backtest start: 2023-12-05 00:00:00 end: 2024-01-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2012, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// Moving Average ///////////// source = input(title="MA Source", defval=ohlc4) maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"]) length = input(title="MA Length", defval=17) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) if maType == "vwma" res := vwma(sourceType, maLen) if maType == "rma" res := rma(sourceType, maLen) res MA = getMAType(maType, source, length) /////////////// Strategy /////////////// long = close > MA short = close < MA last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) /////////////// Execution /////////////// if testPeriod() strategy.entry("L", strategy.long, when=long_signal) strategy.entry("S", strategy.short, when=short_signal) /////////////// Plotting /////////////// p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2) p2 = plot(close, linewidth=2) fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)