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

Автор:Чао Чжан, Дата: 2024-01-15 14:24:27
Тэги:

img

Обзор

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

Принципы

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

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

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

  2. Если движущаяся средняя цена закрытия переходит ниже движущейся средней цены открытия, вы можете пойти на короткую позицию.

  3. Закрыть существующие позиции с остановкой потери при обратном сигнале.

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

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

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

Эта стратегия имеет следующие основные преимущества:

  1. Простые и ясные правилаСуждение о тенденции на основе открытого-близкого отношения легко понять и оптимизировать параметры для.

  2. Гибкие варианты MAЕсть десятки типов MA, из которых можно выбрать и оптимизировать.

  3. Регулируемое разрешениеРазрешение может быть установлено на 3-4x диаграммы для большей чувствительности и своевременности сигналов.

  4. Механизм остановки потерьПоследовательная остановка эффективно контролирует потери и снижение по сделке.

  5. Период хранения, подлежащий настройкеПериод хранения и волатильность могут контролироваться путем корректировки параметров MA.

  6. Гибко регулируемый риск-вознаграждениеСтоп-потери и компенсации тонкие мелодии риск-вознаграждение предпочтения.

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

Основные риски этой стратегии заключаются в следующих областях:

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

  2. Не подходит для условий высокой волатильностиЧастые сбои в условиях волатильности создают высокие комиссионные расходы.

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

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

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

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

  1. Дополнительные показателиПоказатели волатильности и импульса могут повысить устойчивость и стабильность.

  2. Условные динамические параметрыПериоды MA могут быть скорректированы на основе тенденций или обнаружения боковых рыночных режимов для улучшения адаптивности.

  3. Динамическое управление рискамиТочки остановки потери и компенсации могут быть калиброваны на недавних уровнях волатильности.

  4. Улучшенная логика стоп-лоссаБолее продвинутые механизмы остановки потери, такие как остановки ATR, могут заменить упрощенную остановку.

Заключение

Открытая стратегия последовательности движущихся средних (Open Close Cross Moving Average Trend Following Strategy) - это типичная стратегия торговли трендом, основанная на отношениях между открытыми и закрытыми и движущимися средними.


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===


Больше