Стратегия Golden Cross по отслеживанию восходящего тренда

Автор:Чао Чжан, Дата: 2024-01-03 11:46:44
Тэги:

img

Обзор

Эта стратегия разработана на основе принципа золотого креста скользящих средних. В частности, она использует два простых скользящих средних различных периодов, а именно 50-периодную линию и 200-периодную линию. Когда 50-периодная линия проходит через 200-периодную линию снизу, генерируется сигнал покупки. Когда 50-периодная линия проходит через 200-периодную линию сверху, генерируется сигнал продажи.

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

Стратегия написана на языке Pine Script, основная логика следующая:

  1. Вычислить два SMA: 50-периодный SMA и 200-периодный SMA
  2. Определить золотой крестик: когда 50-периодная SMA пересекает 200-периодную SMA, перейти на длинный курс
  3. Определить перекресток смерти: когда 50-периодная SMA пересекается ниже 200-периодной SMA, закрыть позицию

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

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

Стратегия имеет следующие преимущества:

  1. Простые и понятные принципы, которые легко реализовать.
  2. Разумные настройки параметров, настраиваемые два периода SMA, адаптируемые к разным рынкам.
  3. Написано на стабильной версии языка Пайн, работает эффективно.
  4. Богатые визуальные настройки, легко использовать.

Риски и решения

Стратегия также сопряжена с некоторыми рисками:

  1. Может возникнуть ложный прорыв, генерирующий неправильные сигналы.

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

  3. Вывод может быть большим, может установить стоп-лосс или правильно регулировать управление позицией.

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

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

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

  2. Добавьте механизм стоп-лосса. Обязательный стоп-лосс, когда цена проходит определенный уровень.

  3. Оптимизируйте управление позициями. Например, пирамида вдоль тренда, отслеживание стоп-лосса и т. Д. Чтобы контролировать снижение и добиваться более высокой доходности.

  4. Оценка влияния различных параметров на соотношение доходность/риск.

Заключение

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


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// www.tradingview.com/u/TradeFab/
// www.tradefab.com
// ___  __        __   __  __       __
//  |  |__)  /\  |  \ |__ |__  /\  |__)
//  |  |  \ /~~\ |__/ |__ |   /~~\ |__)
//
// DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss 
// and is not suitable for every investor. You are responsible for all the risks and 
// financial resources you use and for the chosen trading system.
// Past performance is not indicative for future results. In making an investment decision,
// traders must rely on their own examination of the entity making the trading decisions!
//
// TradeFab's Golden Cross Strategy.
// The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses
// above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short.
//
VERSION = "1.2"
// 1.2 FB 2020-02-09 converted to Pine version 4
// 1.1 FB 2017-01-15 added short trading
// 1.0 FB 2017-01-13 basic version using SMAs
//
strategy(
   title        = "TFs Golden Cross " + VERSION, 
   shorttitle   = "TFs Golden Cross " + VERSION, 
   overlay      = true
   )


///////////////////////////////////////////////////////////
// === INPUTS ===
///////////////////////////////////////////////////////////
inFastSmaPeriod     = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1)
inSlowSmaPeriod     = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1)

// backtest period
testStartYear       = input(title="Backtest Start Year",    type=input.integer, defval=2019, minval=2000)
testStartMonth      = input(title="Backtest Start Month",   type=input.integer, defval=1, minval=1, maxval=12)
testStartDay        = input(title="Backtest Start Day",     type=input.integer, defval=1, minval=1, maxval=31)
testStopYear        = input(title="Backtest Stop Year",     type=input.integer, defval=2099, minval=2000)
testStopMonth       = input(title="Backtest Stop Month",    type=input.integer, defval=12, minval=1, maxval=12)
testStopDay         = input(title="Backtest Stop Day",      type=input.integer, defval=31, minval=1, maxval=31)


///////////////////////////////////////////////////////////
// === LOGIC ===
///////////////////////////////////////////////////////////
smaFast = sma(close, inFastSmaPeriod)
smaSlow = sma(close, inSlowSmaPeriod)

bullishCross = crossover (smaFast, smaSlow)
bearishCross = crossunder(smaFast, smaSlow)

// detect valid backtest period
isTestPeriod() => true


///////////////////////////////////////////////////////////
// === POSITION EXECUTION ===
///////////////////////////////////////////////////////////
strategy.entry("long",  strategy.long,  when=bullishCross)
strategy.entry("short", strategy.short, when=bearishCross)


///////////////////////////////////////////////////////////
// === PLOTTING ===
///////////////////////////////////////////////////////////
// background color
nopColor = color.new(color.gray, 50)
bgcolor(not isTestPeriod() ? nopColor : na)

bartrendcolor = 
   close > smaFast and 
   close > smaSlow and 
   change(smaSlow) > 0 
       ? color.green 
       : close < smaFast and 
         close < smaSlow and 
         change(smaSlow) < 0 
             ? color.red 
             : color.blue
barcolor(bartrendcolor)
plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2)
plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2)

// label
posColor = color.new(color.green, 75)
negColor = color.new(color.red, 75)
dftColor = color.new(color.blue, 75)
posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor

var label lb = na
label.delete(lb)
lb := label.new(bar_index, max(high, highest(5)[1]),
   color=posCol,
   text="Pos: "+ posDir +
      "\nPnL: "+tostring(posProfit, "#.##")+"%" +
      "\nClose: "+tostring(close, "#.##"))
  

Больше