Стратегия с несколькими временными рамками

Автор:Чао Чжан, Дата: 2024-02-19 11:13:22
Тэги:

img

Обзор

Эта стратегия использует согласование индикаторов на нескольких временных отрезках для отслеживания тенденций. Она идет длинным или коротким, когда ежедневные, 10-дневные, 15-дневные и 30-дневные временные отрезки одновременно дают бычьи или медвежие сигналы с динамическим стоп-лосом.

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

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

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

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

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

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

  1. Использование нескольких временных рамок для подтверждения тенденций может эффективно фильтровать ложные прорывы и определять направление тренда.

  2. Динамическая стоп-лосс позволяет максимально защитить капитал.

  3. Строгие критерии входа позволяют сократить ненужные сделки и расходы на сдвиг.

  4. Объединение нескольких временных рамок сбалансирует скорость и стабильность прибыли.

Риски

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

  2. Неправильное установление стоп-лосса может быть слишком агрессивным или консервативным.

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

  4. Неожиданные изменения событий не могут привести к прекращению потерь.

Области улучшения

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

  2. Проверьте различные параметры для оптимизации уровня остановки.

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

  4. Следите за значительными событиями, чтобы избежать потерь от внезапных изменений.

Резюме

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


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

//@version=2
strategy("[RichG] Easy MTF Strategy v1.1", overlay=false)

TF_1_time = input("D", "Timeframe 1")
TF_2_time = input("10D", "Timeframe 2")
TF_3_time = input("15D", "Timeframe 3")
TF_4_time = input("30D", "Timeframe 4")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
lengthBB=input(20, title="BB Length")
transaction_size = input(1, "Contract/Share Amount")

src = close, len = 20


out = sma(src, len)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line


kc() =>
    ma = sma(close, lengthKC)
    range = tr
    rangema = sma(range, lengthKC)
    upperKC = ma + rangema * multKC
    lowerKC = ma - rangema * multKC
    [lowerKC, upperKC] 

 
bb() =>
    source = close 
    basis = sma(source, lengthBB)
    dev = multKC * stdev(source, lengthBB)
    upperBB = basis + dev
    lowerBB = basis - dev
    [upperBB, lowerBB]

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor


TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear 
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long, qty=transaction_size)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short, qty=transaction_size)

[kc_lower,kc_upper] = kc()

strategy.close("MTF_Long", when=close < kc_upper)
strategy.close("MTF_Short", when=close > kc_lower)


Больше