Быстрая медленная двойная средне-движущаяся стратегия торговли

Автор:Чао Чжан, Дата: 2023-10-27 16:41:24
Тэги:

img

Обзор

Двойная стратегия торговли скользящей средней генерирует торговые сигналы, рассчитывая быстрые и медленные скользящие средние и наблюдая за перекрестками. Когда быстрая скользящая средняя пересекает более медленной скользящей средней, принимается длинная позиция. Когда быстрая скользящая средняя пересекает ниже медленной скользящей средней, принимается короткая позиция. Стратегия может использоваться как для торговли трендом, так и для торговли контртендом.

Логика стратегии

Стратегия сначала устанавливает длины быстро движущейся средней maFastLength и медленно движущейся средней maSlowLength. Затем она вычисляет быстро движущуюся среднюю fastMA и медленно движущуюся среднюю slowMA. Быстро движущаяся средняя реагирует быстрее на изменения цен и используется для оценки текущего тренда, в то время как медленно движущаяся средняя реагирует медленнее и используется для определения направления тренда.

Когда быстрая скользящая средняя пересекает медленную скользящую среднюю, генерируется длинный входный сигнал goLong().

Стратегия может быть настроена только на длинный, только на короткий, или разрешать как длинные, так и короткие сделки.

В длинном режиме длинные позиции вводятся на сигнал goLong() и выводятся на сигнал killLong().

В режиме только коротких позиций короткие позиции вводятся на сигнал killLong() и выводятся на сигнал goLong().

В режиме свопа длинные позиции вводятся на goLong ((), закрываются и переводятся на короткие на killLong (().

Стратегия также включает в себя стоп-лосс, стоп-остановку, сообщения и другие дополнительные функции.

Преимущества

  1. Просто и легко внедряется.

  2. Гибкость для покупки длинного, короткого или обоих.

  3. Опциональные функции остановки потери и остановки задержки.

  4. Настраиваемые сообщения для оповещения о сделках.

  5. Чувствительны к тенденциям на рынке.

  6. Настраиваемые параметры адаптируются к различным рынкам.

Риски

  1. Может привести к чрезмерным сделкам на нестабильных рынках.

  2. Медленно реагирует на внезапные новости.

  3. Выбор параметров влияет на эффективность стратегии.

  4. Следуйте строго сигналам, избегайте дискреционной торговли.

  5. Торговые издержки могут снизить прибыль, если их не учитывать.

Усовершенствования

  1. Добавьте такие фильтры, как RSI, чтобы избежать ложных сигналов.

  2. Используйте оптимизацию параметров для поиска лучших настроек.

  3. Используйте динамические остановки, чтобы зафиксировать прибыль и скорректировать.

  4. Включить машинное обучение для прогнозирования трендов.

  5. Оптимизировать сообщения для индивидуальных торговых привычек.

Заключение

Стратегия двойной скользящей средней относительно проста и полезна для улавливания сильных трендов. Однако следует позаботиться о том, чтобы избежать сбоев в условиях низкого тренда. Прямые параметры настройки и добавление вспомогательных индикаторов или улучшений могут еще больше улучшить надежность и адаптивность.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)

// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)

// Trade direction
shorting = input(defval=false, title="Short only?")
longonly = input(defval=true, title="Long only?")
swapping = input(defval=false, title="Swap orders?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)

// Messages for buy and sell
message_long_entry  = input("Long entry message", title="Long entry message")
message_long_exit   = input("Long exit message", title="Long exit message")
message_short_entry = input("Short entry message", title="Short entry message")
message_short_exit  = input("Short exit message", title="Short exit message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true
// === Vars and Series ===
fastMA = sma(maFastSource, maFastLength)
slowMA = sma(maSlowSource, maSlowLength)

plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
    
// Long only
if longonly
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit)

// Short only
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit)
    
// Order Swapping
if swapping
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)

if useStop
    strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit)
    strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)



Больше