Стратегия пересечения переменных периодов на основе истинного диапазона

Автор:Чао Чжан, Дата: 2024-01-17 15:09:28
Тэги:

img

Обзор

Эта стратегия использует истинный диапазон и взвешенную скользящую среднюю (WMA) для создания индикатора перекрестного периода для оценки тренда.

Принцип стратегии

Стратегия сначала рассчитывает амплитуду вверх (под) и амплитуду вниз (ниже), а затем рассчитывает WMA цикла быстрой линии (корто) и цикла медленной линии (ларго) соответственно. Разница между быстрой и медленной линиями снова рассчитывается через WMA, чтобы получить индикатор (инд). Когда индикатор пересекает выше 0, генерируется сигнал покупки. Когда он пересекает ниже 0, генерируется сигнал продажи.

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

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

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

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

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

Основным риском этой стратегии является возможность внезапного события, вызывающего быстрое изменение рынка, которое вызывает ограничение стоп-лосса и вызывает убытки.

Риск переворота рынка может быть преодолен путем соответствующего ослабления линии стоп-лосса.

Направление оптимизации

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

  1. Увеличить статистические показатели для оценки, использовать такие показатели, как волатильность и объем для корректировки параметров и сделать стратегию более адаптивной.

  2. Увеличить модель машинного обучения для суждения, использовать LSTM и другие модели глубокого обучения для оказания помощи в суждении и улучшения точности стратегии.

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

  4. Включить модели хеджирования фьючерсов для дальнейшего контроля рисков посредством спотового и фьючерсного арбитража.

Резюме

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


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
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/
// © MaclenMtz

//@version=5
strategy("[MACLEN] Rangos", shorttitle="Rangos [https://t.me/Bitcoin_Maclen]", overlay=false )

//------WINDOW----------

i_startTime = input(defval = timestamp("01 Jan 2022 00:00 -0700"), title = "Start Time", group = "Backtest Window")
i_endTime = input(defval = timestamp("31 Dec 2025 00:00 -0700"), title = "End Time")
window = true

//-----------------------------

sube = close>close[1] ? ta.tr : 0
baja = close<close[1] ? ta.tr : 0

corto = input(10)
largo = input(30)
suavizado = input(10)

fastDiff = ta.wma(sube, corto) - ta.wma(baja,corto)
slowDiff = ta.wma(sube, largo) - ta.wma(baja, largo)
ind = ta.wma(fastDiff - slowDiff, suavizado)

iColor = ind>0 ? color.green : ind<0 ? color.red : color.black
plot(ind, color=iColor)
plot(0, color=color.white)

long = ind[1]<ind and ind[2]<ind[1] and ind<0
short = ind[1]>ind and ind[2]>ind[1] and ind>0

plotshape(long and not long[1], style = shape.xcross, color=color.green, location=location.bottom, size=size.tiny)
plotshape(short and not short[1], style = shape.xcross, color=color.red, location=location.top, size=size.tiny)

//Contratos
contrato1 = input(50000)/(16*close)
c1 = contrato1
c2 = contrato1
c3 = contrato1*2
c4 = contrato1*4
c5 = contrato1*8

//cap_enopentrade = strategy.opentrades == 1 ? c1: strategy.opentrades == 2 ? c1+c2: strategy.opentrades == 3 ? c1+c2+c3: strategy.opentrades == 4 ? c1+c2+c3+c4: strategy.opentrades == 5 ? c1+c2+c3+c4+c5 : 0
openprofit_porc = math.round((close-strategy.position_avg_price)/strategy.position_avg_price * 100,2)

porc_tp = input.float(6.5)
safe = input(-6)

//----------------Strategy---------------------------

if strategy.opentrades == 0
    strategy.entry('BUY1', strategy.long, qty=c1, when = long and not long[1] and window)

if strategy.opentrades == 1
    strategy.entry('BUY2', strategy.long, qty=c2, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 2
    strategy.entry('BUY3', strategy.long, qty=c3, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 3
    strategy.entry('BUY4', strategy.long, qty=c4, when = long and not long[1] and window and openprofit_porc<safe)

if strategy.opentrades == 4
    strategy.entry('BUY5', strategy.long, qty=c5, when = long and not long[1] and window and openprofit_porc<safe)

min_prof = strategy.openprofit>0

strategy.close_all(when=short and min_prof)

plot(openprofit_porc)


Больше