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

 

В документации есть 2 момента касательно индикаторов.

特殊な定数では、これらは

" indicator_buffers インジケータを計算するためのバッファの数、最大8個まで "

カスタムインジケーターで

" カスタムインジケータ計算に使用するバッファのメモリを確保します。バッファの数は 8 を超えてはならず、indicator_buffers プロパティで指定された値より小さくしてはならない。カスタムインジケーターがカウントのために追加のバッファを必要とする場合、この関数を使用してバッファの合計数を指定する必要があります。"

バッファの数が指定されている場合、これはすでにバッファ用のメモリを確保することを意味していると思います。もし、ここで何か別の意味があるなら訂正してください。

 

こんにちは。ファイルポインタについての質問です。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. フォーラムを散らかさないために、事前にあなたの答えをありがとうございました。

 

未経験なのですが、2つのティックの間に私のプログラムがサーバーにいくつかのコマンドを送信した場合、それらはすべて実行されるのですか、それとも最初のコマンドだけですか?このテーマに関する情報はどこにあるのでしょうか?

 
cubus:

未経験なのですが、2つのティックの間に私のプログラムがサーバーにいくつかのコマンドを送信した場合、それらはすべて実行されるのですか、それとも最初のコマンドだけですか?このテーマに関する情報はどこにあるのでしょうか?


読んでみてください。

https://book.mql4.com/ru/basics/common

 
r772ra:

読んでみてください。

https://book.mql4.com/ru/basics/common

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

こんにちは!MQL4のインジケーターについて質問なのですが、どうしてもわからないことがあります...。例えば、簡単なフラクタルのインジケーターがあります。

この形でコンパイルすると、チャートの左枠を拡張して履歴を読み込むと、グリッチが始まり、あるはずのないところにマークが表示されます(添付のスクリーンショットを参照)。コードの一部をコメントアウトすると

そうすれば、これらの不具合は解消されるのですが...。インジケータ配列の「空でない」要素のみを埋めて、ラベルがないところでインジケータ値をリセットしない場合、履歴を読み込む際にも同じ不具合が発生します...。

なぜ、このようなことが起こるのでしょうか。なぜ、履歴を読み込む際にインジケーター全体を再計算する必要があるのか、それが判明したのです。また、なぜ配列の「空」要素の値をNULLにしなければならないのでしょうか?

もし、バーのインデックスが左から右の順で、ヒストリーロード時にバーのインデックスが変わり、再計算せずにインジケータが正しく表示されるのであれば、この不具合は理解できるのですが.しかし、MT4ではバーは右から左へインデックスされるため、履歴を読み込む際、インデックスされたバーのインデックスは同じままです(インジケータの値も同じです)。


ヒストリーを読み込む際に、なぜインジケーター全体の再計算が必要なのですか?また、なぜ配列の「空」要素の値をゼロにする必要があるのでしょうか?そして、これをしないと、インジケーターの表示がおかしくなってしまう...。
 
hoz:
#property indicator_buffers は、表示するバッファの数を指定します。
IndicatorBuffers は、使用するバッファの総数を指定する。


#property indicator_buffers 2
.......... .................................
インジケーターバッファー 3

2本の線を描画します。3番目のバッファは表示されませんが、中間計算に使用されます。
 
1の値と既に再描画されているインジケータの値を2行で出力する方法を教えてください。いつも最後に再描画した値を出力してしまうので、解せません。
 
残念ながら、438ビルドをインストールしようとしたときのエラーについて、誰も返信していません。https://www.mql5.com/ru/forum/138609/page425
 

こんにちは。

トレーリングが利益確定後ではなく、すぐに発動するようにするには、コードにどのような変更を加えればよいか教えてください。

ファイル: