初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 997

 

プログラマー仲間にご挨拶。あなたの力が必要です。エキスパートアドバイザーは、月の最初の取引日に1つだけ取引を開始します。 それは、1日、2日、3日、あるいは4日であるかもしれません。私の条件は次のようなものです: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} MQL5で「今日は月の最初の取引日だとEAに伝える」ような関数があるかどうか尋ねたいのですが、ありますか?

 
Kolya32:

プログラマー仲間にご挨拶。あなたの力が必要です。私のExpert Advisorは、月の最初の取引日に1つだけ取引を開始し、それは1日、2日、3日、または4日目になることもあります。私の条件は次のようなものです: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} MQL5で「今日は月の最初の取引日だとEAに伝える」ような関数があるかどうか聞きたいのです。

第1取引日がわからないとか、当日の日付と月の第1取引日が照合できないとか?

こうすることで、より正確に現在のTFの月の開始日を知ることができます(PERIOD_CURRENTは もちろん任意の日などに変更可能です)。

 datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_MN1,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);

しかし、各関数iTime,Barsを チェックする方が良い。

 
Kolya32:

プログラマー仲間にご挨拶。あなたの力が必要です。私のExpert Advisorは、月の最初の取引日に1つだけ取引を開始します。 しかし、1日目、2日目、3日目、4日目になることもあります。私の条件は次のようなものです: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} MQL5で「今日は月の最初の取引日だとEAに伝える」ような関数があるかどうか尋ねたいのですが、何かありますか?

新しいバーの開始が議論されている場所を見つけ、そこに期間PERIOD_MN1 を代入する。

新しいバーのオープニングは、その月の最初の取引日となります。

 
Aleksey Vyazmikin:

第1取引日が特定できない、または当日の日付と月の第1取引日が照合できないのですが?

月の最初の取引日が確定できない。あなたの推薦をありがとうございました、私は実験します)

 
Alexey Viktorov:

新しいバーの開始が議論されている場所を探し、期間PERIOD_MN 1を代入する。

新しいバーのオープンは、その月の最初の取引日となります。

ありがとうございます。この方向でも実験してみます)

 

なぜ著者はコロンで書くのか? 下のコードは単純にコロンだらけです。同じ::Sleep(5); でもコロン無し で書けるけど

void CProgram::GetSymbols(void)
  {
   m_progress_bar.LabelText("Get symbols...");
   m_progress_bar.Update(1,2);
   ::Sleep(5);
//--- Освободить массив символов
   ::ArrayFree(m_symbols);
//--- Массив элементов строк
   string elements[];
//--- Фильтр названий символов
   if(m_symb_filter.IsPressed())
     {
      string text=m_symb_filter.GetValue();
      if(text!="")
        {
         ushort sep=::StringGetCharacter(",",0);
         ::StringSplit(text,sep,elements);
         //---
         int elements_total=::ArraySize(elements);
         for(int e=0; e<elements_total; e++)
           {
            //--- Чистка по краям
            ::StringTrimLeft(elements[e]);
            ::StringTrimRight(elements[e]);
           }
        }
     }
//--- Собираем массив форекс-символов
   int symbols_total=::SymbolsTotal(true);
   for(int i=0; i<symbols_total; i++)
     {
      //--- Получим имя символа
      string symbol_name=::SymbolName(i,false);
      //--- Скроем его в окне Обзор рынка
      ::SymbolSelect(symbol_name,false);
      //--- Если не форекс-символ, перейти к следующему
      if(::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_CALC_MODE)!=SYMBOL_CALC_MODE_FOREX)

         if(m_symb_filter.IsPressed())
           {
            bool check=false;
            int elements_total=::ArraySize(elements);
            for(int e=0; e<elements_total; e++)
              {
               //--- Ищем совпадение в названии символа
               if(::StringFind(symbol_name,elements[e])>-1)
                 {
                  check=true;
                  break;
                 }
              }
            //--- Перейти к следующему, если не пропускает фильтр
            if(!check)
               continue;
           }
      //--- Сохраним символ в массив
      int array_size=::ArraySize(m_symbols);
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=symbol_name;
     }
//--- Если массив пустой, установим текущий символ по умолчанию
   int array_size=::ArraySize(m_symbols);
   if(array_size<1)
     {
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=::Symbol();
     }
//--- Покажем в окне Обзор рынка
   int selected_symbols_total=::ArraySize(m_symbols);
   for(int i=0; i<selected_symbols_total; i++)
      ::SymbolSelect(m_symbols[i],true);
  }
 
BillionerClub:

なぜ著者はコロンで書くのか? 下のコードは単純にコロンだらけです。しかし、同じように::Sleep(5); をコロンなしで書くことはできるのだろうか

操作コンテキストの解決 ( :: )

mql5-programの各関数は独自の実行コンテキストを持っています。例えば、システム関数Print() は、グローバルコンテキストで実行されます。インポートされた 関数は、対応するインポートのコンテキストで呼び出されます。クラスの 関数-メソッドは、対応するクラスのコンテキストを持ちます。コンテキスト解決操作の構文。

[コンテキスト名]::関数名(パラメータ)

コンテキスト名がない場合は、グローバルコンテキストを使用するための明示的な参照となる。コンテキスト解決操作がない場合、最も近いコンテキストで関数が検索されます。関数がローカルコンテキストにない場合、グローバルコンテキストで検索されます。

また、クラスのメンバ関数を決定 するために、コンテキスト解決操作が行われる。

型 Class_name::function_name(description_parameters)
{
// 関数本体
}

あるプログラムが、異なる実行コンテキストから同じ名前の関数を複数使用する場合、または将来使用する可能性がある場合、曖昧さが生じる可能性があります。コンテキストを明示的に指定せずに、関数を呼び出す順番を指定します。

  1. クラスメソッド。与えられた名前の関数がクラスで指定されていない場合、次のレベルでそれを探すことになります。
  2. MQL5の機能。もし、そのような機能が言語にない場合は、次のレベルに進むことになります。
  3. ユーザーが定義するグローバルな機能。そのような機能がない場合は、次のレベルを見ていることになります。
  4. 輸入された機能。インポートされた関数が見つからない場合、コンパイラはエラーを発生させます。

関数呼び出しのあいまいさを解消するために、コンテキスト解決操作で明示的にスコープを指定する。

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49]. Вызов функции с аргументами x1, x2,..., xn Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа. Передаваемые аргументы разделяются запятыми и должны...
 
Artyom Trishkin:

コンテキスト解決操作( ::: )

筆者は、コード処理の高速化を図っているのだと受け止めています。よくやった。

 

取引履歴がチャートに描画されますが、描画しないようにするにはどうしたらいいですか?


 
BillionerClub:

取引履歴がチャートに描画されますが、描画しないようにするにはどうしたらいいですか?


サービス-設定-取引-「取引 内容をリアルタイムでチャートに 表示する」。

理由: