
MT4のRSIをJavaで計算しようと思っています。
FXは初心者なので、分かりやすくご説明して頂けるとありがたいです。
私が調べたところ2つ程計算式があるようでした。
http://www.k3.dion.ne.jp/~forex/tc/rsi.htm
私が困っているRSIの計算に似たようなことが掲載されている下記のサイトもありました。
http://d.hatena.ne.jp/fai_fx/20090720/1248018736
上記のサイトのパターンBで計算しても同じような計算結果が得られません。(RSI2)
なお、プログラムのRSIはパターンAです。
それでは、下記にJavaプログラムを記載致します。
/**
* RSIを計算します。
* @param hajimene_data 始値データ
* @param owarine_data 終値データ
* @param takane_data 高値データ
* @param yasune_data 安値データ
* @param count 現在のカウント
* @param a 「a」のRSIを作成
* @return RSIの値
*/
public static double RSI(
double[] hajimene_data, double[] owarine_data, double[] takane_data, double[] yasune_data, int count, int a) {
//値上がり幅を格納
duble neagari = 0.0;
//値下がり幅を格納
double nesagari = 0.0;
for(int i = count;i >= count - a;i--){
//値上がり
if(hajimene_data[i] < owarine_data[i]){
//値上がり幅の更新
neagari += owarine_data[i] - hajimene_data[i];
//値下がり
}else{
//値上がり幅の更新
nesagari += hajimene_data[i] - owarine_data[i];
}
}
//RSIの値を計算
return neagari / (neagari + nesagari) * 100;
}
/**
* RSIの値上がり幅、値下がり幅を計算します。
* @param hajimene_data 始値データ
* @param owarine_data 終値データ
* @param takane_data 高値データ
* @param yasune_data 安値データ
* @param count 現在のカウント
* @param a 「a」のRSIを作成
* @return RSIの値上がり幅、値下がり幅
*/
public static double[] RSI_Syokisyori(
double[] hajimene_data, double[] owarine_data, double[] takane_data, double[] yasune_data, int count, int a) {
//値上がり幅、値下がり幅を格納
double[] rsi_base = new double[2];
for(int i = count;i >= count - a;i--){
//値上がり
if(hajimene_data[i] < owarine_data[i]){
//値上がり幅の更新
rsi_base[0] += owarine_data[i] - hajimene_data[i];
//値下がり
}else{
//値上がり幅の更新
rsi_base[1] += hajimene_data[i] - owarine_data[i];
}
}
//平均を算出
//rsi_base[0] /= a;
//rsi_base[1] /= a;
//RSIの値を計算
return rsi_base;
}
/**
* RSIを計算します。
* @param hajimene_data 始値データ
* @param owarine_data 終値データ
* @param takane_data 高値データ
* @param yasune_data 安値データ
* @param count 現在のカウント
* @param a 「a」のRSIを作成
* @return RSIの値
*/
public static double RSI2
double[] hajimene_data, double[] owarine_data, double[] takane_data, double[] yasune_data,
int count, double[] RSI_Base, boolean flg, int a) {
//1日目の値上がり幅の平均を算出
double syoki_neagari = RSI_Base[0];
//1日目の値下がり幅の平均を算出
double syoki_nesagari = RSI_Base[1];
//値上がり幅を格納
double neagari = 0.0;
//値下がり幅を格納
double nesagari = 0.0;
for(int i = count;i >= count - a;i--){
//値上がり
if(hajimene_data[i] < owarine_data[i]){
//値上がり幅の更新
neagari += owarine_data[i] - hajimene_data[i];
//値下がり
}else{
//値上がり幅の更新
nesagari += hajimene_data[i] - owarine_data[i];
}
}
//RSIの値を計算
return (syoki_neagari * (a-1) + neagari) / ((syoki_neagari * (a-1) + neagari) / a + (syoki_nesagari * (a-1) + nesagari) /a);
}
なお、下記がRSI_SyokisyoriとRSI2の呼び出し元です。
//RSIフラグ
boolean RSI_flg = false;
//RSIの計算
if(count >= RSI && RSI_flg == false){
//RSIの初期計算
RSI_Base = methods.Technical.RSI_Syokisyori(hajimene_data, owarine_data, takane_data, yasune_data, count, RSI);
RSI_flg = true;
}else if(count >= RSI && RSI_flg == true){
//RSIの計算
RSI_data[count] = methods.Technical.RSI3(hajimene_data, owarine_data, takane_data, yasune_data,
count, RSI_Base, RSI_flg, RSI)
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
FXで勝っている方 バイナリー...
-
5
FX(XM)の両建てとロスカットに...
-
6
fx 移動平均
-
7
FXで成功する方法
-
8
もしかしたら
-
9
FX 儲かり過ぎで怖いです。
-
10
飲食店など商売全般に「3掛け」...
-
11
FX 大体どのくらいの金額で取引...
-
12
西日本シティ銀行で小銭を引き...
-
13
15ドルは日本円で何円ですか?
-
14
1セントって円に換算すると?
-
15
ドルとUSドルの違い
-
16
もみじ銀行のATMでは小銭を引き...
-
17
500万ウォンは何円
-
18
2000万ルピーってどれくらいの...
-
19
10万ポンドは円にするといく...
-
20
いま円安ってことはドルをいっ...
おすすめ情報
公式facebook
公式twitter