初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 154

 
nidves まず、コードで正しいメッセージを作ってください、非常にわかりにくいです。次に、ニュースファイルの構造を見てほしいです、そうでないと、どのデータがどこで使われているのかがわかりません。
 

まず目を引くのは、EAを普通のスクリプトとして使っている点です。どう違うのか、マニュアルを読んでみてください。あなたのタスクに適しているのは、エキスパートアドバイザーではなく、スクリプトです

次に、なぜこのデザインを 使うのか。

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

そして、あなたの問題の根源。

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

さて、最後にあなたは非常に多くの単純なプログラムで台無しにした、あなたがこのプログラムに何をしたいかを記述し、うまくステップバイステップでスクリプトを書くために試してみましょう!。

 
Vitaly Gorbunov:

まず目を引くのは、EAを普通のスクリプトとして使っている点です。どう違うのか、マニュアルを読んでみてください。あなたのタスクに適しているのは、エキスパートアドバイザーではなく、スクリプトです

次に、なぜこのデザインを 使うのか。

そして、あなたの問題の根源。

そして最後に、簡単なプログラムで騒ぎすぎです。このプログラムに何を求めているかを記述して、一歩一歩スクリプトを書いてみましょう

Vitalyさん、ご返信ありがとうございます。

1)スクリプトの件ですが、了解しました。

2)さて、すべては単純で、私はforループを中断します。

3)Expert Advisorまたはスクリプトを作成して、特定の商品と時間枠の相場、特定のニュースを特定の日付と時間にダウンロードしたい のですが。

最終的にファイルに書き込んだ結果は、次のようになります。

シンボルマーク期間ニュース日付時間オープン閉じる
GBPUSD5カナダ消費者物価指数(CPI)(前月比)26.01.2018 16:30:000.000000000.000000000.000000000.00000000
GBPUSD5カナダ消費者物価指数(CPI)(前月比)21.12.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5カナダ消費者物価指数(CPI)(前月比)17.11.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5カナダ消費者物価指数(CPI)(前月比)20.10.2017 15:30:000.000000000.000000000.000000000.00000000

そして、異なる楽器+時間枠+ニュースや日付で そうです。

もうひとつ、ニュアンスがあります。データが60分足でアンロードされた場合、気配値は16:00と15:00の時間枠に対応するはずです。

ニュースの時間枠が14:45なら、相場はその時間に対応するはずです。

1分~14:45

5分~14:45

15分~14:45

30分~14:30

60分~14:00

ご理解いただけたでしょうか?ありがとうございました。

 

もう一度、このループを見てください。変数カウントはfor文 自体で変更されるだけなので、このループではifは余計なだけです。

ここで、データをどのように処理するかを定義しておこう。ニュースファイルからニュースのパラメータを読み出し、データを加工して、引用符のファイルに書き込む方が論理的だと思われます。その後、1つのレコードのために再び配列を実行する必要があるニュースの配列を収集すると、さらに、非常に頻繁に配列の処理では、インデックスに関連するエラーの多くを作ることができる、合理的に見えることはありません。

 
Vitaly Gorbunov:

もう一度、このループを見てください。変数カウントはfor文 自体で変更されるだけなので、このループではifは余計なだけです。

ここで、データをどのように処理するかを定義しておこう。ニュースファイルからニュースのパラメータを読み出し、データを加工して、引用符のファイルに書き込む方が論理的だと思われます。その後、再び1つのレコードの配列を実行することは合理的とは思えない、さらに、非常に頻繁に配列の処理では、インデックスに関連付けられている多くのエラーを作ることができるニュースの配列を収集します。

つまり、あらかじめ引用符でファイルを作成し、ニュースパラメータを追加しておくこと?

 
nidves:

あらかじめ見積もりファイルを作成し、ニュースパラメータを追加しておくということですか?

ニュースファイルから読み込んで処理し、すぐに引用ファイルに書き 込むということを、ニュースファイル全体が処理されるまで繰り返すのです!あなたは私を理解していないのでしょう。
 
Vitaly Gorbunov:
ニュースファイルから読み込んで処理し、すぐに引用ファイルに書き 込むということを、ニュースファイル全体が処理されるまで繰り返すのです!あなたは私を理解していないのでしょう。
それを、配列だけでやろうとしている。このコードはどのように書くのでしょうか?
 
nidves:
それを、配列だけでやろうとしている。そのようなコードはどのように書くのでしょうか?
なぜ不要なところに配列を使うのか?コードがシンプルであればあるほど、間違いは少なくなります。
 
Vitaly Gorbunov:
なぜ、必要のないところで配列を使わなければならないのか?コードがシンプルであればあるほど、エラーは少なくなります。

このコードを通して、配列の扱い方を学んでいます。結局のところ、この作業は原理的に複雑なものではないのです。

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

Open "引用符は、すでに上の配列に格納されています。したがって、私は配列から必要な日付の引用符を取り出すだけでよいのです。

 
nidves:

私はこのコードを通して、配列の扱い方を学んでいます。結局のところ、この作業は原理的に複雑なものではないのです。

Open "引用符は、すでに上の配列に格納されています。したがって、私はこの配列から必要な日付の引用符を引き出せばよいのです。

今から夏に行って、月曜日には行く予定です。もし興味があれば、私をフレンドに追加して、フォーラムを散らかすことなくチャットしましょう。