Mt4 Ende der Unterstützung. - Seite 42

 
Реter Konow:
Nein.

Leider habe ich nur noch ein halbes Gigabyte Datenverkehr bis 14.09. um 14 Uhr, also werde ich nicht nachschauen. Ich werde mich um diese Zeit kümmern. Das ist etwas...

 
Реter Konow:

Danke, Nikolai - dank dir habe ich gelernt, wie viel ich gewonnen habe, weil ich keine Ahnung vom Debugger hatte.

Wenn ich mich darauf verlassen hätte, hätte ich jetzt nichts mehr. Vielleicht hätte ich das auch getan, aber nur halb so viel.

Ganz einfach, weil ich nicht in der Lage gewesen wäre, einen kolossalen Vorteil zu nutzen, um meine eigene Sprache beim Programmieren zu verwenden.

Seltsam, denn Sie können viel besser Englisch als ich, obwohl ich in Kanada lebe. Warum sollte man lange Namen nicht auf Englisch schreiben? Allerdings werden sie nicht rot hervorgehoben.
 
Nikolai Semko:
Es ist seltsam, denn Sie können viel besser Englisch als ich, obwohl ich in Kanada lebe. Warum sollte man lange Namen nicht auf Englisch schreiben? Allerdings werden sie nicht rot hervorgehoben.

Auf jedes Wort in Ihrem Kopf (wenn auch unbewusst) übersetzen?

Die Muttersprache ist biologisch im Gehirn verankert. Die Verständigung ist am schnellsten möglich. Fremde Sprache wird immer erst verarbeitet, bevor sie verstanden wird.

Reine Biologie.

Ich verstehe meinen eigenen Code auf Russisch viel schneller, als wenn ich Englisch verwenden würde. Ich kann sie mir viel besser merken.

 
Реter Konow:

Auf jedes Wort in Ihrem Kopf (wenn auch unbewusst) übersetzen?

Die Muttersprache ist biologisch im Gehirn verankert. Die Verständigung ist am schnellsten möglich. Fremde Sprache wird immer erst verarbeitet, bevor sie verstanden wird.

Reine Biologie.

Ich verstehe meinen eigenen Code auf Russisch viel schneller, als wenn ich Englisch verwenden würde. Ich kann es mir viel besser merken.

Und versuchen Sie, etwas mit #define zu machen. Ich bin nur gerade nicht an meinem Computer. Vielleicht können Sie im Debugger irgendwie mit russischen Variablennamen arbeiten, wenn Sie nicht ohne sie auskommen können.
 
Реter Konow:

Auf jedes Wort in Ihrem Kopf (wenn auch unbewusst) übersetzen?

Die Muttersprache ist biologisch im Gehirn verankert. Die Verständigung ist am schnellsten möglich. Fremde Sprache wird immer erst verarbeitet, bevor sie verstanden wird.

Reine Biologie.

Ich verstehe meinen eigenen Code auf Russisch viel schneller, als wenn ich Englisch verwenden würde. Ich erinnere mich viel besser daran.


Zufälligerweise hatte ich nie Englisch - nicht in der Schule, nicht in einem einzigen Institut, nicht in einem zweiten. Ich verstehe es immer noch nicht nach Gehör. Ich lerne es gerade selbst, aber meine ersten Versuche waren lange bevor ich mit dem Programmieren angefangen habe. Annygdot " - Wie hast du so schnell Englisch gelernt? - Was gibt es da zu lernen - sie haben alle Wörter aus C++" - das bin ich.

Und wissen Sie was? Aus irgendeinem Grund habe ich noch nie einen anglophonen Menschen in meinem Leben gehabt. Sprechen Sie also für sich selbst - verallgemeinern Sie nicht für alle.

 
Nikolai Semko:
Versuchen Sie, etwas mit #define zu machen. Ich bin nur gerade nicht an meinem Computer. Vielleicht können Sie im Debugger irgendwie mit russischen Variablennamen arbeiten, wenn Sie nicht ohne sie auskommen.

Ich habe meinen Lösungscode zur Erleichterung der Öffentlichkeit ins Englische übersetzt.

//+------------------------------------------------------------------+
//|                                                  Новый бар 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();
         }
       //----------------------------------        
      }
   }
}
//+------------------------------------------------------------------+

Ich hoffe, ich habe nichts durcheinander gebracht.

 
Реter Konow:

Danke, Nikolai - dank dir habe ich gelernt, wie viel ich gewonnen habe, weil ich keine Ahnung vom Debugger hatte.

Wenn ich mich darauf verlassen hätte, hätte ich jetzt nichts mehr. Vielleicht hätte ich das auch getan, aber nur halb so viel.

Ganz einfach, weil ich nicht in der Lage gewesen wäre, einen kolossalen Vorteil zu nutzen, um meine eigene Sprache beim Programmieren zu verwenden.

Ich bin mir ziemlich sicher, dass ich alles viel schneller und in besserer Qualität erledigen würde, wenn ich solche Werkzeuge wie OOP und Debugger bei meiner Arbeit einsetzen würde!
Schade, dass Sie das nicht erkennen...

 
Реter Konow:

Um der Öffentlichkeit den Zugang zu erleichtern, habe ich meinen Lösungscode ins Englische übersetzt.

Ich hoffe, ich habe nichts durcheinander gebracht.

Probieren Sie es aus und sehen Sie das Ergebnis.

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:
Ich bin mir ziemlich sicher, dass ich alles viel schneller und besser machen würde, wenn ich Werkzeuge wie OOP und Debugger bei meiner Arbeit einsetzen würde!


Ich werde mich nicht dagegen wehren. Die Zeit und die Praxis werden zeigen, ob ich den richtigen Weg, den richtigen Ansatz und die richtigen Mittel gewählt habe.

 
Vitaly Muzichenko:

Probieren Sie einen Druck aus und sehen Sie das Ergebnis

Wie lauten Ihre Ergebnisse?

Von wo aus rufen Sie die Funktion auf?

Grund der Beschwerde: