MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 426

 
Boss11:

フォーラムユーザーの皆様、こんにちは。

以下の作業について、ご協力をお願いします。

mt4でmqlを使って、一昨日の14.30時点の1dタイムフレームのMA5などのインジケーターデータを取得したいのですが、可能でしょうか?

つまり、一昨日の14時30分にiMAでスクリプトを実行すれば何の疑問も生じないが、今日はどうすればいいのか。

せめて、どこを掘ればいいのか教えてほしい

それはとてもシンプルなことです。iMAを計算するためには7つのパラメータを設定する必要があります。最初のパラメータであるシンボルの 名前は明白である。2番目の時間枠として、M1 を設定します。第三のパラメータ - 期間 - あなたが必要とするように何度も設定し、どのように多くの日は1分以上です。第4パラメータ - shift = 0.次の2つのパラメータ、つまり平均化の方法と価格の種類はご存知の通りです。最後にバー・ナンバーがありますが、必要な時間がわかっている場合はバー・ナンバーを計算してください。以上です。M5とM15の時間枠で計算してみて、ダブルチェックする。M30用でもいいかもしれませんね。

 
STARIJ:

それはとてもシンプルなことです。iMAを算出するためには、7つのパラメータが必要です。最初のパラメータであるシンボルの 名前は明白である。第2パラメータであるタイムフレームには、M1 を設定します。第三のパラメータ - 期間 - あなたが必要とするように何度も設定し、どのように多くの日は1分以上です。第4パラメータ - shift = 0.次の2つのパラメータ、つまり平均化の方法と価格の種類はご存知の通りです。最後にバー・ナンバーがありますが、必要な時間がわかっている場合はバー・ナンバーを計算してください。以上です。M5とM15の時間枠で計算してみて、ダブルチェックする。M30用でもいいかもしれませんね。

残念ながら簡単ではありません。MA5、時間枠1440(1日)、バー番号2(一昨日)を選択すると、最後のローソクの開閉のMA5が得られますが、14時30分の瞬間は得られません。そして、そのことを明記する必要があるのです。もう一度言います。テクニカル指標はいくつかのローソク足から計算され、それらは00.00(私たちが一日について話している場合)に開き、23.59で閉じますが、最後のローソク足(それが0バーである場合)は閉じておらず、その計算には0バーの最後の価格を取ります。MAがゼロバーにあれば簡単ですが、ゼロバーでなく前日の途中であれば、どうすればいいのでしょうか。TF1440で前日の途中のМАはどのように計算すればよいのでしょうか。

 
Artyom Trishkin:

ありがとうございました。さっそくコードを書いてみます :)結果はまたお知らせします。

 
Boss11:

残念ながら簡単ではありません。MA5、時間枠1440(1日)、バー番号2(一昨日)を選択すると、最後のローソク足の始点または終点のMA5が得られるが、14時30分の時点では得られない。そして、そのことを明記する必要があるのです。もう一度言います。テクニカル指標はいくつかのローソク足から計算され、それらは00.00(私たちが一日について話している場合)に開き、23.59で閉じますが、最後のローソク足(それが0バーである場合)は閉じておらず、その計算には0バーの最後の価格を取ります。MAがゼロバーにあれば簡単ですが、ゼロバーでなく前日の途中であれば、どうすればいいのでしょうか。TF1440で前日の途中のМАを計算するにはどうしたらいいですか?


非常にシンプルです

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

このように

 

スクリプトによる信号の送信をどのように整理するか、何かアイデアはありますか?

 

知識のある人の助けが必要

EAのソースコードを持っているのですが、2014年にコンパイルされ、すべて順調でした。

新しいアカウントを書き、その上でEAをコンパイルすることにしたのですが、コンパイルしようとしません

以下のようなエラーが23個出ました( } )

2014年から変わったこと、やるべきことは?

 
Boss11:

残念ながら簡単ではありません。MA5、時間枠1440(1日)、バー番号2(一昨日)を選択すると、最後のローソクの開閉のMA5が得られますが、14時30分の瞬間は得られません。そして、そのことを明記する必要があるのです。もう一度言います。テクニカル指標はいくつかのローソク足から計算され、それらは00.00(私たちが一日について話している場合)に開き、23.59で閉じますが、最後のローソク足(それが0バーである場合)は閉じておらず、その計算には0バーの最後の価格を取ります。MAがゼロバーにあれば簡単ですが、ゼロバーでなく前日の途中であれば、どうすればいいのでしょうか。TF1440で前日途中のMAを計算するにはどうしたらよいですか?

それはとてもシンプルなことです。iMAを算出するためには、7つのパラメータが必要です。最初のパラメータであるシンボルの 名前は明白である。第2パラメータであるタイムフレームとして、M1を設定 します。第三のパラメータ - 期間 - あなたが必要とするように何度も設定し、どのように多くの日は1分以上です。第4パラメータ - shift = 0.次の2つのパラメータ、つまり平均化の方法と価格の種類はご存知の通りです。最後にバー・ナンバーがありますが、必要な時間がわかっている場合はバー・ナンバーを計算してください。以上です。M5とM15の時間枠で計算してみて、ダブルチェックする。M30用でもいいかもしれませんね。
 

こんにちは。最後に相談にのってくれたSTARIJとArtyom Trishkinに 感謝します。しかし、私はまだ初心者なので、他の疑問も出てきます。例えば、次のようなものです。私は以下の関数を使って、1つのバーで1つだけポジションを開くようにしています。

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

なぜ、関数にアクセスするたびに静的変数を「時間の始まりに」送る必要があるのだろう?結局、最初の呼び出しで勝手にゼロ値を受け入れ、ゼロにリセットされるのではなく、次の呼び出しまで直前のゼロバーの値を記憶させるのです。もしかしたら、このシンプルな機能をもっと簡略化できるかもしれません。しかし、私自身は、失敗するのが怖いのです。この関数についてもう一つ質問です:式New_Time=Time[0]; は、新しいバーが開くミリ秒をキャッチしない場合があります。 その場合はどうなるのでしょうか? ありがとうございます。

 
novichok2018:

こんにちは。STARIJ さん、前回の相談もありがとうございました。しかし、私はまだ初心者なので、他の疑問も出てきます。例えば、次のようなものです。私は以下の関数を使って、1つのバーで1つだけポジションを開くようにしています。

なぜ、関数にアクセスするたびに静的変数を「時間の始まりに」送る必要があるのだろう?結局、最初の呼び出しで勝手にゼロ値を受け入れ、ゼロにリセットされるのではなく、次の呼び出しまで直前のゼロバーの値を記憶させるのです。もしかしたら、このシンプルな機能をもっと簡略化できるかもしれません。しかし、私自身は、失敗するのが怖いのです。この関数についてもう一つ質問です:式New_Time=Time[0]; は、新しいバーが開くミリ秒をキャッチしない場合があります。 その場合はどうなるのでしょうか? ありがとうございます。

そして、スタティック変数の初期化回数を読み取ることができます。そして、質問自体がその不条理さのために消えてしまうでしょう ;)
 
novichok2018:

こんにちは。最後に相談にのってくれたSTARIJとArtyom Trishkinに 感謝します。しかし、私はまだ初心者なので、他の疑問も出てきます。例えば、次のようなものです。私は以下の関数を使って、1つのバーで1つだけポジションを開くようにしています。

なぜ、関数にアクセスするたびに静的変数を「時間の始まりに」送る必要があるのだろう?結局、最初の呼び出しで勝手にゼロ値を受け入れ、ゼロにリセットされるのではなく、次の呼び出しまで直前のゼロバーの値を記憶させるのです。もしかしたら、このシンプルな機能をもっと簡略化できるかもしれません。しかし、私自身は、失敗するのが怖いのです。そして、この関数に関してもう一つ質問があります。New_Time=Time[0]; という式は、新しいバーが開くミリ秒をキャッチできない可能性はありませんか? その場合はどうなるのでしょうか? ありがとうございました。


2つ目の質問について。

最初のティックで釣れないと、2回目のティックで釣れる。