商品期货量化交易-TradingviewPine语言基础课程(十七):量化交易指标:趋势指标

Author: ianzeng123, Created: 2023-03-20 10:17:46, Updated:

大家好,在前面的课程中。我们完整的学习了Pine语言的语法结构及其交易函数。至此,Pine语言的理论讲解部分告一段落,从今天起,我们开始转向对接真实的期货交易市场,研究怎样利用Pine语言帮助进行量化交易,搭建自己的量化交易系统。

身为一个新手,对于大盘的理解可以用四个字来形容,眼花缭乱。为什么在自己不交易的时候,指标嗖嗖的上涨或者下跌,而自己一旦买入或者卖出,那指标就磨磨蹭蹭,逐笔浮盈的颜色始终在黑色(平价)或者绿色(亏损)转换,有时候会怀疑是否几个亿的资金大盘是否都是在针对自己?于是,寻找不确定性中的确定性变成了我们盈利的突破点所在。

指标作为从历史数据中统计出来的结果,代表着一定的惯性。如果趋势继续存在,那么指标就是在不确定的海洋中,一盏弱小的指引方向的灯塔。纵使灯塔也可能存在于海市蜃楼中,指标也可以作为辅助判断的依据。因此,从今天起,我将带领大家学习量化指标。因此,本部分的内容将对量化指标系统进行一个较为系统的讲解。当然,这部分的内容一方面是在学习怎样利用Pine语言构造量化指标,更重要的是学习这些量化指标的理念。在参考了各类金融软件系统对指标的讲解和网络上各路视频的讲解,可以发现指标的使用方法很多很杂,各类策略有可能还存在冲突的地方,没有一以贯之的黄金策略。因此,本部分的内容将以讲解指标概念和计算方法为关键点,怎样利用指标编写一个完美的交易策略还需要大家对市场有着更为深刻的理解,所以在这部分的课程中,对于指标的策略展示,教学展示的策略都比较简单,仅为教学展示用,不可轻易应用于实盘,仅仅起到一个抛砖引玉的作用。在真实的市场中,需要根据自己的理解,对指标进行更多的优化,才能真正的将这些指标应用于自己的量化交易系统中。

指标系统可以分为趋势指标,反趋势指标,压力支撑指标,量价指标,能量指标和成交量指标等。趋势交易策略,也被称为趋势跟随策略,旨在延续现有的趋势。本节课的内容,我们将以趋势指标为讲述对象,讲解几个示范指标的概念及其在Pine语言中的使用方法。

BBI

BBI指标,即多空指标,英文全名为"Bull And Bear lndex",简称BBI,是一种将不同日数移动平均线加权平均之后的综合指标,属于均线型指标,一般选用3日、6日、12日、24日等4条平均线。在使用移动平均线时,投资者往往对参数值选择有不同的偏好,而多空指标恰好解决了中短期移动平均线的期间长短合理性问题。很明显,在BBI指标中,近期数据较多,远期数据利用次数较少,因而是一种变相的加权计算。由于多空指标是一条混合平均线,所以既有短期移动平均线的灵敏,又有明显的中期趋势特征,适于稳健的投资者。

img

计算公式

  1. 3日均价=3日收盘价之和/3
  2. 6日均价=6日收盘价之和/6
  3. 12日均价=12日收盘价之和/12
  4. 24日均价=24日收盘价之和/24
  5. BBI=(3日均价+6日均价+12日均价+24日均价)/4

基本用法

1.价格位于BBI上方,视为多头市场。 2.价格位于BBI下方,视为空头市场。 3.下跌行情中,若当日收盘价跌破BBI曲线,表示多转空,为卖出信号。 4.上涨行情中,若当日收盘价升越BBI曲线,表示空转多,为买入信号。 5.上升回档时,BBI为支持线,可以发挥支撑作用。 6.下跌反弹时,BBI为压力线,可以发挥阻力作用。

BBI的周期也有多种选择,短线选择较短周期,长线选择较长周期。

Pine语言代码

首先计算四个均价,然后平均计算BBI,接着利用和close价格的“黄金”或者“死亡”交叉进行买卖信号的判断。

BBI = (ta.sma(close,3)/3 + ta.sma(close,6)/6 + ta.sma(close,12)/12 + ta.sma(close,24)/24)/4 
DIF= BBI - close


plot(BBI,  title = 'BBI', color=color.blue)
plot(DIF, title = 'DIF', color=histLine > 0 ? color.red : color.green, style=plot.style_histogram)

if ta.crossover(DIF,0) 
    strategy.entry('long',strategy.long,comment = 'long')
if ta.crossunder(DIF,0) 
    strategy.entry('short',strategy.short,comment = 'short')

优势

BBI指标,可以综合不同时间段的移动平均线的具体数值,数值更加具体和客观。

使用简单,可以轻松的判断多空趋势。

缺点 BBI的本质上是对MA的一种改进,所以,也具有一些类似于MA的缺点: 1、指标信号的滞后性。 2、指标信号的频发现象,特别在趋势不明朗时,这种现象更为严重。 3、指标单一。

相似指标:TRIX

三重指数平滑平均线(TRIX)属于中长线指标。它过滤掉许多不必要的波动来反映股价的长期波动趋势。TRIX指标又叫三重指数平滑移动平均指标,其英文全名为“Triple Exponentially Smoothed Average”,是一种研究股价趋势的长期技术分析工具。与BBI理念类似,TRIX使用EMA作为均值的计算方法。

img

MACD

概念

MACD(Moving Average Convergence and Divergence)在我们前面的课程中多次被提到,它 是利用收盘价的短期(常用为12日)指数移动平均线与长期(常用为26日)指数移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。

img

计算方法

一、差离值(DIF值):

先利用收盘价的移动平均值(12日/26日)计算出差离值。EMA是指数平均数指标。

DIF的计算方法为:

DIF = EMA(close,12) - EMA(close,26)

二、讯号线(DEM值,又称MACD值):

计算出DIF后,会再画一条“讯号线”,通常是DIF的9日移动平均值。

DEA = EMA(DIF,9)

三、柱形图或棒形图(histogram / bar graph):

接着,将DIF与DEM的差画成“柱形图”(MACD bar / OSC)。

OSC = DIF - DEM

基本用法

  1. MACD金叉:DIF由下向上突破 DEA,OSC>0为买入信号。
  2. MACD死叉:DIF由上向下突破 DEA,OSC<0为卖出信号。
  3. DEA 在盘整局面时失误率较高,但如果配合RSI 及KDJ指标可适当弥补缺点。

Pine语言代码

首先利用内置函数ta.macd计算出来三个指标值,macdLine(DIF), signalLine(DEA), histLine(OSC)并进行画图展示。接着利用histLine进行开平仓的信号判断,当上穿0线(crossover)进行买入,当下穿(crossunder)0线进行卖出。

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(macdLine,  title = 'macdLine', color=color.blue)
plot(signalLine, title = 'signalLine', color=color.orange)
plot(histLine, title = 'histLine', color=histLine > 0 ? color.red : color.green, style=plot.style_histogram)

if ta.crossover(histLine,0) 
    strategy.entry('long',strategy.long,comment = 'long')
if ta.crossunder(histLine,0) 
    strategy.entry('short',strategy.short,comment = 'short')

缺点

具有滞后性。当行情忽上忽下幅度太小或盘整时,按照信号进场后随即又要出场,买卖之间可能没有利润,也许还要赔点价差或手续费。在同时,一旦行情迅速大幅涨跌,MACD不会立即产生信号,此时,MACD无法发生作用。

相似指标:DMA

DMA指标是指平行线差指标,是依据快慢两条移动平均线的差值情况来分析价格趋势的一种技术分析指标。DMA只是以收盘价(CLOSE)作为唯一的数据源,进行平均算数。DMA和MACD的区别是DMA利用MA计算,而MACD利用EMA计算。

img

DMA指标的公式:

DIF:MA(CLOSE,N1)-MA(CLOSE,N2);

DIFMA:MA(DIF,M);

输出DIF:收盘价的N1日简单移动平均-收盘价的N2日简单移动平均;

输出均线DIF:DIF的M日简单移动平均;

应用

1、DIF线向上穿破DIFMA,即买入信号; 2、DIF线向下穿破DIFMA,即卖出信号。

SAR

概念

SAR指标又叫抛物线指标或停损转向操作点指标,其全称叫“Stop and Reverse,缩写SAR”,是一种简单易学、比较准确的中短期技术分析工具。

这种指标与移动平均线的原理颇为相似,属于价格与时间并重的分析工具。由于组成SAR的点以弧形的方式移动,故称“抛物转向”。

从SAR指标英文全称知道它有两层含义。一是“stop”,即停损、止损之意,这就要求投资者在买卖某个品种之前,先要设定一个止损价位,以减少投资风险。而这个止损价位也不是一直不变的,它是随着价格的波动止损位也要不断的随之调整。目标是既可以有效地控制住潜在的风险,又不会错失赚取更大收益的机会。 SAR指标的英文全称的第二层含义是“Reverse”,即反转、反向操作之意,这要求投资者在决定投资前先设定个止损位,当价格达到止损价位时,投资者不仅要对前期买入的品种进行平仓,而且在平仓的同时可以进行反向做空操作,以谋求收益的最大化。

img

计算方法

以计算日SAR为例,计算方法如下: 先选定时间,判断价格是在上涨还是在下跌: 若是看涨,则进场第一天的SAR必须是近期内的最低价,若是看跌则进场第一天的SAR必须是近期内的最高价; 第二天的SAR则为第一天的最高价(看涨时)或最低价(看跌时)与第一天的SAR的差距乘上调整系数,再加上第一天的SAR就可求得。 按逐步递推的方法,每日的SAR可日纳如下: SAR(N)= SAR(N-1)+ AF * [ EP(N-1)-SAR(N-1)] 其中SAR(N)为第N日的SAR值,AF是调整系数,EP为极点价; 第一个调整系数AF为0.02,若每隔一天的最高价比前一天的最高价还高,则AF递增0.02,若未创新高,则AF沿用前一天的数值,但调整系数最高不超过0.2; 若是买进期间,计算出某日的SAR比当日或前一日的最低价还高,则应以当日或者前一日的最低价为某日之SAR,卖出期间也对应服从类似原则。

基本用法

  1. 收盘价跌破SAR,多头停损,开始空头交易;
  2. 收盘价突破SAR,空头停损,开始多头交易。

代码

可以使用Pine语言内置函数或者自定义函数编写一下:

sar = ta.sar(0.02, 0.02, 0.2)
plot(sar, style=plot.style_cross, linewidth=3)


if ta.crossover(close,sar) 
    strategy.entry('long',strategy.long,comment = 'long')
if ta.crossunder(close,sar) 
    strategy.entry('short',strategy.short,comment = 'short')

缺点

同样,SAR也具有滞后性,不能及时处理突发的大盘变化。

在我们上述的指标之外,趋势指标还包括动量指标(MTM),TWR宝塔线指标,DDI 方向标准离差指数,大家有兴趣都可以研究一下。总体来说,这些指标都试图寻找某一时间段内的惯性趋势,在大盘突破这些确定性趋势的时候,做出进场的信号。因为这些指标都是以一定时间段反应后,才做出的决断,在一方面,都存在滞后性的问题;在另一方面,也对市场的突发情形不能做出及时的判断。因此,针对不同的品种需要设置不同的策略周期,比如沥青日内波动比较剧烈,策略周期可以设置小一点;

使用MACD策略,对于沥青以小时为策略周期的回测收益:

img

对于沥青以天为策略周期的回测收益:

img

而玻璃的日内波动比较小,策略周期可以设置大一点。

使用MACD策略,对于玻璃以小时为策略周期的回测收益:

img

对于玻璃以天为策略周期的回测收益:

img

当然,这些品种的特点并不是固定不变的,你需要及时跟踪市场趋势,做出及时的参数调整和变化。正如传言而言,一个好的量化工程师每天的代码量不超过三行,但是“行行千金”。努力吧,少年!我们下节课再见!


更多内容