Golden Cross оптимизировала стратегию торговли скользящими средними

Автор:Чао Чжан, Дата: 2023-12-19 13:37:33
Тэги:

img

Обзор

Эта стратегия оптимизирует традиционную стратегию пересечения скользящей средней путем установки трех скользящих средних с различными периодами, создавая золотой кросс-паттерн с 9-периодными, 50-периодными и 100-периодными скользящими средними. Она генерирует сигналы покупки, когда краткосрочный MA пересекает среднесрочный MA, а долгосрочный MA находится в восходящем тренде.

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

Стратегия использует три скользящих средних с периодами 9, 50 и 100. 9-периодный MA - это краткосрочный MA, 50-периодный MA - это среднесрочный MA, а 100-периодный MA - это долгосрочный MA. Торговые сигналы генерируются скрещиванием между краткосрочным MA и среднесрочным MA. В частности, когда долгосрочный MA находится в восходящем тренде (выше среднесрочного MA), сигнал покупки запускается, когда краткосрочный MA пересекает среднесрочный MA. Сигнал продажи запускается, когда краткосрочный MA пересекает среднесрочный MA.

Анализ преимуществ

По сравнению с традиционной стратегией перекрестного движения двойной скользящей средней, эта стратегия добавляет условие оценки среднесрочных и долгосрочных тенденций перед генерацией торговых сигналов, которые могут эффективно отфильтровывать некоторые недействительные сигналы. Когда долгосрочные тенденции неясны, стратегия не будет генерировать сигналы, избегая попадания в ловушку консолидации. В то же время эта стратегия подходит для захвата тенденционных движений в краткосрочной и среднесрочной перспективе, уменьшая возможность агрессивного входа.

Анализ рисков

При установлении параметров для этой стратегии необходимо корректировать комбинацию скользящих средних периодов. Различные комбинации периодов будут влиять на эффективность стратегии. Если параметры периода не установлены должным образом, существует риск создания слишком большого количества ложных сигналов. Кроме того, трейдеры должны знать о потенциальных системных рисках и своевременно прекращать потери, чтобы смягчить риски.

Руководство по оптимизации

Рассмотреть возможность включения других индикаторов для оценки рыночных тенденций, таких как MACD, BOLL и т.д., и установить более строгие условия входа, или включить индикаторы волатильности для построения адаптивных скользящих средних, чтобы параметры могли автоматически корректироваться на основе рыночных условий для дальнейшей оптимизации стратегии.

Заключение

Эта стратегия, основанная на традиционном перекрестном двойном скользящем среднем, добавляет долгосрочное суждение MA и условия фильтрации, которые могут эффективно отфильтровывать ложные сигналы и подходят для улавливания краткосрочных и среднесрочных движений тренда. Это простая и практичная стратегия, следующая за трендом. Тем не менее, трейдерам все еще нужно обратить внимание на оптимизацию параметров и системные риски и сформулировать научные стратегии управления рисками.


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

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

Больше