初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 784

 
Aleksey Vyazmikin:

関数を作りたいのですが、よろしくお願いします。

私は現在のTFと推定TFを持っています、関数は、測定がバーであった場合、任意の組み合わせで2つのTFの差を返す必要があります

計算用TF 15 15 15 60 60 60 240 240 240
現在のTF 15 5 1 15 5 1 60 15 5
Nbarの差 1 3 15 4 12 60 4 16 48

どうすれば正しく実装できるのか?


私はこのようにしました。

int TFk()
{
   int K=0;
   K=TF_transfer(TF)/TF_transfer(Period());
//   Print(TF_transfer(TF),"   ",TF_transfer(Period()));
//Print (K);
   if   (K<1)return(1);
   else      return(K);
}


int TF_transfer(ENUM_TIMEFRAMES tf)
  {
   if (tf==PERIOD_CURRENT) return(0);
   if (tf==PERIOD_M1) return(1);
   if (tf==PERIOD_M5) return(5);
   if (tf==PERIOD_M15) return(15);
   if (tf==PERIOD_M30) return(30);
   if (tf==PERIOD_H1) return(60);
   if (tf==PERIOD_H4) return(240);
   if (tf==PERIOD_D1) return(1440);
   if (tf==PERIOD_W1) return(10080);
   if (tf==PERIOD_MN1) return(43200);  
   if (tf==PERIOD_M2) return(2);
   if (tf==PERIOD_M3) return(3);
   if (tf==PERIOD_M4) return(4);
   if (tf==PERIOD_M6) return(6);
   if (tf==PERIOD_M10) return(10);
   if (tf==PERIOD_M12) return(12);
   if (tf==PERIOD_H2) return(120);
   if (tf==PERIOD_H3) return(180);  
   if (tf==PERIOD_M6) return(360);
   if (tf==PERIOD_H8) return(480);
   if (tf==PERIOD_H12) return(720);
   return(1);
  }

問題は、私はインジケータにこの幸福を必要とするが、それは自分自身を正しく、このコードに初期化することを望んでいないことです。

int OnInit()
  {
   Print ("K=",TFk()," Период=",Period());

return(INIT_SUCCEEDED); }

このように反応します。

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

一番混乱するのは、OnCalculateのボディにすでにあるテストをプリントしてしまうことです!

if(BarsCalculated(handle)<0) {Print ("test");return(0);}

1回目はタイムフレームが正しく定義されていたのに、2回目は定義されていない...。

何が不思議なんだろう...。

分かってはいても、インジケーターの呼び出しから...。どうどうめぐり
 
Aleksey Vyazmikin:

こんな感じでやりました

問題は、私はインジケータにこの幸福が必要ですが、それは奇妙で、このコードに応答して、正しく初期化することを望んでいないことです。

このように反応します。

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

一番混乱するのは、OnCalculateのボディにすでにあるテストをプリントしてしまうことです!

1回目はタイムフレームが正しく定義されていたのに、2回目は定義されていない...。

この不思議が何なのかわからない。

とはいえ、インジケータからインジケータを呼び出して いるのですが...。どうどうめぐり

なぜ、そんな面倒なことをしなければならないのか?

その方が楽じゃないですか?

K = PeriodSeconds(TF)/PeriodSeconds(Period());
 
Alexey Viktorov:

なんだこの紆余曲折は?

そうすれば、もっと楽になるのではないでしょうか?


初心者向けのスレッドなんですね、だからこの可能性を知らなかったんです、ご指摘ありがとうございます。

 

今、2つのTFで最も信頼できるiBarShiftの 機能を教えてください。

私は、例えば、分足のバーで、上位TF(例えばM15)から指標値を見つけるというタスクを持っています。タイムフレームは任意であるため、解答が複雑になる。

TFは1時間、構造までやったが、M15だとすると、ここで混乱する...。

 
Aleksey Vyazmikin:

今、2つのTFで最も信頼できるiBarShiftの関数を教えてください。

私は、例えば、分足のバーで、上位TF(例えばM15)から指標値を見つけるというタスクを持っています。タイムフレームは任意であるため、解答が複雑になる。

TFは1時間、構造までやったが、M15だとここで混乱する...。

このスクリプトを回す:最寄りのバーを検索する

 
Vladimir Karputov:

このスクリプトを回す:最寄りのバーを検索する


ありがとうございます。

 
Aleksey Vyazmikin:

スレッドは初心者向けなんですね、だからこの機能を知らなかったんです、教えてくれてありがとうございます。

アレクセイ、mql4はずいぶん前に持っている。


アレクセイ・ヴャジミキン

今、2つのTFで最も信頼できるiBarShiftの機能を教えてください。

私は、例えば、分足のバーで、上位TF(例えばM15)からインジケータの値を見つけるというタスクがあります。タイムフレームは任意であるため、解答が複雑になる。

TFは1時間、ストラクチャーを通しましたが、M15だとここで迷うんですよね...。

この場合、mql4の時のようなバーの番号付けを忘れてみてください。mql5では、バータイムですべてがほぼ解決します。困ったときは、Bars()関数を 使えばいいのです。

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
アレクセイ、mql4はもうずいぶん前から持っているんですよ。

どうやらこれで、私もmql4をよく知らないということがわかったようです。

アレクセイ・ヴィクトロフ

また、この場合、mql4でそうであったように、バーナンバリングのことは忘れてみてください。mql5では、バータイムですべてがほぼ解決します。ピンチのときは、Bars()関数を使ってみて ください。

四捨五入は大丈夫ですか?

m1の時刻が14:44で、14:30(M15の最初の小節)が必要だとします。

 
Aleksey Vyazmikin:

どうやらこれで、私もmql4をよく知らないということがわかったようです...。

四捨五入は大丈夫ですか?

m1の時刻が14時44分で、14時30分(m15の最初のバー)の時刻を取得する必要があるとします。

これは、別のシリーズのものです。14:30のM15のバー期間から、14:44に何を取得する必要があるのか?関数Copy****にPERIOD_M15と 時間14:44を入れて、何が得られるか見てみましょう。そして、その結果が期待したものでなかったとき、また違った問いが出てきます。

 
Alexey Viktorov:

別のシリーズのものです。14:30のM15のバー期間から、14:44に何を取得する必要があるのか?関数Copy****にPERIOD_M15と 時間14:44を入れて、何が得られるか見てみましょう。そして、その結果が期待したものでなかったとき、また違った問いが出てきます。


はい、その方向でやっていました。すべてにおいて、私は助けられました。こちらこそ、ありがとうございました。

理由: