投資家プログラマの中上級者向けFXシステムトレード» Blog Archive » [Tips]EAが起動しているタイムフレームを取得するには・・・

[Tips]EAが起動しているタイムフレームを取得するには・・・

本業忙しくて更新滞っていてすみません。
システムトレードに関するサイト、来月半ばにはOPENできると思います。
楽しみにしていてください。

さてちょうど今日つまって編み出したTipsあるので備忘録かねて紹介したいと思います。

EAが起動しているチャートのタイムフレームを取得するには?
意外にもMQLにはEAが起動しているチャートのタイムフレームを取得する関数ってないんですね・・・
(あったら教えてくださいm(_ _)m)

※12/26 22時更新
Period()って関数で取れることが判明
 情報くれたガマウシさんに感謝。
 とれないなんてありえない、、、ってずっとリファレンス探してたのに・・・

現在指定のタイムフレームの各種値を取得するには timeframeに0(zero)を指定するって仕様になってるので
通常のシステムを組む上では特に問題ないのですが 特定足の時はエラーにする処理入れようと思ったら
意外や意外。そういう関数が見当たらなくて・・・
しかたなく以下のような方法で取得しています。

int getTimeframeNow(){

 int periods[8];
 periods[0] = PERIOD_M1;
 periods[1] = PERIOD_M15;
 periods[2] = PERIOD_M30;
 periods[3] = PERIOD_H1;
 periods[4] = PERIOD_H4;
 periods[5] = PERIOD_D1;
 periods[6] = PERIOD_W1;
 periods[7] = PERIOD_MN1;

 for(int i=0;i   if( iRSI(NULL,0,14,PRICE_CLOSE,0) == iRSI(NULL,periods[i],14,PRICE_CLOSE,0)
   && iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,0) == iMA(NULL,periods[i],13,8,MODE_SMMA,PRICE_MEDIAN,0)
  ){
   return(periods[i]);
  }
 }

}

※Tabを全角スペースに置換しているのでコピペの際はご注意を。

まぁようはiRSIとiMAの値を全タイムフレーム取得してみて 現在タイムフレームの結果と比較して一致した場合にそのタイムフレームを使っていると判断するって すごく原始的な方法です。
厳密には偶然複数のタイムフレームで同じ値になる可能性はなくはないんだけれど double型の値が偶然二つも一致する確立はほぼ皆無だと思うのでこうしています。

ホントにこんな方法しかないのかなぁ?ってのははなはだ疑問なのですが 一応これでうまくいきそうです。
お試しあれ。
ちなみに単独関数で取得できる、、、とかあったらぜひ教えてください。
リファレンス片っ端から読んでみて見つからなくてこんなひねたやり方したのですが・・・

ついでに配列の要素の割り当ても 1行でずばっと各方法は MQLには用意されてないのかなぁ?
何気に結構不便で・・・
こっちももし知ってる人いたら教えてください。

MQLってホントかゆいところに手が届かないし 微妙なバグもあるしかなり悩まされます。
いろいろと情報共有していきましょう。



↓↓↓↓記事が役に立った、、、と思ったらぜひクリックお願いします。↓↓↓↓

にほんブログ村 為替ブログ FX システムトレード派

↑↑↑↑ あなたのクリックが更新のモチベーションにつながります^^ ↑↑↑↑



2 People have left comments on this post



» ガマウシ said: { 12 月 26, 2008 - 19:12:11 }

はじめましてガマウシと申します。
Period( ) で取得できると思います。

サンプル
Print(”Period is “, Period());

» たか@フリーマン said: { 12 月 26, 2008 - 22:12:52 }

>ガマウシさん
情報ありがとうございます。
おっ、確かにとれますね。感謝。

リファレンス片っ端から探したつもりだったのに・・・
感謝。
あらためて見てみるとWindowの項目に分類されてたorz
こんなところかよ。。。
まぁWindowのタイムフレームってことでわからなくもないけど 完全に思考の外でした。。。

ありがとうございました。


コメント