- 締切済み
MT4のRSIの計算式についての質問です。
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) }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Saitar
- ベストアンサー率41% (192/464)
どっちも同じくらいあてにならないので、お好きな方を使えばよいと思います。 早くテクニカル分析のオカルトから抜け出して次のステップへ進めるように。そして、それまでに投資資金をなくさないことをお祈りします。アーメン。