FX-ONの社長から手書きの手紙を頂戴いたしました。
うれしいものですね♪
関数を作ります。
MT4にはiRSIやiMA,iBands,iMACDなどなど本当に多くのインディケーターが用意されています。
とくにEMAの計算を作らなくていいことは非常に助かるのですが、設定項目の多さに戸惑うことがあります。
RSIはシンプルなオシレーターの中では精度が高いので気に入っています。
まずはこのRSI算出のiRSIを見ていきたいと思います。
iRSI(通貨ペア , 時間軸 , 期間 , 適応価格 , シフト)
通貨ペア
USDJPYやEURUSD等です。
チャートに合わせるときにはSymbol()を使うことになっていますが、
Symbol()を呼び出すのに数ミリ秒かかります。
非公式ですがNULLで代用できます。さらに""(ダブルコーテーション2個)でもOKです。
この非公式なやり方のほうが早くなります。
時間軸
チャートに合わせるときは PERIOD_CURRENT もしくは0
一分足は PERIOD_M1 もしくは1
日足は PERIOD_D1 もしくは1440
設定項目に入れるときは extern ENUM_TIMEFRAMES 定数;
期間
RSIの期間です。
14か20の使用頻度が多いと思いますが、時間軸によってまちまちです。
適応価格
終値を使うことが多いのですが、下は安値 上は高値などいろいろあるようです
終値 PRICE_CLOSE もしくは 0
中央値 PRICE_MEDIAN もしくは 4
設定項目に入れるときはextern ENUM_APPLIED_PRICE 定数;
シフト
取得したいバーの位置
0は現在、1は一本前・・・
私の場合通貨ペア:""、時間軸:0、期間:14、適応価格:0、シフト:1がほとんどです。
毎回同じ項目を入れるのは面倒なので
double RSI(){return(iRSI("",0,14,0,1));}
このような関数を使うことが多くあります。
毎回打たなくてもRSI()で呼び出せるからです。
見にくいのでインデントを付けてみます。
double RSI()
{
return( iRSI("",0,14,0,1) );
}
iRSIでもとめた値をreturnに入れて返すだけのシンプルな奴です。
RSI=iRSI("",0,14,0,1);
これじゃダメなのかと声が聞こえてきそうです。
単純にRSIが70を超えた処理、30を下回った処理を行う場合このほうが早いですね。
しかし関数の場合は応用がききます。
RSIの期間を14と20と両方確認したい場合
double RSI(int Period)
{
return( iRSI("",0,Period,0,1) );
}
こうすることで
RSI(14)は期間14のRSIの値、RSI(20)は期間20のRSIの値になります。
さらに、時間軸も変更したいときには
double RSI(int TimeFrame,int Period)
{
return( iRSI("",TimeFrame,Period,0,1) );
}
こうすることでRSI(1,20)は一分足の期間20のRSI
RSI(5,14)は五分足の期間14のRSIなどという使い方もできます。
伝統的な書き方はこちら
double Fast_RSI14 = iRSI(Symbol(),PERIOD_M1,14,PRICE_CLOSE,1);
double Fast_RSI20 = iRSI(Symbol(),PERIOD_M1,20,PRICE_CLOSE,1);
double Slow_RSI14 = iRSI(Symbol(),PERIOD_M5,14,PRICE_CLOSE,1);
double Slow_RSI20 = iRSI(Symbol(),PERIOD_M5,20,PRICE_CLOSE,1);
わたし的にはこうですね
double RSI(int TimeFrame,int Period){return(iRSI("",TimeFrame,Period,0,1));}
0 件のコメント:
コメントを投稿