
Эта стратегия основана на перекрестных торговых сигналах открытия и высокой цены. Сделать больше, когда цена открывается, и сделать пустое, когда цена открывается. Использование движущихся средних может сгладить данные о цене, уменьшить шум в торговле.
В зависимости от входных параметров определяется, используется ли альтернативная периодическая разрешаемость ((useRes) 。 Если используется, то периодическая разрешаемость устанавливается в соответствии с stratRes 。
В зависимости от входных параметров определяется, используется ли скользящая средняя ((useMA) 。 Если используется, выбирается тип скользящей средней в соответствии с basicType, basisLen устанавливает длину цикла。
Получение серии данных с открытыми (open) и закрытыми (close) ценами. Если используется движущаяся средняя, применяется выбранный тип движущейся средней и гладкая обработка параметров.
Сравнение текущих начальных цен x и начальных цен серии openSeries. Если x больше openSeries, то состояние тренда trendState является многоглавым, в противном случае - пустым.
Долгокондный сигнал при прохождении скользящей средней цены над начальной ценой и короткокондный сигнал при прохождении скользящей средней цены ниже начальной цены.
В зависимости от того, что вы делаете, входите в позиции с несколькими головами или пустыми головами. Если включено отслеживание стоп-убытков, установите стоп-точки и расстояние смещения.
Используйте две различные серии открытых и высоких цен для определения торговых сигналов, чтобы избежать ограничений одной серии данных.
Использование технологии “движущихся средних” позволяет отфильтровывать краткосрочный рыночный шум и зафиксировать основные тенденции.
Гибкость в настройке типов скользящих средних, приспособление параметров для оптимального эффекта.
Вы можете выбрать использование стоп-лосса для контроля риска и блокировки прибыли.
Есть много возможностей для оптимизации стратегии и параметров для различных сортов и рыночных условий.
Сигналы поступают из одного источника, сигналы редки, пропускаются.
Условия, связанные с отставанием от скользящих средних, могут привести к упущению краткосрочных возможностей.
Неправильные настройки для отслеживания остановки могут привести к преждевременной или слишком большой остановке.
Неправильная настройка параметров может привести к тому, что виртуальные транзакции будут происходить слишком часто, что повлияет на эффективность реального диска.
Различные сорта и рыночные условия требуют корректировки параметров, оптимизация является более сложной.
Можно обогатить источник сигнала, добавив другие показатели суждения или вводя модели машинного обучения. • Настроить типы и параметры скользящих средних для достижения оптимального эффекта сглаживания. • Осторожно установить точку остановки, а также надлежащим образом расширить для получения большей прибыли. • Оптимизировать полное обратное измерение, чтобы гарантировать надежность параметров.
Добавление других технических показателей, таких как Brin Belt, KD и т.д., обогащает торговый сигнал.
Применение моделей машинного обучения для обработки сигналов.
Оптимизация параметров скользящих средних, чтобы найти оптимальное сочетание параметров.
Оптимизация параметров отслеживания стоп-лосса, балансировка стоп-лосса и получение прибыли.
Добавлена функция оптимизации параметров, которая автоматически ищет оптимальные параметры.
Разработка собственных шаблонов параметров для разных сортов.
Разработать рамки для количественной обратной связи и стратегии быстрого воспроизводства.
Эта стратегия основана на перекрестных оценках цены и высокой цены для определения торговых сигналов, используя технологию фильтрации шума с помощью движущихся средних. У нее есть определенные преимущества, но есть и некоторые проблемы, такие как небольшое количество сигналов, задержка и т. Д.
/*backtest
start: 2022-10-17 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
//strategy(title = "Open Close Cross Strategy", shorttitle = "OCC Strategy", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
// 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 )")
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 )")
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
v7 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len // Smoothed
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) => use ? request.security(syminfo.tickerid, res, exp) : exp
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
// open/close
//closeSeries = useMA ? reso(variant(basisType, close, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(close, useRes, stratRes)
openSeries = useMA ? reso(variant(basisType, open, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(open, useRes, stratRes)
x = openSeries[1]
trendState = x > openSeries ? true : x < openSeries ? false : trendState[1]
// === /SERIES ===
// === PLOTTING ===
barcolor(color = x > openSeries ? #006600 : #990000, title = "Bar Colours")
// channel outline
closePlot = plot(x, title = "Close Line", color = #009900, linewidth = 2, style = line, transp = 90)
openPlot = plot(openSeries, title = "Open Line", color = #CC0000, linewidth = 2, style = line, transp = 90)
// channel fill
closePlotU = plot(trendState ? x : na, transp = 100, editable = false)
openPlotU = plot(trendState ? openSeries : na, transp = 100, editable = false)
closePlotD = plot(trendState ? na : x, 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(openSeries, x)
shortCond = crossunder(openSeries, x)
// entries and base exit
strategy.entry("long", true, when = longCond)
strategy.entry("short", false, 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 ===