Awesome Oscillator(オーサムオシレーター)とは?
オーサムオシレーターというのはオシレーター系の指標の一つです。
RSIなどのように相場の過熱感をはかる類の指標です。
こちらのストキャスティクスの記事も参考になるかもしれません。
awesomeという英単語は、「すごい、素晴らしい」等の程度が著しいことを示す形容詞、
oscillatorは「振幅、揺れ動くもの」という意味の名詞で
直訳すると、「すげーオシレーター指標」という訳です。
オーサムオシレーターは短期と長期2本の移動平均線の乖離度合いを可視化した指標になります。
※移動平均線自体の詳しい解説は↓の記事で行っていますので、宜しければご覧ください。
MT5に組み込まれているオーサムオシレーターのソースコードでは5期間移動平均線と34期間移動平均線が採用されており、計算式は
という単純なものになります。
※なお、移動平均線の計算には高値と安値の中間値(median)が用いられています。
0ラインをクロスした時は、2本の移動平均線がクロスしたことを意味します。
0ラインより上で、移動平均線乖離が拡大していく局面ではヒストグラムは緑色になり、移動平均線乖離が縮小に転じるとヒストグラムは赤に変わります。
反対に、
0ラインより下で、移動平均線乖離が拡大していく局面ではヒストグラムは赤色になり、移動平均線乖離が縮小に転じるとヒストグラムは緑色に変わります。
2つの期間が異なる移動平均線における乖離度合いを使ったインジケータでいうと、MACDがあります。
違いとしては、オーサムオシレーターが計算に使う移動平均線の種類が、単純移動平均(SMA)なのに対し、MACDは指数平滑移動平均線(EMA)を使う所でしょうか?
MACDの、より視覚的に訴求力のあるバージョンとも言えます。
オーサムオシレーターを用いての相場分析は今回の記事の趣旨ではないので、ここでは触れません。
MQL5で、どういう工程を辿ってオーサムオシレーターの値を取得すればいいか、という事をこれから見ていきます。
Awesome Oscillator(オーサムオシレーター)の値取得のロードマップ
以下の手順でコードを記述していきます
- Awesome Oscillatorの値を格納する配列を宣言
- Awesome Oscillatorのハンドルを取得
- 配列を時系列にセット
- 正規化と、現在足のAwesome Oscillator値を取得し変数に格納
Awesome Oscillatorの値を格納する配列を宣言
MQL4とは違い、MQL5では Awesome Oscillatorの値の取得がiAO関数だけでは完結しません。
MQL4では戻り値として、指定されたインデックスのAwesome Oscillator数値を直接返していましたが、MQL5のiAO関数が返すのはあくまで のハンドル値です。
- Awesome Oscillator値を格納する配列の宣言
- iAO関数によるハンドル(の値を取得する鍵のようなもの)の取得
- ArraySetAsSeries関数による、配列の時系列セット
- CopyBuffer関数による、Awesome Oscillatorの値情報を配列にコピー
↑以上の工程をたどる必要があります。
よろしければこちらの記事も参考にしていただければと思います。↓
//Awesome Oscillatorの値を格納する変数配列を宣言
double myPriceArray[];
Awesome Oscillatorのハンドルを取得
オーサムオシレーターのハンドル値をiAO関数を使って取得し、変数AOHandleに格納します。
//Awesome Oscillatorのハンドルを取得
int AOHandle=iAO(_Symbol,_Period);
配列を時系列にセット
オーサムオシレーターの値を格納する配列を時系列にセットします。
この作業はArraySetAsSeries関数を使って行います。
//配列を時系列にセット
ArraySetAsSeries(myPriceArray,true);
ArraySetAsSeries関数についてはこちらをご覧ください↓
正規化と、現在足のAwesome Oscillator値を取得し変数に格納
配列を時系列にセットしたので、myPriceArray配列の[0]に、最新のオーサムオシレーターの値が格納されています。
正規化とは数値データを特定のルールに従った形に整えることを言います。
正規化にはNormalizeDouble関数を用います。
第一引数に入れたデータを、第2引数の小数点以下桁数で表現します。
NormalizeDouble関数については↓をご覧ください
//正規化と、現在足のAwesome Oscillator値を取得し変数に格納
double AOValue=NormalizeDouble(myPriceArray[0],6);
全体のプログラムコード
全体のプログラムコードは以下のようになります。
void OnTick()
{
//Awesome Oscillatorの値を格納する変数配列を宣言
double myPriceArray[];
//Awesome Oscillatorのハンドルを取得
int AOHandle=iAO(_Symbol,_Period);
//配列を時系列にセット
ArraySetAsSeries(myPriceArray,true);
//取得したAwesome Oscillatorの値情報を配列にコピー
CopyBuffer(AOHandle,0,0,3,myPriceArray);
//正規化と、現在足のAwesome Oscillator値を取得し変数に格納
double AOValue=NormalizeDouble(myPriceArray[0],6);
//コメント出力
Comment("Awesome Oscillator",AOValue);
}//void OnTick()
//+------------------------------------------------------------------+
サンプルコードの挙動は以下のようになります。
最後までお読みいただきありがとうございました<(_ _)>
コメント