2015年6月22日月曜日

MT4プログラムの小ネタ。指定期間の高値安値を取得する(未検証w)

うあー。慶事と不幸が重なって、先週末から超大忙しです。とりあえず、FXのことは横に置いておいて慌ただしい時間をすごしました。

ということで、小ネタです。
指定時間の高値安値をとる関数です。ビルドを通った段階です。さて、このプログラム正しく動作するのでしょうか?このようなのを確認するのにMT4にはスクリプトという単発実行の機能があります。明日、デバッグがてらにスクリプトで実行してみます。

// 4本値構造体
struct FourValue
{
// オープン
double open;
// クローズ
double close;
// 高値
double high;
// 安値
double low;
};
//------------------------------------------------------------------
//指定期間の4本値を返す。
FourValue GetFourValue(
string symbol           // 対象の通貨ペア
, datetime startTime      // 開始時間(開始時間は含む)
, datetime endTime        // 終了時間(終了時間は含まない)
, ENUM_TIMEFRAMES period  // 分解能
)
{
datetime now = iTime(symbol, period, 0 );
int i = 0 ;
int diff = (int)(now - endTime);
if( diff < 0 ) diff = 0;

int week = diff / (7 * ONEHOUR * 24) + 1;
int periodSecond = PeriodSeconds(period);

// 探査開始位置を、差分から計算する。
// 一週間超えている場合は、休みの分を除く。
i = diff / periodSecond - week * ONEHOUR * 24 * 2 / periodSecond;
if( i < 0 ) i = 0 ;

double close = 0 ;
double open = 0 ;
double low = iClose(symbol, period, 0 ) * 1000;
double high = 0;
while( !IsStopped() )
{
datetime current = iTime(symbol, period, i);
if( current <= 0 ) break ;

if( startTime <= current && current < endTime )
{
if( close == 0 ) close = iClose( symbol, period, i);
open = iOpen( symbol, period, i);
double currentHigh = iHigh(symbol, period, i);
double currentLow = iLow(symbol, period, i);

if( low > currentLow ) low = currentLow;
if( high < currentHigh ) high = currentHigh;
}
if( current < startTime ) break ;
i++;
}

FourValue result;

result.open = open;
result.close = close;
result.high = high;
result.low = low;

return result;

}



Money Box-100.jpg
逆コツコツドカン型EA Gewinn2 販売中
初期導入者様向け先着10名様に9800円でご提供します!
不明な点、動作が分からない点ありましたら、ご質問ください!


まぁ直近コツコツ負けてますよね。こーいう段階で売れるとは思っていない為、しばらくは放置。取り戻したときに宣伝しよっと(笑)
うーん、もう少し勝率の高いロジックを作って合わせて運用するようにしないと負け分ばかり目につくなー。(汗)