【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
策略描述:一個基於樞軸點和馬丁格爾的簡單策略
策略概況:傳送門

原文地址:外匯程序化交易之樞軸點

下期文章預告:外匯程序化交易之馬丁格爾

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