2015年5月5日火曜日

MT4プログラムの小ネタ 関数で複数の値を戻す。

たとえば、ストキャス値を計算する関数の場合、メインとシグナルの二つの値が必要です。iCustomなどで他のインジケーターから取得するような関数の場合、バッファのインデックスを指定して値を戻すようになっていますが、呼び出しのたびに計算していると思うと速度面で不安が残ります。

Build600以降のMQL4では構造体が使用できます。
関数の戻り値として構造体を使用すると二つ以上の値を一度に戻すことができます。
これを利用することで同じ計算から求められる値をまとめて取得することが可能です。

// メイン・シグナル構造体
struct MainSignalValue
{
//メイン
double main;
//シグナル
double signal;
};
//配列に対するストキャス値を求める。
MainSignalValue StochasticOnArray(
const double   &array[],      // 元データ
int            total,            // 総数
int            kPeriod,          // Kライン期間
int            dPeriod,          // Dライン期間
int            slowing,          // スローイング
ENUM_MA_METHOD method,           // 移動平均手法
int            shift             // シフト
)
{
// 返却値
MainSignalValue value ;
value.main = 0 ;
value.signal = 0;
//今回は省略
return value;
}


二つ以上の値を戻す方法は、これ以外にも関数の引数を実体渡し(&をつけて宣言するやつです)する方法もありますが、引数に値がかえってくるよりも戻り値でかえってくる方が関数としての形が統一されて私はこちらをよく使います。

MQL4には指定配列のストキャスを求めるiStochasticOnArrayが見当たりませんでした。以前作成した「ストキャスティクスRSI オシレーターを作成してみた。」からストキャスを算出している部分を抽出して関数化しています。次回の記事では、こちらを紹介したいと思います。