【EA-MT4】外汇程序化交易之枢轴点

枢轴点(Pivot Points)是一个非常单纯的阻力支撑体系,是一种经典的日内交易策略。
大概10年前由某个期货高手所发明,至今已广泛应用在股票、期货、国债、指数等高成交量的金融商品上。
经典的Pivot Point是7点系统,由7个价格组成。
 

计算原理:

轴心: Pivot Point = (High + Close + Low) / 3
阻力一: R1 = 2 * Pivot - Low
支撑一: S1 = 2 * Pivot - High
阻力二: R2 = Pivot + (R1 - S1)
支撑二: S2 = Pivot - (R1 - S1)
阻力三: R3 = High + 2 * (Pivot - Low)
支撑三: S3 = Low - 2 * (High - Pivot)

其中High为最高价,Low为最低价,Close是成交价。

枢轴点解释:

1. pivot是所谓的轴心,就是阻力系统的中心,R、S是阻力和支撑;

2. pivot有吸引作用,在没有大多头和大空头进场的情况下,价格是在R1和S1之间围绕轴心运动,但运动可能是没有规律的。有人专门做这个范围内的交易,称之为Floor Trader;

3. 在强烈的多头或空头的推动下,价格会突破S1-R1区域,此时形成趋势。但还是在正常的价格运动范围之内,伴随着强烈的方向感,多数时间是靠近R1、R2或者S1、S2运动,中间区域停留的时间不长;

4. R3、S3极端价格,在没有特殊利空或利好消息的情况下一般不会达到。

如果整个交易日内价格都在R1-S1的区域内移动,说明主要交易者为短线交易者,包括个人投资人,小基金等;

如果到了R2、S2区域,说明大的炒家出现了,此时也许已经在行情中,也许是行情的开始;

如果到了R3、S3区域,说明是强烈的趋势,这时候的参与者就远远不是几个基金,几个投资人能做到了。
 

EA的实现:

//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
//ePivotPoint.mq4
//eShining
//http://www.eshining.xyz
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
#property copyright "eShining"
#property link      "http://www.eshining.xyz"
#property version   "1.00"
#property strict
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
enum eTimeFrame{M1=1,M5=5,M15=15,M30=30,H1=60,H4=240,D1=1440};
extern eTimeFrame pTimeFrame=1440;//时间周期
extern int pCount=1;//要计算的周期数
extern int pShift=0;//偏移量
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
int OnInit(){
   ChartInit();
   return(INIT_SUCCEEDED);
}
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
void OnDeinit(const int reason){


}
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
void OnTick(){
   double xR3,xR2,xR1,xP,xS1,xS2,xS3;
   GetPivotPoint(Symbol(),xR3,xR2,xR1,xP,xS1,xS2,xS3,pTimeFrame,pCount,pShift);
   CreateLine("PivotPoint",xP,Red);
   CreateLine("R3",xR3,White);
   CreateLine("R2",xR2,Yellow);
   CreateLine("R1",xR1,Aqua);
   CreateLine("S1",xS1,Aqua);
   CreateLine("S2",xS2,Yellow);
   CreateLine("S3",xS3,White);
}
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
void GetPivotPoint(string xSymbol,double &xR3,double &xR2,double &xR1,double &xP,double &xS1,double &xS2,double &xS3,int xTimeFrame=1440,int xCount=1,int xShift=0){/*枢轴点*/
   double xH=iHigh(xSymbol,xTimeFrame,iHighest(xSymbol,xTimeFrame,MODE_HIGH,xCount,xShift+1));
   double xL=iLow(xSymbol,xTimeFrame,iLowest(xSymbol,xTimeFrame,MODE_LOW,xCount,xShift+1));
   double xC=iClose(xSymbol,xTimeFrame,xShift+1);
   xP=(xH+xL+xC)/3;
   xR1=2*xP-xL;
   xS1=2*xP-xH;
   xR2=xP+(xR1-xS1);
   xS2=xP-(xR1-xS1);
   xR3=xH+2*(xP-xL);
   xS3=xL-2*(xH-xP);
}
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
void CreateLine(string xObjectName,double xPrice,color xColor=Red,string xFont="微软雅黑",int xFontSize=10){
   ObjectDelete(0,xObjectName);
   ObjectCreate(0,xObjectName,OBJ_HLINE,0,0,xPrice);
   ObjectSetInteger(0, xObjectName, OBJPROP_COLOR, xColor);
   string xLabelName=xObjectName+"_Text";
   ObjectDelete(0,xLabelName);
   ObjectCreate(0,xLabelName,OBJ_TEXT,0,iTime(Symbol(),Period(),10),xPrice);
   int xDigits=StrToInteger(DoubleToStr(MarketInfo(Symbol(),MODE_DIGITS),0));
   ObjectSetString(0,xLabelName,OBJPROP_TEXT,xObjectName+"("+DoubleToStr(xPrice,xDigits)+")");
   ObjectSetString(0,xLabelName,OBJPROP_FONT,xFont);
   ObjectSetInteger(0,xLabelName,OBJPROP_FONTSIZE,xFontSize);
   ObjectSetInteger(0,xLabelName,OBJPROP_COLOR,xColor);
}
//--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---+--+-----+--+------+---------+-+---+-+---
void ChartInit(){
   ObjectsDeleteAll(0,0,-1);
   ChartSetInteger(0,CHART_MODE,CHART_LINE);
   ChartSetInteger(0,CHART_SHOW_GRID,false);
}

Cinque Terre

指标的实现:

传送门:ePivotPoints指标下载(10月娱乐版)(每月不定时更新)

Cinque Terre

枢轴点的应用:

应用1:判断市场趋势

若枢轴点向上突破,则判断市场上涨; 若枢轴点向下突破,则判断市场下跌。 需注意的是,这是一个短期的趋势判断方法,只对当前周期交易有效,下一周期枢轴点需重新计算。

应用2:入场出场信号

若突破阻力位,则入场买多,设支撑位为出场点,突破支撑位则止损; 若跌破支撑位,则入场买空,设阻力位为出场点,突破阻力位则止损。

枢轴点的延伸:

Woodie's枢轴点

Woodie's枢轴点与传统枢轴点类似,但计算方式略有不同,更注重先前时段的收盘价。计算规则如下:

P = (H+L+2×C)/4
R1 = (2×P)−L
R2 = P+H−L
S1 = (2×P)−H
S2 = P−H+L


Camarilla枢轴点

Camarilla枢轴点的支撑和阻力共包含八个水平。计算规则如下:

R4 = (H−L)×1.1/2+C
R3 = (H−L)×1.1/4+C
R2 = (H−L)×1.1/6+C
R1 = (H−L)×1.1/12+C
S1 = C−(H−L)×1.1/12
S2 = C−(H−L)×1.1/6
S3 = C−(H−L)×1.1/4
S4 = C−(H−L)×1.1/2


DeMark's枢轴点

Tom DeMark's枢轴点是一种流行的预测未来趋势的方法。DeMark's枢轴点不能算严格意义上的枢轴点,而是预测时段高低位的方法。计算规则如下:

如果收盘价 < 开盘价,那么 X = H+2×L+C
如果收盘价 > 开盘价,那么 X = 2×H+L+C
如果收盘价 = 开盘价,那么 X = H+L+2×C
新高位= X/2-L
新低位= X/2-H

 

枢轴点在EA程序化交易中的应用:

策略编号:OABg
策略描述:一个基于枢轴点和马丁格尔的简单策略
策略概况:传送门

原文地址:外汇程序化交易之枢轴点

下期文章预告:外汇程序化交易之马丁格尔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章