Это следующая за трендом стратегия, основанная на движущихся средних перекрестных сигналах. Когда быстрый движущийся средний пересекается сверху медленного движущегося среднего снизу, генерируется сигнал покупки. Когда быстрый движущийся средний пересекается ниже медленного движущегося среднего сверху, генерируется сигнал продажи.
Стратегия использует две скользящие средние, 20-периодную простую скользящую среднюю и 30-периодную простую скользящую среднюю. Когда 20-периодный MA пересекает 30-периодный MA, генерируется сигнал покупки. Когда 20-периодный MA пересекает 30-периодный MA, запускается сигнал продажи.
Движущиеся средние сами по себе служат индикаторами тренда, эффективно отображающими направление тренда на рынке. Принцип перекрестного использования позволяет стратегии своевременно улавливать точки переворота тренда и генерировать торговые сигналы. 20-дневные и 30-дневные периоды устанавливаются соответствующим образом, чтобы отражать тенденцию рынка, не будучи слишком чувствительными к шуму.
Основными преимуществами этой стратегии являются:
К основным рискам этой стратегии относятся:
Решения:
Основные аспекты оптимизации стратегии:
Система пересечения скользящих средних - это простая и эффективная стратегия, следующая за трендом. Логика ясна и легко понятна, очень подходит для обучения новичков. Она генерирует торговые сигналы на основе пересечения скользящих средних и прибыли от торговли по тренду. Стратегия может быть оптимизирована во многих отношениях, чтобы стать более стабильной и эффективной.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gliese581d //@version=4 strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000) //SETTINGS longs_on = input(title="Long Trades enabled", defval=true) shorts_on = input(title="Short Trades enabled", defval=true) long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"]) short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"]) ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"]) ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1) ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"]) ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1) //MOVING AVERAGES ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len) ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len) //STRATEGY //trade entries long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1) start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1) end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1) end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1) in_time =true strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry) strategy.close("Long", when=longs_on and not shorts_on and short_entry) strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry) strategy.close("Short", when=shorts_on and not longs_on and long_entry) //PLOTTING //color background last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000) bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na bgcolor(color=bgcol, transp=90) plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue) plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black) plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green) plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)