[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 264

 
Dmido >> :

私たち初心者は1週間が期限のようですが、その後、プロに会いに行きます))))


ここ数回の書き込みから結論づけると...。

は、文脈を述べよ。

 

文脈?単純に...

記事 教科書から普通のプログラム(https://book.mql4.com/ru/build/index) を作る。

そこでは、<Inform.mqh>というファイルがプログラムに含まれています。

""""""

適切な設定のカスタムインジケータを使用して、別の出力サブウィンドウが作成されます。このインジケータは、サブウィンドウを作成することだけが目的であり、したがって、インジケータ内で計算を行うことはなく、また、インジケータラインを作成する目的もない。Inform.mq4という インジケーターのコードは、以下のようになります。

//--------------------------------------------------------------------
// Inform.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отдельное окно индикатора
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
}
//--------------------------------------------------------------------

一般に、プログラマーは必要なコードをインジケーターに追加することで、インジケーターに追加のプロパティを持たせることができます。例えば、インジケーターサブウィンドウの一部に、インジケーターラインを表示させることができます。この例では、グラフィカルなオブジェクトを表示するウィンドウのインジケーターの簡単なコードを示しています。

""""

以下は、Informファイルのコードです。チャート上でのシグナルの出し方がよくわからない。プログラム上では動作し、チャート上でコマンドを出すようですが、何も出ません...。Informのインジケータを添付して、何か書き込む必要があるのですが?それとも別の方法?


どうしたらいいか教えてください(((・・;)

 
Dmido >> :

どうしたらいいか教えてください((.


まず、少し理論的な話をします。MQLプログラムとは...のプログラムを使用しています。つまり、指示されていない操作は行えないのです。プログラムの実行」ヘルプには、Expert Advisor/Indicatorに新しいティックが来ると、start()関数が実行されることが書かれています。Inform()関数がstart()関数から呼び出されていない場合は、実行されない。Inform()関数は、次のメッセージを表示する必要があるプログラム内の任意の場所から呼び出すことができます。つまり、メッセージを表示する必要がある関数 start() では、次のように記述します。

Inform(Mess_Number, Number, Value);
 
もちろん、変数Mess_Number, Number, Valueはあらかじめ宣言し、何らかの値を代 入しておく必要があります。
 

説明ありがとうございます、もちろんですが、プログラムから頻繁に呼び出され、本体にはありませんが、他のicludeではいたるところにあり、メッセージを送ることで呼び出されますが、それらは出力されません(


Close_All.mqhの一例です。


if (Tip==1) Price_Cls=Ask; // 売り注文の場合
Inform(12,Ticket); // 閉じようとしたことについてのメッセージ

 
start()のコードを書いて見てください。
 
int start()                            // Спец. функция start
  {
        
   Terminal();                         // Функция учёта ордеров 
   Events();                           // Информация о событиях
   Trade(Criterion());                 // Торговая функция
   Inform(0);                          // Для перекрашивания объектов
   return;                             // Выход из start()
  }

基本的にはチュートリアルと同じです。すべての呼び出しは、インクルードファイルから行われます。

以下はその一例です。

//--------------------------------------------------------------------
// Events.mqh
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
// Функция слежения за событиями.
// Глобальные переменные:
// Level_new            Новое значение минимальной дистанции
// Level_old            Предыдущее значение минимальной дистанции
// Mas_Ord_New[31][9]   Массив ордеров последний известный
// Mas_Ord_Old[31][9]   Массив ордеров предыдущий (старый)
//--------------------------------------------------------------- 2 --
int Events()                              // Пользовательская функция
  {
   bool Conc_Nom_Ord;                     // Совпадение ордеров в ..
   //.. старом и новом массивах
//--------------------------------------------------------------- 3 --
   Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );// Последн.известное
   if ( Level_old!= Level_new)              // Новое не равно старому..
     {                                    // значит изменились условия
      Level_old= Level_new;                // Новое "старое значение"
      Inform(10, Level_new);               // Сообщение: новая дистанц.
     }
//--------------------------------------------------------------- 4 --
   // Поиск пропавших, поменявших тип, частично закрытых и переоткрытых
   for(int old=1; old<= Mas_Ord_Old[0][0]; old++)// По массиву старых
     {                                    // Исходим из того, что..
      Conc_Nom_Ord=false;                 // ..ордера не совпадают
      //--------------------------------------------------------- 5 --
      for(int new=1;new<= Mas_Ord_New[0][0];new++)//Цикл по массиву ..
        {                                 //..новых ордеров
         //------------------------------------------------------ 6 --
         if ( Mas_Ord_Old[ old][4]== Mas_Ord_New[new][4])// Совпал номер 
           {                              // Тип ордера стал ..
            if ( Mas_Ord_New[new][6]!= Mas_Ord_Old[ old][6])//.. другим
               Inform(7, Mas_Ord_New[new][4]);// Сообщение: преобраз.:)
            Conc_Nom_Ord=true;            // Ордер найден, ..
            break;                        // ..значит выходим из ..
           }                              // .. внутреннего цикла
         //------------------------------------------------------ 7 --
                                          // Не совпал номер ордера
         if ( Mas_Ord_Old[ old][7]>0 &&     // MagicNumber есть, совпал
            Mas_Ord_Old[ old][7]== Mas_Ord_New[new][7])//.. со старым
           {               //значит он переоткрыт или частично закрыт
                                             // Если лоты совпадают,.. 
            if ( Mas_Ord_Old[ old][5]== Mas_Ord_New[new][5])
               Inform(8, Mas_Ord_Old[ old][4]);// ..то переоткрытие
            else                             // А иначе это было.. 
               Inform(9, Mas_Ord_Old[ old][4]);// ..частичное закрытие
            Conc_Nom_Ord=true;               // Ордер найден, ..
            break;                           // ..значит выходим из ..
           }                                 // .. внутреннего цикла
        }
      //--------------------------------------------------------- 8 --
      if ( Conc_Nom_Ord==false)               // Если мы сюда дошли,..
        {                                    // ..то ордера нет:(
         if ( Mas_Ord_Old[ old][6]==0)
            Inform(1, Mas_Ord_Old[ old][4]);  // Ордер Buy закрыт
         if ( Mas_Ord_Old[ old][6]==1)
            Inform(2, Mas_Ord_Old[ old][4]);  // Ордер Sell закрыт
         if ( Mas_Ord_Old[ old][6]> 1)
            Inform(3, Mas_Ord_Old[ old][4]);  // Отложен. ордер удалён
        }
     }
//--------------------------------------------------------------- 9 --
   // Поиск новых ордеров 
   for(new=1; new<= Mas_Ord_New[0][0]; new++)// По массиву новых орд.
     {
      if ( Mas_Ord_New[new][8]>0)            //Это не новый,а переоткр
         continue;                          //..или частично закрытый
      Conc_Nom_Ord=false;                   // Пока совпадения нет
      for( old=1; old<= Mas_Ord_Old[0][0]; old++)// Поищем этот ордерок 
        {                                   // ..в массиве старых
         if ( Mas_Ord_New[new][4]== Mas_Ord_Old[ old][4])//Совпал номер..
           {                                          //.. ордера
            Conc_Nom_Ord=true;              // Ордер найден, ..
            break;                          // ..значит выходим из ..
           }                                // .. внутреннего цикла
        }
      if ( Conc_Nom_Ord==false)              // Если совпадения нет,..
        {                                   // ..то ордер новый :)
         if ( Mas_Ord_New[new][6]==0)
            Inform(4, Mas_Ord_New[new][4]); // Ордер Buy открыт
         if ( Mas_Ord_New[new][6]==1)
            Inform(5, Mas_Ord_New[new][4]); // Ордер Sell открыт
         if ( Mas_Ord_New[new][6]> 1)
            Inform(6, Mas_Ord_New[new][4]); // Установлен отлож.ордер
        }
     }
//-------------------------------------------------------------- 10 --
   return;
  }
//-------------------------------------------------------------- 11 --
 
Dmido >> :

基本的にはチュートリアルと同じです。すべての呼び出しは、インクルードファイルから行われます。

以下はその一例です。

Informはクソほど呼ばれてるけど、どう表示されてるのかわかりにくい...メッセージもどこに行くのか...(

 
例のCriterion()関数もあるとのことですが?そして、チュートリアルで説明した戦略に従ってポジションを開くための 基準がトリガーされるまで待ちます - そして、Inform()関数がどのように機能するかを見てみましょう。または、端末の対応するボタンを使って手動で開く - これもうまくいくはずです...
 
いや、Criterionを入れたのですが)全部動かす意味はあったのですが、初期でもうまくいかず(今、全部書き直すのは大変なのですが、Criterionがオープニングオーダーを送り、ディールが始まり、イベントが起こるのに、出力には0メッセージが...)です。