尝试用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")
