动量跟踪策略


创建日期: 2023-11-23 13:47:02 最后修改: 2023-11-23 13:47:02
复制: 0 点击次数: 610
avatar of ChaoZhang ChaoZhang
1
关注
1617
关注者

动量跟踪策略

概述

该策略是一个利用K线实体大小和趋势动量指标EMA来判断市场趋势,实现低买高卖的自动交易策略。其基本思路是在上升行情中追涨杀跌,在下降行情中回补做多。

策略原理

  1. 根据K线实体大小将蜡烛分为渣渣蜡烛、小蜡烛、大蜡烛三种类型。
  2. 在EMA上升的情况下,如果出现大红蜡烛,说明市场在调整,此时抛出多单。
  3. 在EMA下降的情况下,如果出现大绿蜡烛,说明市场企稳,此时加仓建仓。
  4. 通过实时监控K线实体变化和EMA趋势,动态调整仓位。

优势分析

  1. 策略思路清晰,通过简单指标判断市场结构,容易理解。
  2. 策略参数较少,不易过拟合,稳定性较高。
  3. 实现了低吸高抛的交易逻辑,在行情大幅波动时获利明显。
  4. 兼顾趋势和反转,在行情转换时也能及时反应。

风险及优化

  1. 未考虑股价的绝对幅度,可能导致止损风险。可以结合ATR指标进行止损。
  2. 没有考虑加密货币的基差问题,可以测试更多的交易对。
  3. 可以引入机器学习算法辅助判断K线形态。
  4. 可以结合交易量指标筛选品种。
  5. 可以测试不同周期的参数调整。

总结

本策略整体思路清晰易懂,主要突出“动量”和“追踪”两个特点。通过简单的EMABOLL指标判断市场主线方向,K线实体判断局部调整,实现低吸高抛的高效交易。策略稳定性较高,在加密货币中表现尤为出色,值得进一步测试优化。

策略源码
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

strategy(title='Trend Follower Strategy v2 [divonn1994]', shorttitle='TrendFollowStrategyV2', overlay=false, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=100)

//Important Constants for Classifying Candle Size----------------------------------------------------------------------------------------------------------------------------------------------

timesBigger = 2
crumbSize = 1400
crumbSize2 = 2100
bigCandleSize = 3800

//Key Alerts and Classifications of Candle Size and EMAs---------------------------------------------------------------------------------------------------------------------------------------

emaAlert = ta.ema(close, 8) > ta.ema(open, 8) ? 1 : 0 
CandleSize = close * 1 - open * 1
previousCandleSize = close[1] * 1 - open[1] * 1
greenCandle = close > open ? 1 : 0
previousGreenCandle = close[1] > open[1] ? 1 : 0

crumb = (greenCandle==1 and CandleSize<=crumbSize) or (greenCandle==0 and -CandleSize<=crumbSize) ? 1 : 0
bigCrumb = (greenCandle==1 and CandleSize<=crumbSize2 and CandleSize>crumbSize) or (greenCandle==0 and -CandleSize<=crumbSize2 and -CandleSize>crumbSize) ? 1 : 0
previousCandleIsSmallCrumb = (previousGreenCandle==1 and previousCandleSize<=crumbSize) or (previousGreenCandle==0 and -previousCandleSize<=crumbSize) ? 1 : 0
previousCandleIsBigCrumb = (previousGreenCandle==1 and previousCandleSize<=crumbSize2 and previousCandleSize>crumbSize) or (previousGreenCandle==0 and -previousCandleSize<=crumbSize2 and -previousCandleSize>crumbSize) ? 1 : 0

bigCandle = (greenCandle==1 and previousCandleIsBigCrumb==1 and CandleSize>=math.abs(timesBigger*previousCandleSize)) or (greenCandle==1 and previousCandleIsSmallCrumb==1 and CandleSize>=bigCandleSize) or (greenCandle==1 and previousCandleIsSmallCrumb==0 and previousCandleIsBigCrumb==0 and CandleSize>=math.abs(timesBigger*previousCandleSize)) ? 1 : 0

//Engine (Secret Sauce)------------------------------------------------------------------------------------------------------------------------------------------------------------------------

buy = (crumb==0 and bigCrumb==0 and greenCandle==0) or (greenCandle==1 and bigCandle==1) or (emaAlert==0) ? 0 : 1

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

if ta.crossover(buy, 0.5)
    strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(buy, 0.5)
    strategy.close('long')

//Plot Strategy Behavior-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(buy, color=color.new(color.silver, 0))
plot(0.5, color=color.new(color.fuchsia, 0))