Классическая стратегия торговли на основе скользящей средней «Золотой крест»


Дата создания: 2023-12-11 11:37:36 Последнее изменение: 2023-12-11 11:37:36
Копировать: 0 Количество просмотров: 606
1
Подписаться
1621
Подписчики

Классическая стратегия торговли на основе скользящей средней «Золотой крест»

Обзор

Голден Кросс (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. Добавление условий фильтрации, чтобы избежать создания слишком много ложных сигналов. Например, установка диапазона колебаний цены в качестве фильтра, который будет генерировать торговый сигнал только при прорыве определенной amplitude.

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

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

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

Подвести итог

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

Исходный код стратегии
/*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)