首页 > 其他分享 >0基础开始Pine量化 多重时间框架EMA+Supertrend策略(附代码)

0基础开始Pine量化 多重时间框架EMA+Supertrend策略(附代码)

时间:2024-09-10 19:26:40浏览次数:7  
标签:EMA color Supertrend Pine ATR 趋势 condition

0基础开始Pine量化 多重时间框架EMA+Supertrend策略(附代码)

基于金叉动量捕捉策略:多重时间框架指数移动平均线交叉系统
三重超级趋势交叉策略
发明者量化网站上回测试验

啥是EMA(指数移动平均线)

EMA(Exponential Moving Average) 是一种用于金融市场技术分析的趋势跟踪指标。与简单移动平均线(SMA)相比,EMA对近期的价格变化更加敏感,因为它赋予较新的价格数据更高的权重。EMA的目的在于平滑价格波动,从而帮助交易者识别市场的趋势方向。

计算方式:
EMA的计算公式为:

\(EMA=(\frac{2}{N+1})\times(当前价格−前一周期的EMA)+前一周期的EMA\)

其中,N是选定的周期数。与SMA不同,EMA对新数据的反应更加迅速,因为它对最新的价格赋予更大的权重。

应用场景:
趋势确认:EMA可以用于判断价格是处于上涨趋势还是下跌趋势。当价格高于长期EMA(如50、200周期)时,通常表明市场处于上升趋势,反之则表示下跌趋势。
动量策略:交易者经常结合多个不同周期的EMA来判断趋势的变化,例如9周期EMA和26周期EMA交叉。短期EMA上穿长期EMA被称为金叉,代表买入信号,短期EMA下穿长期EMA被称为死叉,代表卖出信号。
风险管理:EMA可以帮助交易者设置动态的止损和止盈位。

啥是Supertrend(超级趋势)

Supertrend 是一种基于市场波动性和价格的趋势跟踪指标。它通过使用ATR(平均真实波动范围)来衡量市场的波动,并根据价格的变化动态生成趋势线,帮助交易者捕捉趋势的反转点。

计算方式:
Supertrend的核心是ATR,它通过以下步骤计算:

ATR:先计算出给定周期的ATR,ATR用于衡量市场的波动性。

  • 步骤1:计算每一天的真实波动范围(True Range, TR)
    \(TR=max(|H-L|,|H-C_prev|,|L-C_prev|)\),其中
    \(H=\)当前交易日的最高价(High)
    \(L=\)当前交易日的最低价(Low)
    \(C_prev=\)前一个交易日的收盘价(Previous Close)
    真实波动范围的三个可能值分别为:

    • 当前交易日的最高价与最低价之间的差值(当天的价格波动)
    • 当前交易日的最高价与前一天收盘价之间的差值
    • 当前交易日的最低价与前一天收盘价之间的差值
  • 步骤2:计算n天的平均真实波动范围(ATR)
    ATR是n天的TR的简单移动平均值,常见的周期为14天:
    \(ATR=\frac{TR_1+TR_2+···+TR_n}{n}\)
    其中,n表示选定的时间周期,通常为14个交易日。ATR值会随着市场波动的增大而上升,随着波动的减弱而下降。

Supertrend线:将当前ATR乘以一个特定的倍数(如2或3),并将其加到价格上方或减到价格下方,生成趋势线。当价格突破上方趋势线时,表明市场进入上涨趋势;当价格跌破下方趋势线时,表明市场进入下跌趋势。

多重时间框架EMA回测

1.多重时间框架分析:

  • 在较高时间框架(如日线或4小时线)上分析EMA 9、EMA 26和EMA 55的走势,确定整体市场趋势。(9、26、55是指这些EMA的周期,即每条EMA的计算基础是过去多少个时间单位的价格数据。这些数字定义了每个EMA的“灵敏度”和“时间跨度”。)
  • 如果EMA 55在高时间框架上呈上升趋势,则视为牛市环境;如果呈下降趋势,则视为熊市环境。

2.低时间框架执行:

  • 在确定高时间框架趋势后,转向较低时间框架(如15分钟或1小时)寻找具体的交易信号。
  • 买入信号:当EMA 9从下方穿过EMA 26,且两者都位于EMA 55上方时,产生买入信号。
  • 卖出信号:当EMA 9从上方穿过EMA 26,且两者都位于EMA 55下方时,产生卖出信号。

3.信号确认:

  • 买入确认:除了EMA交叉外,还需要EMA 9和EMA 26都位于EMA 55上方,并且与高时间框架的牛市趋势一致。
  • 卖出确认:除了EMA交叉外,还需要EMA 9和EMA 26都位于EMA 55下方,并且与高时间框架的熊市趋势一致。

下面是2024-6-30到2024-7-30的回测

可以发现效果还是不错的,年化收益高,但夏普比率低,回撤也还行

下面是2023-6-30到2024-7-30的回测

回撤很高

三重超级趋势交叉回测

该策略使用了三个超级趋势指标,分别是:

  1. 超级趋势1:周期为7,因子为3
  2. 超级趋势2:周期为14,因子为2
  3. 超级趋势3:周期为21,因子为1

周期是用于计算ATR(平均真实波动范围,Average True Range)的时间长度。ATR衡量市场的波动性,周期越长,ATR越平滑。在"周期为7"的情况下,ATR基于最近7个单位的价格数据进行计算。这个单位可以是分钟、小时、日线等,具体取决于你在图表中选择的时间框架。例如,如果你使用的是1小时图,并设置了周期为7,则ATR会基于最近7个小时的市场波动来计算。

因子决定了ATR的放大倍数,用于生成超级趋势线与价格之间的距离。在"因子为3"的情况下,ATR的值会乘以3,得到一个更大的值,这会使超级趋势线在价格图上显得更远离当前价格。因子越大,超级趋势线就越宽松,给出的买卖信号就越少,过滤掉的噪音更多。较小的因子则使得趋势线更贴近价格,产生更多的信号,但噪音也可能增加。

策略的运作原理如下:

  1. 买入信号:当价格向上穿越任意一条超级趋势线时触发
  2. 卖出信号:当价格向下穿越任意一条超级趋势线时触发
  3. 策略在买入信号出现时开仓做多,在卖出信号出现时平仓

下面是2024-6-30到2024-7-30的回测

下面是2023-6-30到2024-7-30的回测,回撤还是不行

(改进版)多重时间框架EMA+Supertrend策略

就是把两个测试组合一下

下面是2024-6-30到2024-7-30的回测

下面是2023-6-30到2024-7-30的回测

回撤下来了,但可惜的是,年化收益也下来了,虽然达到了实习考核要求,但为啥会这样呢?

原因:

降低回撤:当策略通过加入多个过滤器(如Supertrend和多重时间框架EMA)减少了不利的市场波动影响时,回撤率会下降,因为策略更倾向于减少交易次数,避免风险较高的行情。这有效控制了潜在的亏损。

收益减少:然而,减少回撤往往伴随着风险的减少,意味着策略可能会错失一些高风险的交易机会。这些机会虽然带有较大的潜在回撤,但同样也有可能带来高额的收益。因此,降低回撤的同时,减少了高收益的交易机会,导致年化收益率下降。

而且Supertrend与多重时间框架EMA都倾向于追踪大趋势并过滤短期波动。这可能导致在趋势的初期或震荡市中,信号被过滤掉,从而无法抓住市场中的反弹或趋势反转。这些反转点往往是短期内可以带来较高收益的机会,但被过滤掉后,收益率会下降。

源码

/*backtest
start: 2024-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Golden Crossover with Supertrend", overlay=true)

// Define EMA lengths
ema9_length = 9
ema26_length = 26
ema55_length = 55

// Input parameters for different timeframes
timeFrame9 = input.timeframe('', 'Time Frame - EMA 9')
timeFrame26 = input.timeframe('', 'Time Frame - EMA 26')
timeFrame55 = input.timeframe('', 'Time Frame - EMA 55')

// Request EMA data from specified time frames
ema9 = request.security(syminfo.tickerid, timeFrame9, ta.ema(close, ema9_length))
ema26 = request.security(syminfo.tickerid, timeFrame26, ta.ema(close, ema26_length))
ema55 = request.security(syminfo.tickerid, timeFrame55, ta.ema(close, ema55_length))

// Supertrend function
supertrend(length, factor) =>
    [superTrend, direction] = ta.supertrend(factor, length)
    superTrend

// Supertrend parameters
length1 = 7
factor1 = 3
length2 = 14
factor2 = 2
length3 = 21
factor3 = 1

// Supertrend calculations
superTrend1 = supertrend(length1, factor1)
superTrend2 = supertrend(length2, factor2)
superTrend3 = supertrend(length3, factor3)

// Plot EMAs on the chart
plot(ema9, color=color.black, title="EMA 9")
plot(ema26, color=color.green, title="EMA 26")
plot(ema55, color=color.red, title="EMA 55")

// Plot Supertrend lines
plot(superTrend1, color=color.red, title="Supertrend 1")
plot(superTrend2, color=color.green, title="Supertrend 2")
plot(superTrend3, color=color.blue, title="Supertrend 3")

// Define buy and sell conditions combining EMA crossover and Supertrend
buy_condition_ema = ta.crossover(ema9, ema26) and ema26 > ema55
sell_condition_ema = ta.crossunder(ema9, ema26) and ema26 < ema55

buy_condition_supertrend = ta.crossover(close, superTrend1) or ta.crossover(close, superTrend2) or ta.crossover(close, superTrend3)
sell_condition_supertrend = ta.crossunder(close, superTrend1) or ta.crossunder(close, superTrend2) or ta.crossunder(close, superTrend3)

// Combine the conditions
buy_condition = buy_condition_ema and buy_condition_supertrend
sell_condition = sell_condition_ema or sell_condition_supertrend

// Execute buy and sell orders
if (buy_condition)
    strategy.entry("Buy", strategy.long)

if (sell_condition)
    strategy.close("Buy")

// Plot buy and sell signals on the chart
plotshape(series=buy_condition, location=location.belowbar, color=color.green, style=shape.arrowup, title="Buy Signal")
plotshape(series=sell_condition, location=location.abovebar, color=color.red, style=shape.arrowdown, title="Sell Signal")

可能的改进:

调整参数,结合一些其他的动量指标(如RSI、MACD)来增加策略的信号确认,避免过度依赖于趋势信号

标签:EMA,color,Supertrend,Pine,ATR,趋势,condition
From: https://www.cnblogs.com/Mephostopheles/p/18406658

相关文章

  • [设计模式] Cola-StateMachine : 一个轻量实用的Java状态机框架
    1概述:状态机1.0状态机vs工作流在介绍状态机之前,先介绍一个工作流(WorkFlow),初学者通常容易将两个概念混淆。工作流(WorkFlow),大体是指业务过程(整体或者部分)在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的描述。在计算机系统中,工作流属于计算机支持的......
  • 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正
    2024-09-04:用go语言,给定一个长度为n的数组happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是尽可......
  • ​emark认证是什么意思?有效期多久?
    在探讨emark认证的含义及其有效期之前,我们首先需要理解emark认证在全球汽车及交通行业中的重要地位。emark认证,全称欧洲经济委员会汽车产品认证,是欧洲经济委员会(ECE)针对车辆及其零部件实施的一种产品质量认证体系。它旨在确保车辆及其零部件符合欧洲相关的技术法规和标准,从而保障道......
  • 信号量 Semaphore
    SemaphoreSemaphore更加适合用于控制对有限资源的访问,特别是当你需要允许一定数量的线程同时访问资源时CountDownLatch更加适合用于协调多个线程的完成状态,确保在某些操作完成后再执行后续操作它用于控制对共享资源的访问,通过维护一个许可的计数器来限制同时访问某个资源的线......
  • androidstudio报错devicemanager出错问题
    2024-09-0911:01:57,029[1446798]WARN-Emulator:Pixel8ProAPI35-Failedtoprocess.inifileC:\Users\钁f旦.android\avd<build>.iniforreading.如如何解决1.查日志C:\Users\董浩\AppData\Local\Google\AndroidStudio2024.1\log这个是默认位置我的错误是202......
  • Mathematica 入门
    前言WolframMathematica(简称MMA),是由WolframResearch开发的科学计算软件。本文我们将介绍Mathematica的界面、语法和基本应用。类似的软件还有MATLAB和Maple等。MMA官网:https://www.wolfram.com/mathematica/MMA的安装及激活:Mathematica安装激活极简教程-科研小......
  • DeviceManager的使用
    (水一下DeviceManager)1.登录进去可以看到仪表板,查看存储设备的总体状况2.点击右侧的“系统”,可以查看硬件设备的面板图,以及每一块磁盘的运行状况。点击旋转的按钮,还能查看背面面板,可以看到具体的接口数量、类型、电源、风扇。3.点击右侧“资源分配”标签,这是系统最核心......
  • SG-SLAM: A Real-Time RGB-D Visual SLAMToward Dynamic Scenes With Semantic andGeo
    目录一、引言二、相关工作A.动态场景中的SLAMB.语义建图三、系统概述A.系统框架B.目标检测C.极线约束D.动态特征剔除策略E.动态特征剔除策略四、实验结果A.基于TUMRGB-D数据集的性能评估B.BonnRGB-D数据集的性能评估 C.动态特征剔除策略的有效性D.时间分析......
  • emark认证和ce认证有什么区别
    当我们探讨emark认证和CE认证之间的区别时,首先要明确的是,这两种认证都是欧洲市场中常见的产品合规性要求,但它们各自的目标、范围和流程存在显著的不同。下面,我们将详细解析这两种认证之间的主要差异。一、认证目标与应用范围emark认证,也被称为E-mark认证,是欧洲经济委员会(ECE)针对车......
  • ECOS3010 mathematical equations
    ECOS3010:Assignment1(Total:20marks)Due11:59pm,FridayAug30,2024Homeworkmustbeturnedinonthedayitisdue.Worknotsubmittedonorbeforetheduedateissubjecttoapenaltyof5%percalendardaylate.Ifworkissubmittedmorethan......