Стратегия торговли золотым крестом по скользящей средней

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

img

Обзор

Golden Cross Moving Average Trading Strategy - классическая количественная стратегия торговли. Эта стратегия использует скользящие средние разных периодов для определения рыночных тенденций для длинных и коротких позиций. Когда краткосрочная скользящая средняя пересекает длинную скользящую среднюю, это считается сигналом покупки. Когда краткосрочная скользящая средняя пересекает длинную скользящую среднюю, это считается сигналом продажи.

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

Эта стратегия основана на трех простых скользящих средних (SMA) различных периодов: 50-дневный, 100-дневный и 200-дневный.

  1. Сигнал входа: когда 50-дневная скользящая средняя пересекает 100-дневную скользящую среднюю, перейти на длинный курс.

  2. Сигнал выхода: когда 50-дневная скользящая средняя пересекается ниже 100-дневной скользящей средней, закрываются позиции; или когда цена закрытия находится ниже 100-дневной скользящей средней, выходит; или когда 100-дневная скользящая средняя пересекается ниже 200-дневной скользящей средней, выходит.

  3. Приобретение прибыли и стоп-лосс: установка последующей прибыли и фиксированная стоп-лосс.

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

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

  1. Простая в реализации, требует всего трех скользящих средних различных периодов.

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

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

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

Риски

  1. Частые перекрестки могут происходить, когда краткосрочные и долгосрочные средние показатели слишком близки, что приводит к чрезмерному количеству недействительных сигналов.

  2. Движущиеся средние реагируют на изменения цен медленно и не могут мгновенно реагировать на новости рынка и основные события.

  3. Невозможность извлечь выгоду из незначительных колебаний.

  4. Субъективный выбор параметров: соответствующие периоды скользящих средних в значительной степени субъективны и зависят от конкретного рынка.

Возможности для расширения

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

  2. Включить другие показатели для комбинационных стратегий, которые могут улучшить точность сигналов, например, показатели волатильности или объема.

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

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

Заключение

Golden Cross Moving Average Trading Strategy - это типичная стратегия, следующая за трендом. Она отражает тенденции средней рыночной цены просто и практически, подходит для новичков. Однако у нее также есть некоторые недостатки, которые могут быть улучшены за счет улучшения качества сигнала, объединения с другими техническими индикаторами, внедрения адаптивных механизмов и т. д. для адаптации к более сложным рынкам. В целом, это стратегия с высокой справочной и учебной ценностью.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
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/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)


Больше