2015年5月22日金曜日

MT4プログラムの小ネタ CArrayDoubleのバグ

昨日はFX-ONの営業担当者様とお話しする機会があり、作成中のEAについてアドバイスを頂くことができました。貴重なお時間ありがとうございます。

頂いたアドバイスを元に最終調整中です。来週ぐらいに登録予定ですので、登録されましたら是非皆様お試しください。

さて、今日は久しぶりに小ネタです。本当に小ネタです(笑)
MQL4についてきているCArrayDoubleクラスですがMinimumとMaximumにバグがあります。
内部で使用しているArrayMinimumとArrayMaximumの引数ですが、下記の通りです。
int  ArrayMaximum(
const void&   array[],             // 対象配列
int           count=WHOLE_ARRAY,   // 確認エレメント数
int           start=0              // 開始インデックス
);


ところがCArrayDoubleではこのように使用されており引数の意味とあっていません。
//+------------------------------------------------------------------+
//| Find minimum of array                                            |
//+------------------------------------------------------------------+
int CArrayDouble::Minimum(const int start,const int count) const
{
//バグ!
return(ArrayMinimum(m_data, start, count));
}

正しくはこのようになります。

//+------------------------------------------------------------------+
//| Find minimum of array                                            |
//+------------------------------------------------------------------+
int CArrayDouble::Minimum(const int start,const int count) const
{
//バグ!
return(ArrayMinimum(m_data, count, start));
}
//+------------------------------------------------------------------+
//| Find maximum of array                                            |
//+------------------------------------------------------------------+
int CArrayDouble::Maximum(const int start,const int count) const
{
//バグ!
return(ArrayMaximum(m_data, count, start));
}


まぁわかっていて逆に渡すというのもありなのですが、やっぱり気持ち悪いので元コードを修正して使用しています。