Mt4 Fine del supporto. - pagina 42

 
Реter Konow:
No.

Purtroppo ho solo mezzo giga di traffico rimasto fino alle 14 del 14.09, quindi non guarderò. Mi occuperò di questo tempo. Questo è qualcosa...

 
Реter Konow:

Grazie, Nikolai - grazie a te ho imparato quanto ho guadagnato dal non avere un'idea del debugger.

Se ci avessi fatto affidamento, ora non avrei nulla. Forse l'avrei fatto, ma a metà.

Semplicemente perché non avrei potuto sfruttare un vantaggio colossale per usare il mio linguaggio nella programmazione.

Strano, perché conosci l'inglese molto meglio di me, anche se vivo in Canada. Perché non scrivere nomi lunghi in inglese? Solo che non saranno evidenziati in rosso.
 
Nikolai Semko:
È strano, perché tu conosci l'inglese molto meglio di me, anche se vivo in Canada. Perché non scrivere nomi lunghi in inglese? Solo che non saranno evidenziati in rosso.

Su ogni parola nella tua mente (anche se inconsciamente) tradurre?

La lingua madre è biologicamente radicata nel cervello. La comprensione è la più veloce possibile. Il linguaggio alieno viene sempre elaborato prima di essere compreso.

Biologia pura.

Capisco il mio codice molto più velocemente usando il russo che se usassi l'inglese. Lo memorizzo molto meglio.

 
Реter Konow:

Su ogni parola nella vostra mente (anche se inconsciamente) tradurre?

La lingua madre è biologicamente radicata nel cervello. La comprensione è la più veloce possibile. Il linguaggio alieno viene sempre elaborato prima di essere compreso.

Biologia pura.

Capisco il mio codice molto più velocemente usando il russo che se usassi l'inglese. Sono molto più bravo a ricordarlo.

E provate a fare qualcosa con #define. Solo che non sono al mio computer in questo momento. Forse puoi lavorare in qualche modo con i nomi delle variabili russe nel debugger, se non puoi farne a meno.
 
Реter Konow:

Su ogni parola nella vostra mente (anche se inconsciamente) tradurre?

La lingua madre è biologicamente radicata nel cervello. La comprensione è la più veloce possibile. Il linguaggio alieno viene sempre elaborato prima di essere compreso.

Biologia pura.

Capisco il mio codice molto più velocemente usando il russo che se usassi l'inglese. Me lo ricordo molto meglio.


Si dà il caso che non ho mai avuto l'inglese - non a scuola, non in un solo istituto, non in un secondo. Ancora non ci capisco niente a orecchio. Lo sto imparando da solo, ma i miei primi tentativi sono stati molto prima che iniziassi a programmare. Annygdot " - Come hai imparato l'inglese così velocemente? - Cosa c'è da imparare - hanno preso tutte le parole dal C++" - sono io.

E sai una cosa? Non ho mai avuto un anglofono nella mia vita per qualche motivo. Quindi parla per te - non generalizzare a tutti.

 
Nikolai Semko:
Provate a fare qualcosa con #define. Solo che non sono al mio computer in questo momento. Forse puoi lavorare in qualche modo con i nomi delle variabili russe nel debugger, se non puoi farne a meno.

Ho tradotto il codice della mia soluzione in inglese per comodità del pubblico.

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

Spero di non aver confuso nulla.

 
Реter Konow:

Grazie, Nikolai - grazie a te ho imparato quanto ho guadagnato dal non avere un'idea del debugger.

Se ci avessi fatto affidamento, ora non avrei nulla. Forse l'avrei fatto, ma a metà.

Semplicemente perché non avrei potuto sfruttare un vantaggio colossale per utilizzare il mio linguaggio nella programmazione.

Sono abbastanza sicuro che se usassi strumenti come OOP e debugger nel mio lavoro, farei tutto molto più velocemente e di qualità superiore!
Peccato che non te ne renda conto...

 
Реter Konow:

Per la comodità del pubblico, ho tradotto il codice della mia soluzione in inglese.

Spero di non aver fatto un errore.

Provate e vedete il risultato.

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:
Sono abbastanza sicuro che se usassi strumenti come OOP e debugger nel mio lavoro, farei tutto molto più velocemente e meglio!


Non voglio discutere. Il tempo e la pratica mostreranno se ho scelto il modo, l'approccio e gli strumenti giusti.

 
Vitaly Muzichenko:

Prova una stampa e vedi i risultati

Quali sono i vostri risultati?

Da dove stai chiamando la funzione?