Mt4 サポート終了。 - ページ 42

 
Реter Konow:
いいえ。

残念ながら14.09の14時まで半ギガの通信量しか残っていないので、見ません。その時はよろしくお願いします。それは何かというと...。

 
Реter Konow:

ニコライさん、ありがとうございます。おかげさまで、デバッガについて何も知らなかったことが、どれだけ得をしたかを知ることができました。

もし、それに頼っていたら、今は何もない。たぶん、私だったら、半分くらいかな。

単純に、プログラミングで自国語を使うというコロコロしたアドバンテージが使えなくなるからです。

不思議なもので、カナダに住んでいる私よりもずっと英語がわかるのです。長い名前を英語で書いてみてはいかがでしょうか。ただし、赤色でハイライトされることはありません。
 
Nikolai Semko:
カナダに住んでいるのに、私よりずっと英語がわかるから不思議です。長い名前を英語で書いてみてはいかがでしょうか。ただし、赤色でハイライトされることはありません。

あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?

母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。

純粋な生物学。

自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。暗記がはかどります。

 
Реter Konow:

あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?

母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。

純粋な生物学。

自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。覚えるのがだいぶ楽になりました。

そして、#defineで何かをしてみてください。今、パソコンの前にいないだけです。デバッガでロシア語の変数名をどうにかして使えるかもしれませんね。
 
Реter Konow:

あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?

母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。

純粋な生物学。

自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。ずっと覚えています。


たまたま、私は英語を習ったことがないんです。学校でも、一つの研究所でも、二つ目の研究所でも、英語を習ったことがないんです。今でも耳では全く理解できません。私自身も勉強中ですが、最初に挑戦したのはプログラミングを始めるずっと前です。Annygdot " - How did you learn English so fast?- C++からすべての単語を得たのだから、何を学べばいいのか」、それが私です。

そして、ご存知ですか?私はなぜかアンパンマンを食べたことがありません。だから、自分のことは自分で話す。みんなに一般化しない。

 
Nikolai Semko:
defineで何かやってみよう。今、パソコンの前にいないだけです。ロシア語の変数名がないとどうにもならないのであれば、デバッガでなんとか工夫できるかもしれませんね。

私は、一般の方々の便宜を図るため、私のソリューションコードを英語に翻訳しました。

//+------------------------------------------------------------------+
//|                                                  Новый бар 2.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
datetime Last_Bar_Time;

int    Periodicity = 25;
int    All_symbols;

string Symbols[];
int    Timeframes[7] = {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1};
int    All_Timeframes = 7;


int    All_bars_table[][7];
bool   New_Bar_Events[][7];

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(25);
   //-------------------------------------------------------------
   //Записываем время последнего бара на момент загрузки эксперта.  
   //Для корректного начала работы, робота нужно запустить на М1. 
   //-------------------------------------------------------------
   Last_Bar_Time = Time[0];
   //-------------------------------------------------------------   
   //Узнаем сколько символов есть в обзоре рынка.
   //---------------------------------------------------------
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   //Устанавливаем размер массива Symbols. Внутри него будут записаны
   //имена всех символов, которые есть в окне обзоре рынка.
   //---------------------------------------------------------
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   //Устанавливаем размеры массивов "All_bars_table[]" и "New_Bar_Events[]".
   //В массиве "All_bars_table[]" будет записыватся текущее количество баров каждого символа
   //и каждого таймфрейма. А в массиве "New_Bar_Events[]" устанавливаться флаги
   //события нового бара для каждого символа и каждого таймфрейма. 
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   ArrayResize(New_Bar_Events,All_symbols);
   //---------------------------------------------------------
   //Записываем наименования символов обзора рынка в массив "Symbols[]".
   //---------------------------------------------------------
   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }
   //---------------------------------------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
 static bool Start_count;
 static int  Current_period;
 //---------------------------
 //Нам нужен корректный старт отсчета. Это должно быть время начала бара.
 //---------------------------
 if(!Start_count && Last_Bar_Time != Time[0])Start_count = true; 
 //--------------------------- 
 if(Start_count)Current_period++;
 //--------------------------- 
 //В следующем цикле, мы будем обращатся к функции iBars для получения количества баров на 
 //каждом из символов и таймфреймов, которые будем проходить в цикле.
 //Далее, будем сравнивать записанное количество баров с текущим и при 
 //наличии разницы установим флаг события нового бара в массив "New_Bar_Events[]".
 //---------------------------
 if(Current_period*Periodicity >= 1000)
   {
    for(int a1 = 0; a1 < All_symbols; a1++)
      {
       string This_symbol = Symbols[a1];
       //---------------------------------
       for(int a2 = 0; a2 < All_Timeframes; a2++)
         {
          int This_timeframe = Timeframes[a2];
          //------------------------------------------
          int All_current_bars = iBars(This_symbol,This_timeframe);
          //------------------------------------------
          if(All_current_bars > All_bars_table[a1][a2])
            {
             //------------------------------------------------------------
             //Если это не самая первая запись в массив All_bars_table,
             //то фиксируем событие нового бара.
             //------------------------------------------------------------
             if(All_bars_table[a1][a2])
               {
                New_Bar_Events[a1][a2]  = true;
               } 
             //------------------------------------------------------------
             //Устанавливаем новое значение текущего количества баров.
             //------------------------------------------------------------
             All_bars_table   [a1][a2]  = All_current_bars;
            }
          //------------------------------------------
         }
      }
    //---------
    Current_period = 0;
   }
 //-----------------------------------------------
 //Здесь наш код...
 //Здесь наш код...
 //Здесь наш код...
 //-----------------------------------------------
 //После завершения всех вызовов на этом событии таймера
 //снимаем флаги событий нового бара.
 if(!Current_period)Refresh_new_bar_events_table();
 //-----------------------------------------------  
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//Функция снимает флаги событий нового бара.
//Эта процедура осуществляется после выполнения всего пользовательского
//кода один раз в минуту. Вплоть до момента очищения массива флагов 
//новых баров, все функции могут их видеть обращаясь к массиву напрямую.
//+------------------------------------------------------------------+
void Refresh_new_bar_events_table()
{
 for(int a1 = 0; a1 < All_symbols; a1++)
   {
    for(int a2 = 0; a2 < All_Timeframes; a2++)
      {
       New_Bar_Events[a1][a2] = false;
      }
   }
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//Пример использования событий нового бара в пользовательском функционал.
//Просто обращаемся к глобальному массиву "New_Bar_Events[a1][a2]" напрямую
//и используем событие в наших торговых алгоритмах.
//+------------------------------------------------------------------+
void Trading_on_new_bars_strategy()
{
  for(int a1 = 0; a1 < All_symbols; a1++)
   {
    string This_symbol    = Symbols[a1];
    //----------------------------------
    for(int a2 = 0; a2 < All_Timeframes; a2++)
      {
       bool   New_bar      = New_Bar_Events[a1][a2];
       int    This_timeframe = Timeframes[a2];
       //----------------------------------
       if(New_bar && This_symbol == "EURUSD" && This_timeframe == PERIOD_M15)
         {
          //Buy();
         }
       //---------------------------------- 
       if(New_bar && This_symbol == "AUDUSD" && This_timeframe == PERIOD_M30)
         {
          //Sell();
         }
       //----------------------------------        
      }
   }
}
//+------------------------------------------------------------------+

混同していなければいいのですが。

 
Реter Konow:

ニコライさん、ありがとうございます。おかげさまで、デバッガについて何も知らなかった私が、どれだけ得をしたかを知ることができました。

もし、それに頼っていたら、今は何もない。たぶん、私だったら、半分くらいかな。

単純に、プログラミングで自国語を使うというコロコロしたアドバンテージが使えなくなるからです。

もし、私がOOPやデバッガなどのツールを使って仕事をしていたら、もっと速く、もっと質の高い仕事ができるに違いありません。
自覚がないのが残念...。

 
Реter Konow:

一般の方々の便宜を図るため、私の解答コードを英語に翻訳してみました。

間違っていなければいいのですが。

ぜひ試してみてください。

void Trading_on_new_bars_strategy()
{
  for(int a1 = 0; a1 < All_symbols; a1++)
   {
    string This_symbol    = Symbols[a1];
    //----------------------------------
    for(int a2 = 0; a2 < All_Timeframes; a2++)
      {
       bool   New_bar      = New_Bar_Events[a1][a2];
       int    This_timeframe = Timeframes[a2];
       //----------------------------------
       if(New_bar && This_symbol == "EURUSD" && This_timeframe == PERIOD_M5)
         {
          //Buy();
          Print("M5");
         }
       //---------------------------------- 
       if(New_bar && This_symbol == "AUDUSD" && This_timeframe == PERIOD_M1)
         {
          //Sell();
          Print("M1");
         }
       //----------------------------------        
      }
   }
}
 
Nikolai Semko:
もし私がOOPやデバッガーなどのツールを使って仕事をしたら、もっと早く、もっと良いものができるに違いない!」と。


反論はしません。私が選んだ方法、アプローチ、ツールが正しかったかどうかは、時間と実践が教えてくれるでしょう。

 
Vitaly Muzichenko:

プリントを試して結果を確認する

成果はいかがですか?

どこから関数を呼び出しているのですか?