Hatalar, hatalar, sorular - sayfa 1936

 
Aleksey Vyazmikin :

Bir nedenden dolayı kodu göstermeye henüz hazır değil

Ancak MT5'ten profil çıkarmanın sonuçlarını göstermeye hazırım - anladığım kadarıyla ticaret fonksiyonlarıyla ilgili bir soru yok.



OHLC ortamı için aşağıdaki işlevleri kullanıyorum

Belki yanlış bir şey yapıyorum?

Ne yazık ki, her şeyi yanlış yapıyorsun .

Yerel ve verimli MQL5 kodu yazmak yerine, işleri onlarca kez yavaşlatan son derece verimsiz bir MQL4 kod öykünücüsü kullanıyorsunuz .

İşin kötü yanı, hız hakkında sorular sorduğunuz için ne yaptığınızı bile anlamıyorsunuz.
 
Aleksey Vyazmikin :

sonunda kod şu şekilde

https://www.mql5.com/ru/code/18305

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • oylar: 19
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Эта библиотека предоставляет молниеносный доступ к таймсериям для реализации привычных методов MQL4 (например, iBarShift) в чувствительных к задержкам приложениях на MQL5.
 

Teşekkürler - Bu kütüphaneyi gördüm - açıklama karıştı


Zamanın çoğu başlatma aşamasında harcanır . Zaman serisi verilerine birden çok kez erişmeyi planlamıyorsanız - bir çubuğun oluşumu sırasında birkaç binden fazla - alternatif yöntemleri düşünmelisiniz.

Danışmanım sadece bir barın açılışında çalışıyor - sence denemek mantıklı mı?
 
Renat Fatkhullin :

Ne yazık ki, her şeyi yanlış yapıyorsun .

Yerel ve verimli MQL5 kodu yazmak yerine, işleri onlarca kez yavaşlatan son derece verimsiz bir MQL4 kod öykünücüsü kullanıyorsunuz .

İşin kötü yanı, hız hakkında sorular sorduğunuz için ne yaptığınızı bile anlamıyorsunuz.

Tabii ki, bir çözüm arıyordum - MQL4 işlevlerinin MQL5 ile nasıl değiştirileceği, özellikle zaman serilerine erişim ve bunun MQL5'e geçen çoğu insanın karşılaştığı sorunlardan biri olduğunu gördüm.

Buna göre, aynı sitede, makalelerden birinin kullandığım yöntemi önerdiği bir çözüm buldum.

Şahsen, iyi ve kullanışlı özellikleri dilden kaldırmanın amacının ne olduğunu anlamıyorum.

Bu nedenle, sizin için soru , MQL5 dilinin avantajını hissetmek için bilgi alımını düzgün bir şekilde organize etmenin nasıl gerekli olduğudur?

 
Aleksey Vyazmikin :

Bu nedenle, sizin için soru , MQL5 dilinin avantajını hissetmek için bilgi alımını düzgün bir şekilde organize etmenin nasıl gerekli olduğudur?

MQL5 dilinin yerel, daha üretken işlevlerini kullanın ve MQL4 koduna bağlı kalmayın. Herhangi bir MQL4 -> MQL5 dönüştürücü/basitleştirici, MQL4'ten MQL5 toplu işlemlere kadar doğrudan erişim mikroişlevlerini taklit etmeye çalıştığından, düzinelerce kez yavaşlama gerektirir. Üstelik öykünme kesinlikle optimizasyon ve önbelleğe alma olmadan gerçekleşir.

Belirli bir işlevin (başka birinin kodunu içeren bir kod parçası) kullanımının temelinde, tam olarak ne yapıldığına dair bir anlayış olmalıdır. Aksi takdirde, "Başka birinin kodunu kullandım, bakın - hız düştü!". Aracı ve onunla ne yaptığınızı anlamadan iyi bir sonuç alamazsınız.


"Nasıl doğru yapılacağına" ek olarak, dili en temel düzeyde çalıştırmanın (hatta anlamanın değil, çalıştırmanın) üzerine çıktığınızda, "programlamayı öğrenme" görevinin son derece zor olduğunu açıklığa kavuşturacağım. Bu nedenle, bir sürü makale okumak, dokümantasyon, bir kütüphanede hazır kod okumak ve birkaç yıl boyunca zorunlu uygulamadan başka bir öğrenme yolu göremiyorum.
 
Renat Fatkhullin :

MQL5 dilinin yerel, daha üretken işlevlerini kullanın ve MQL4 koduna bağlı kalmayın.

Belirli bir işlevin (başka birinin kodunu içeren bir kod parçası) kullanımının temelinde, tam olarak ne yapıldığına dair bir anlayış olmalıdır. Aksi takdirde, "Başka birinin kodunu kullandım, bakın - hız düştü!". Aracı ve onunla ne yaptığınızı anlamadan iyi bir sonuç alamazsınız.


"Nasıl doğru yapılacağına" ek olarak, dili en temel düzeyde çalıştırmanın (hatta anlamanın değil, çalıştırmanın) üzerine çıktığınızda, "programlamayı öğrenme" görevinin son derece zor olduğunu açıklığa kavuşturacağım. Bu nedenle, bir sürü makale okumak, dokümantasyon, bir kütüphanede hazır kod okumak ve birkaç yıl boyunca zorunlu uygulamadan başka bir öğrenme yolu göremiyorum.

Renat, kod tabanına baktın mı? Orada, MQL4 dilinden tam olarak uyarlanmış işlevlere sahip bir kodla karşılaştım.

Sizden özellikle çevre hakkında nasıl doğru bilgi alacağınızı yazmanızı rica ediyorum - soyut kitaplara atıfta bulunmak verimli değil ve sadece bu referansın doğrulanamayan bir bahane olduğu konusundaki (muhtemelen yanlış) fikrimi güçlendiriyor.

Bir diziye bilgi kopyalamak işlevinin anlamını anlamayacak kadar aptal olduğumu söylemek, programlama dili için eşlik eden belgeleri derlemenin düşük seviyesinden bahsetmek demektir. Bir diziden diğerine bu kopyalamanın faydasının ne olduğunu ve gerektiğinde bir diziden bilgi alan bir işlevin neden korkunç bir kod olduğunu anlamıyorum.

 
Aleksey Vyazmikin :

Tabii ki, bir çözüm arıyordum - MQL4 işlevlerinin MQL5 ile nasıl değiştirileceği, özellikle zaman serilerine erişim ve bunun çoğu insanın MQL5'e geçerken karşılaştığı sorunlardan biri olduğunu gördüm.

Buna göre, aynı sitede, makalelerden birinin kullandığım yöntemi önerdiği bir çözüm buldum.

Şahsen, iyi ve kullanışlı özellikleri dilden kaldırmanın amacının ne olduğunu anlamıyorum.

Bu nedenle, sizin için soru , MQL5 dilinin avantajını hissetmek için bilgi alımını düzgün bir şekilde organize etmenin nasıl gerekli olduğudur?

Belki kötü aradım? Burada , bir kopyada, tüm bu kod yerine ihtiyacımız olan her şeyi alıyoruz

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Alexey Vyazmikin , 2017.07.21 01:20

Teşekkürler - düzeltildi.

sonunda kod şu şekilde

 //-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open ( int index)
  {
   double open= 0 ;
   int copied= CopyOpen ( Symbol (), 0 ,index, 1 , Open );
   if (copied> 0 ) open= Open [ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low ( int index)
  {
   double low= 0 ;
   int copied= CopyLow ( Symbol (), 0 ,index, 1 , Low );
   if (copied> 0 ) low= Low [ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High ( int index)
  {
   double high= 0 ;
   int copied= CopyHigh ( Symbol (), 0 ,index, 1 , High );
   if (copied> 0 ) high= High [ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close ( int index)
  {
   double close= 0 ;
   int copied= CopyClose ( Symbol (), 0 ,index, 1 , Close );
   if (copied> 0 ) close= Close [ 0 ];
   return (close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double open= 0 ;
   int copied= CopyOpen (symbol,timeframe,index, 1 ,OpenI);
   if (copied> 0 ) open=OpenI[ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double low= 0 ;
   int copied= CopyLow (symbol,timeframe,index, 1 ,LowI);
   if (copied> 0 ) low=LowI[ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double high= 0 ;
   int copied= CopyHigh (symbol,timeframe,index, 1 ,HighI);
   if (copied> 0 ) high=HighI[ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double close= 0 ;
   int copied= CopyClose (symbol,timeframe,index, 1 ,CloseI);
   if (copied> 0 ) close=CloseI[ 0 ];
   return (close);
  }

Test cihazında geçen süre uzadı - ben zaten beklemekten bıktım :)

Bunu kullanmak için bir yapının ne olduğunu anlamak yeterlidir.

 struct MqlRates
  {
   datetime time;         // время начала периода
   double    open;         // цена открытия
   double    high;         // наивысшая цена за период
   double    low;           // наименьшая цена за период
   double    close;         // цена закрытия
   long      tick_volume;   // тиковый объем
   int       spread;       // спред
   long      real_volume;   // биржевой объем
  };


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :

Belki kötü aradım? Burada , bir kopyada, tüm bu kod yerine ihtiyacımız olan her şeyi alıyoruz

Bunu kullanmak için bir yapının ne olduğunu anlamak yeterlidir.



Aynı şeyi alıyoruz - aslında...

Önerdiğiniz seçenek şu durumlarda uygundur:

- Hesaplama yalnızca çubuk açıldığında gerçekleşir

- Kaç bara ihtiyaç duyulacağı önceden bilinir

Kodumda döngüler var, hesaplamaların miktarı önceden bilinmeyebilir.

Ve yeni bir çubuk hakkında bilgi eklemek daha mantıklı olacaksa, örneğin bir çubuk her açıldığında 300 çubuk için bilgi kopyalamanın anlamı nedir - geliştirici neden bu şekilde gitmedi?

 
Üzgünüm ama her yeni başlayana programlama öğretmek için kesinlikle zamanım yok. Özellikle bir kişinin programlamayı anlamanın temellerini bile geçmediği ve banal şeyler sorduğu açıksa.


Ama sana yönü göstereceğim:

  1. MQL5 Belgeleri
  2. kod tabanı
  3. Nesne
  4. Forum ("benim için yaz, neden bana öğretmiyorsun ve işimi yapmıyorsun?" değil)
  5. Serbest (burada doğru yazabilirler)
  6. Düşünceli analizlerle bağımsız çalışma "bu paketleyici neden yavaşlasın ve kaynakları israf etsin, en uygun şekilde yeniden yazılabilir mi?"
  7. Her kod satırında gerçek kaynak tüketimini gösteren bir profil oluşturucu kullanma
Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы, таких как время выполнения отдельных ее фрагментов (функций, строк). В MetaEditor встроена...
 

Dolayısıyla bu damarda iletişim kurmak gibi bir arzum yok. Ne söylendiğini anlamaya çalışmak, ne olduğunu anlamaya çalışmak yerine, bazı inanılmaz itirazlar ortaya çıkıyor.