atr指标 java算法_关于股指期货的SAR、CCI、BIAS、ATR指标的算法
股指期貨中的周期指標除了SMA、EMA、BOOL、MACD、KDJ等還有很多其他分析的指標,如SAR、CCI、BIAS、ATR有時候也會被交易者用來判斷股指期貨的走向。正好最近項目中有需要加上這幾種指標供用戶使用,在此記錄一下:
1 SAR
1.1 首先奉上sar的效果圖
sar.png
1.2 sar的計算公式如下:
在計算SAR之前,先要選定一段周期,比如n日或n周等,n天或周的參數一般為4日或4周。
計算Tn周期的SAR值為例,計算公式如下:
SAR(Tn)=SAR(Tn-1)+AF(Tn)*[EP(Tn-1)-SAR(Tn-1)]
① SAR(Tn)為第Tn周期的SAR值
② SAR(Tn-1)為第(Tn-1)周期的值
③ AF為加速因子(或叫加速系數)
④ EP為極點價(最高價或最低價)
在計算SAR值時,要注意以下幾項原則:
1 .初始值SAR(T0)的確定
若T1周期中SAR(T1)上漲趨勢,則SAR(T0)為T0周期的最低價
若T1周期下跌趨勢,則SAR(T0)為T0周期 的最高價;
2.極點價EP的確定
若Tn周期為上漲趨勢,EP(Tn-1)為Tn-1周期的最高價
若Tn周期為下跌趨勢,EP(Tn-1)為Tn-1周期的最 低價;
3.加速因子AF的確定
(a)加速因子初始值為0.02,即AF(T0)=0.02;
(b)若Tn-1,Tn周期都為上漲趨勢時,
當Tn周期的最高價>Tn-1周期的最高價,則AF(Tn)=AF(Tn-1)+0.02
當Tn周期的最高價<=Tn-1周期的最高價,則AF(Tn)=AF(Tn-1),但加速因子AF最高不超過0.2;
(c)若Tn-1,Tn周期都為下跌趨勢時,
當Tn周期的最低價
當Tn周期的最低價>=Tn-1周期的最低價,則AF(Tn)=AF(Tn-1);
(d)任何一次行情的轉變,加速因子AF都必須重新由0.02起算;
比如,Tn-1周期為上漲趨勢,Tn周期為下跌趨勢(或Tn-1下跌,Tn上漲),AF(Tn)需重新由0.02為基礎進 行計算,即AF(Tn)=AF(T0)=0.02;
(e)加速因子AF最高不超過0.2,當AF>0.2時,AF需重新由0.02起算;
4.SAR值的確定
(a)通過公式SAR(Tn)=SAR(Tn-1)+AF(Tn)*[EP(Tn-1)-SAR(Tn-1)],計算出Tn周期的值;
(b)若Tn周期為上漲趨勢,
當SAR(Tn)>Tn周期的最低價(或SAR(Tn)>Tn-1周期的最低價),則Tn周期最終 SAR值應為Tn-1、Tn周期的最低價中的最小值
當SAR(Tn)<=Tn周期的最低價且SAR(Tn)<=Tn-1周期的最低價,則Tn周期最終SAR值為SAR(Tn),即SAR=SAR(Tn);
(c)若Tn周期為下跌趨勢,
當SAR(Tn)
當SAR(Tn)>=Tn周期的最高價且SAR(Tn)>=Tn-1周期的最高價,則Tn周期最終SAR值為SAR(Tn),即 SAR=SAR(Tn);
2 ATR
2.1 首先奉上atr的效果圖
atr.png
2.2 ATR的計算公式如下:
atr1.png
t——當日;
n——時間長度;
Ci——第i日的[收盤價]
Hi——第i日的最高價;
Li——第i日的[最低價]
TRi = max(Hi,Ci-1)-min(Li,Ci-1)
注:一般取n=14,m=6。
其實就是一個求和取平均的過程。
2.3 順道奉上atr計算的代碼,省的一眼看下來都是百度能找到的公式解讀。
/**
* 獲取ATR指標
* ATR(cycle)(t) = 1/cycle{TR(1)+.........TR(cycle)}
* TR(i) = max(Hi,Ci-1)-min(Li,Ci-1)
* i = t-i+1
* t——當日;
* n——時間長度;
* Ci——第i日的收盤價;
* Hi——第i日的最高價;
* Li——第i日的最低價。
* 一般取cycle=14
*
* @param list
* @param cycle
* @return
*/
public static List> getATRLineDatas(List list, int cycle) {
if (list == null || list.size() == 0)
return null;
List> lineDatas = new ArrayList>();
List dataATRs = new ArrayList<>();
// 加入前面周期的缺省 確保list的值跟周期線一致 缺省范圍=(cycle-1)
for (int i = 1; i < cycle; i++) {
dataATRs.add(0, new KCandleObj());
}
// 從(cycle-1)開始,因為list的索引從0開始
for (int t = cycle - 1; t < list.size(); t++) {
// 每一個周期的TRI之和
double tRISigma = 0;
// 計算每一個周期的所有TR
for (int i = t - (cycle - 1); i <= t; i++) {
KCandleObj kCandleObj = list.get(i);
// 昨收
double lastClose = 0;
if (i == 0) {
// 第一根昨收為0
lastClose = 0;
} else {
// 使用前一根的收盤價
lastClose = list.get(i - 1).getClose();
}
double TRI = Math.max(kCandleObj.getHigh(), lastClose) - Math.min(kCandleObj.getLow(), lastClose);
tRISigma += TRI;
}
dataATRs.add(new KCandleObj(tRISigma / 14));
}
KLineObj kLineObj = new KLineObj();
kLineObj.setLineData(dataATRs);
kLineObj.setTitle("ATR(14)");
kLineObj.setValue(dataATRs.get(dataATRs.size() - 1).getNormValue());
kLineObj.setLineColor(Color.parseColor("#feb705"));
kLineObj.setScale(KNumberUtil.getPointPow(list.get(0).getClose()));
lineDatas.add(kLineObj);
return lineDatas;
}
3 BIAS
3.1 照例奉上效果圖
bias.png
3.2 照例奉上公式
計算公式如下:
乖離率=[(當日收盤價-N日平均價)/N日平均價]*100%
其中N取:6,12,24
BIAS算是比較簡單的一個指標。
3.3 破例奉上BIAS的代碼
* 計算bias
* 計算公式如下:
* 乖離率=[(當日收盤價-N日平均價)/N日平均價]*100%
*
* @param list
* @param cycle 6,12,24
* @return
*/
private static List getBIASLineCycleData(List list, int cycle) {
List dataBIASOneCycle = new ArrayList<>();
// 加入前面周期的缺省 確保list的值跟周期線一致 缺省范圍=(cycle-1)
for (int i = 1; i < cycle; i++) {
dataBIASOneCycle.add(0, new KCandleObj());
}
// 從(cycle-1)開始,因為list的索引從0開始
// 對周期內的收盤價求和
double sigmaClose = 0;
for (int t = cycle - 1; t < list.size(); t++) {
KCandleObj kCandleObj = list.get(t);
double close = kCandleObj.getClose();
// 為0說明沒有計算過
if (sigmaClose == 0) {
for (int i = t - (cycle - 1); i <= t; i++) {
sigmaClose += list.get(i).getClose();
}
} else {
// 對之后的求和 減去第1個+當前的1根 不用再做周期循環
sigmaClose = sigmaClose - list.get(t - cycle).getClose() + close;
}
// 收盤價均值
double closeAverage = sigmaClose / cycle;
double bIAS = (close - closeAverage) / closeAverage * 100;
dataBIASOneCycle.add(new KCandleObj(bIAS));
}
return dataBIASOneCycle;
}
4 CCI
4.1 熱乎乎的cci效果圖
cci.png
4.2 百度可見的cci公式
以日CCI計算為例,其計算方法有兩種。
第一種計算過程如下:
CCI(N日)=(TP-MA)÷MD÷0.015
其中,TP=(最高價+最低價+收盤價)÷3
MA=近N日收盤價的累計之和÷N
MD=近N日(MA-收盤價)的累計之和÷N
0.015為計算系數,N為計算周期
網上還有一種計算方式是用平均絕對偏差弄的,直接第一種實現了也就沒有搞第二種了。這概念只能認得幾個字,令人望而卻步。
稍微提示一下,計算MD的時候請用絕對值,不然算出的來的指標線會不對。
總結
以上是生活随笔為你收集整理的atr指标 java算法_关于股指期货的SAR、CCI、BIAS、ATR指标的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zookeeper隐藏通道和羊群效应
- 下一篇: 记录一次设置内网通过路由器映射一个内网i