基于多时间框架趋势跟踪策略

Author: ChaoZhang, Date: 2024-02-19 11:13:22
Tags:

基于多时间框架趋势跟踪策略

概述

该策略是一个利用多个时间框架指标同意的趋势跟踪策略。它会在日线、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)


更多内容