Tv策略学习笔记

尝试用Tv写了一个基于EMA的策略,目前能做到简单的条件判断,EMA12上穿EMA144和EMA169的时候开多,EMA12下穿EMA144和EMA169的时候止损。开空则完全相反。

优势是可以抓住趋势,问题是在震荡中会不断止损,不能保证盈利,过程中还是需要人为介入。

把代码记录在这里,大家可以导入Tv自己尝试做一下回测,看看是不是启发:

做多的条件:

//@version=6
strategy("EMA策略 - 做多", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 定义与开单相关的EMA周期
ema12 = ta.ema(close, 12)
ema144 = ta.ema(close, 144)
ema169 = ta.ema(close, 169)

// 绘制与策略相关的EMA线
plot(ema12, color=color.blue, title="EMA 12", linewidth=2)
plot(ema144, color=color.green, title="EMA 144", linewidth=1)
plot(ema169, color=color.orange, title="EMA 169", linewidth=1)

// 条件:EMA12向上穿越EMA144和EMA169
long_condition = ta.crossover(ema12, math.max(ema144, ema169))

// 平仓条件:EMA12下穿EMA144和EMA169
exit_long_condition = ta.crossunder(ema12, math.min(ema144, ema169))

// 开多逻辑
if (long_condition)
    strategy.entry("Long", strategy.long)

// 平多逻辑
if (exit_long_condition)
    strategy.close("Long")          

做空的条件:

//@version=6
strategy("EMA策略 - 做空", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 定义与开单相关的EMA周期
ema12 = ta.ema(close, 12)
ema144 = ta.ema(close, 144)
ema169 = ta.ema(close, 169)

// 绘制与策略相关的EMA线
plot(ema12, color=color.blue, title="EMA 12", linewidth=2)
plot(ema144, color=color.green, title="EMA 144", linewidth=1)
plot(ema169, color=color.orange, title="EMA 169", linewidth=1)

// 条件:EMA12向下穿越EMA144和EMA169
short_condition = ta.crossunder(ema12, math.min(ema144, ema169))

// 平仓条件:EMA12上穿EMA144和EMA169
exit_short_condition = ta.crossover(ema12, math.max(ema144, ema169))

// 开空逻辑
if (short_condition)
    strategy.entry("Short", strategy.short)

// 平空逻辑
if (exit_short_condition)
    strategy.close("Short")