[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 427

 

こんにちは。ファイルポインタについての質問です。MQL4.communityに あるMQL4 ブックの「Standard Functions」セクションに、ファイルからデータを読み込んで、シンボルウィンドウにグラフィックオブジェクトを表示するためのスクリプト「File Operations」の例が掲載されています。

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

以下、Book onMQL4 でこのスクリプトを解析すると、「指定されたチェック(ブロック5-6の最後の2行)が外されると、実行時に余分なオブジェクトが作成 される」という文言があります。そしてその後に初めてwhile ループの終了条件が発動し、制御がブロック8-9に渡される」。

正しく理解できていますか?ファイルポインタは、テキスト記号によって流入されるのではなく(例えば:text| where | is file pointer)、例えば、text wherek is "to" character, k-th is highlighted by file pointerのように、式を伴うポインタである。これが文字列の必要性を説明している(p.164参照)。

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

確かに。最後の反復処理で、LASTオブジェクトを作成した後

2007.05.11 18:30;JPY

の場合,ファイルポインタは最後のオブジェクトの位置にある,つまり

2007.05.11 18:30; 工業生産

(oは"o"文字、kはファイルインデックス).これは ファイル ポインタがファイルの終端ではなく、そのファイルの最後の文字にあるため です。そして、最初の2行が実行されると、ファイルポインタは空のスペースに移動し、もし行が無ければ

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

を実行すると、スクリプトは空の説明と0に 対応する時間座標を持つグラフィック(すなわちライン)を作成します。 これは、「指定されたチェック(ブロック5-6の最後の2行)が削除されると、実行時に余分なオブジェクトが作成 されます」というフレーズを意味します。"

質問:私の理解は正しいですか?

a) ファイルポインタの定義。

b)指定されたチェック(ブロック5-6の最後の2行)が削除さ れると、プログラム実行時に余分なオブジェクトが 生成される」という文言の意味。そして、その後に初めてwhile ループの終了条件が発動し、制御が8-9ブロックに渡されることになる」。

P.S. フォーラムを散らかさないために、事前にあなたの答えをありがとうございました。

 
皆さん!!1時間足のバーを開く関数を教えてください!!(前のローソクのオープンを判断する必要があります)if (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) なぜかm=1 n=1では動きませんが、お願いします!誰が気にするの・・・?
 
stater:
皆さん!!1時間足のバーを開く関数を教えてください!!(前のローソクのオープンを判断する必要があります)if (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) なぜかm=1 n=1では動きませんが、お願いします!誰が気にするの・・・?
https://docs.mql4.com/ru/series
 
ご意見ありがとうございます!しかし、1時間足のローソクが開いたかどうかを知るための関数がよくわかりません...。
 
stater:
ご意見ありがとうございます!しかし、1時間足のローソクが開いたかどうかを知るための関数がよくわかりません...。

アイタイム
 
アドバイザーがエラー0を出し続けているのですが、何が原因なのか、ここをどう調べればいいのか、教えてください。
 
お待たせしました。
 
Egori4:
EAがエラー0を出し続けています。アドバイス - 原因を確認する方法、この場所を見つける方法?

エラー0は、エラーがないことを示します。

プリント(アラート)をやめよう =)

 

一つの数式が何度も繰り返される場合、数式を短く書くにはどうしたらよいのでしょうか?

 
Elektronik:

一つの数式が何度も繰り返される場合、数式を短く書くにはどうしたらよいのでしょうか?


機能を使う