Mt4 End desteği. - sayfa 42

 
Реter Konow :
Numara.

Ne yazık ki, 14 Eylül saat 14:00'e kadar sadece yarım konser trafiğim kaldı, bu yüzden aramayacağım. Bu sefer ben bakacağım. Bir şeyle bir şey...

 
Реter Konow :

Teşekkürler Nikolai - senin sayende hata ayıklayıcı hakkında hiçbir fikrim olmamasından ne kadar kazandığımı öğrendim.

Ona güvenseydim, şimdi hiçbir şeyim olmazdı. Belki olurdu - ama yarısından az.

Basitçe programlamada ana dilimi kullanmanın muazzam avantajını kullanamadığım için.

Bu garip çünkü Kanada'da yaşamama rağmen İngilizceyi benden çok daha iyi biliyorsun. Neden İngilizce uzun isimler yazmıyorsunuz? Doğru, kırmızıyla vurgulanmayacaklar.
 
Nikolai Semko :
Bu garip çünkü Kanada'da yaşamama rağmen İngilizceyi benden çok daha iyi biliyorsun. Neden İngilizce uzun isimler yazmıyorsunuz? Doğru, kırmızıyla vurgulanmayacaklar.

Aklınızdaki her kelimeyi (bilinçsiz de olsa) tercüme edin?

Ana dil biyolojik olarak beyne yerleştirilmiştir. Anlamak mümkün olan en hızlı şeydir. Bir yabancı dil her zaman anlaşılmadan önce işlenir.

Saf biyoloji.

Rusça kullanarak kendi kodumu İngilizce kullandığımdan çok daha hızlı anlıyorum. Çok daha iyi hatırlıyorum.

 
Реter Konow :

Aklınızdaki her kelimeyi (bilinçsiz de olsa) tercüme edin?

Ana dil biyolojik olarak beyne yerleştirilmiştir. Anlamak mümkün olan en hızlı şeydir. Bir yabancı dil her zaman anlaşılmadan önce işlenir.

Saf biyoloji.

Rusça kullanarak kendi kodumu İngilizce kullandığımdan çok daha hızlı anlıyorum. Çok daha iyi hatırlıyorum.

Ve #define ile bir şeyler karıştırmaya çalışın. Sadece şu an bilgisayar başında değilim. Onlarsız yapamıyorsanız, hata ayıklayıcıda bir şekilde Rus değişken adlarıyla çalışmak mümkün olabilir.
 
Реter Konow :

Aklınızdaki her kelimeyi (bilinçsiz de olsa) tercüme edin?

Ana dil biyolojik olarak beyne yerleştirilmiştir. Anlamak mümkün olan en hızlı şeydir. Bir yabancı dil her zaman anlaşılmadan önce işlenir.

Saf biyoloji.

Rusça kullanarak kendi kodumu İngilizce kullandığımdan çok daha hızlı anlıyorum. Çok daha iyi hatırlıyorum.


Öyle oldu ki hiç İngilizcem olmadı - ne okulda, ne bir enstitüde, ne de ikincisinde. Bu güne kadar onu hiç anlamıyorum. Kendi kendime öğretiyorum ama ilk başlangıçlar ben programlamaya başlamadan çok önceydi. Anigdot "- İngilizceyi nasıl bu kadar çabuk öğrendin? - Öğrenecek ne var - tüm kelimeleri C++'dan almışlar" - bu benimle ilgili.

Ve bilirsin? Nedense İngiliz isimleri gözü hiçbir zaman ertelemedi. Bu nedenle, kendiniz için konuşun - herkese genellenecek bir şey yok.

 
Nikolai Semko :
Ve #define ile bir şeyler karıştırmaya çalışın. Sadece şu an bilgisayar başında değilim. Onlarsız yapamıyorsanız, hata ayıklayıcıda bir şekilde Rus değişken adlarıyla çalışmak mümkün olabilir.

Halkın rahatlığı için çözümümün kodunu İngilizce'ye çevirdim.

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

Umarım hiçbir şeyi karıştırmadım.

 
Реter Konow :

Teşekkürler Nikolai - senin sayende hata ayıklayıcı hakkında hiçbir fikrim olmamasından ne kadar kazandığımı öğrendim.

Ona güvenseydim, şimdi hiçbir şeyim olmazdı. Belki olurdu - ama yarısından az.

Basitçe programlamada ana dilimi kullanmanın muazzam avantajını kullanamadığım için.

Çalışmamda OOP ve hata ayıklayıcı gibi araçlar kullansaydım, her şeyi çok daha hızlı ve daha iyi yapacağımdan kesinlikle eminim!
Ne yazık ki farkında değilsin...

 
Реter Konow :

Halkın rahatlığı için çözümümün kodunu İngilizce'ye çevirdim.

Umarım hiçbir şeyi karıştırmadım.

Yazdırmayı deneyin ve sonucu görün

 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 :
Çalışmamda OOP ve hata ayıklayıcı gibi araçlar kullansaydım, her şeyi çok daha hızlı ve daha iyi yapacağımdan kesinlikle eminim!


tartışmayacağım. Doğru yolu, yaklaşımı ve araçları seçip seçmediğimi zaman ve pratik gösterecek.

 
Vitaly Muzichenko :

Yazdırmayı deneyin ve sonucu görün

Sonuç nedir?

Fonksiyonu nereden çağırıyorsunuz?