"Göstergelerin Ekonomik Hesaplanmasına İlişkin Prensipler" makalesi için tartışma

 

Yeni makale Göstergelerin Ekonomik Hesaplanmasına İlişkin Prensipler yayınlandı:

Kullanıcı çağrıları ve teknik göstergeler, otomatik alım satım sistemlerinin program kodunda çok az yer kaplar. Bu, genellikle yalnızca birkaç kod satırıdır. Ancak bu, çoğu zaman, Expert Advisor'ı test etmek için harcanması gereken zamanın en büyük kısmını kullanan bu birkaç kod satırı olur. Bu nedenle, bir gösterge içindeki veri hesaplamalarıyla ilgili her şeyin, ilk bakışta göründüğünden çok daha kapsamlı bir şekilde düşünülmesi gerekir. Bu makalede tam olarak bu ele alınacaktır.

Expert Advisor'ın kodundaki gösterge değerlerini kopyalama işlevinin rasyonel çağrısının ayrıntıları artık netleştiğine göre, Expert Advisor'larda IsNewBar() işlevini uygulamanın faydalarını test edebilirsiniz.

Dolayısıyla, strateji test cihazında test edilmeye hazır iki Expert Advisor seçeneğimiz mevcut; bunlardan ilki AMA_Test.ex5. Her tick'te verileri gösterge arabelleğinden kopyalar.

Şek.9 Expert Advisor AMA_Test ile testi geçmenin sonucu

İkincisi IsNewBar_AMA_Test.mq5 - Verileri yalnızca bir çubuk değişikliği sırasında kopyalar.

Şek.10 Expert Advisor IsNewBar_AMA_Test ile testi geçmenin sonucu

Evet! Test sonuçları biraz hayal kırıklığı yaratıyor. Her tick'te IsNewBar () işlevini çağırmanın, verileri kullanıcı dizisinin üç hücresine kopyalamaktan çok daha pahalı olduğu ortaya çıktı! 

Burada dikkatinizi göstergenin başka bir önemli fakat görünüşte göze çarpmayan kısmına çekmek istiyorum. Gerçek şu ki, OnInit () işlevinde göstergenin vasıtasını alırsak, bu göstergeden gelen verileri OnTick () işlevi içinde kopyalayıp kopyalamamamıza bakılmaksızın, henüz hesaplanmamış ve mevcut çubuklarla ilgili hesaplamaları yine de her tick üzerinde yapılacaktır.

Yazar: Nikolay Kositsin

 

Yazı için teşekkür ederim.

Bir sorum var. Gösterge hesaplamalarını optimize etmek için göstergenin ilk formunu kullanıyorsunuz, begin var. Ancak kullanamazsanız (doğru hesaplamalar için open[], high[], low[], close[] ... gerekir) nasıl olur? İkinci formda başlangıç yok.

 
Prival:

Yazı için teşekkür ederim.

Bir sorum var. Gösterge hesaplamalarını optimize etmek için göstergenin ilk formunu kullanıyorsunuz, başlıyor. Ancak kullanamazsanız (doğru hesaplamalar için open[], high[], low[], close[] ...) nasıl olur? İkinci formda başlangıç yoktur.

Ve orada gerekli değildir, çünkü girdi parametreleri her zaman fiyat özellikleridir - tüm öğelerdedirler, sadece begin'den doldurulmuş "keyfi" bir dizi kullanmaz.
 

her şey dikkate alınmıyor, ancak genel olarak yine de ilginç =)

ve özellikle teknik göstergelerin optimizasyonu gibi bir şey dikkate alınmaz.

Bu konunun oldukça alakalı olduğunu düşünüyorum.

 

daha doğrusu, teknik göstergenin nasıl daha iyi başlatılacağı

genel olarak veri kontrolü işlevi uygulanır

ancak başlatma örneği tam olarak dikkate alınmamıştır

yardımdan bilindiği kadarıyla

Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.

bu özelliği atlamak için en iyi yol....

 

Ben de hep aynı şeyi merak ediyorum.

   if (Handle == INVALID_HANDLE)  Print(" SMA gösterge tutamacı alınamadı");

Eğer bu koşul çalışıyorsa, ne yapmalıyım? Diyelim ki şampiyona, işte bu kadar... artık koşmayacak.

 
Prival:

Ben de başından beri aynı şeyi merak ediyordum.

bu koşul çalışırsa, ne yapacağım? Diyelim ki şampiyona, işte bu kadar... init artık çalışmayacak.

Evet! Bu belgelenmemiş bir gerçek, ben de bunu bilmiyordum! Bunu kesinlikle araştırmalıyız! Ama benim için daha kolay, tüm hindileri Uzman Danışmanın kendisine paketleyeceğim ve işte bu, böylece Uzman Danışman maraton mesafelerinde bir sprinter gibi koşar ve hiçbir yerde ve asla tökezlemez!

 
Prival:

Ben de hep aynı şeyi merak ediyorum.

Eğer bu koşul çalışıyorsa, ne yapmalıyım? Diyelim ki bu bir şampiyonluk, işte bu kadar ... init artık çalışmayacak.

Öncelikle hata kodunu alın ve log'a çıktısını verin. Ve OnTick() veya OnCalculate() içinde tekrar erişmeyi deneyin. Gösterge tanıtıcısını alamazsanız, büyük olasılıkla böyle bir gösterge yoktur veya yeterli bellek yoktur. Bu durumda, Uzman Danışmanın ticaret yapma hakkı yoktur.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Rosh:
Öncelikle hata kodunu alın ve günlüğe çıktısını verin. Ve OnTick() veya OnCalculate() içinde tekrar erişmeyi deneyin. Gösterge tanıtıcısını alamazsanız, büyük olasılıkla böyle bir gösterge yoktur veya yeterli bellek yoktur. Bu durumda, Uzman Danışmanın ticaret yapma hakkı yoktur.

İşte buradayız! Bunu kendimiz yapabiliriz! Böyle bir durumda, OnInit() fonksiyonunun eksi bir döndürerek OnInit() fonksiyonunu tekrar çağırmasını sağlayabilirsek ve bu işlem tanıtıcı görünene kadar devam ederse! Ama şimdi anlaşılıyor ki, eğer bilgisayarınızı aşırı zorlamazsanız, tanıtıcıyı alamamanız için bir neden olmayacaktır. Ancak bunu bir yapıyı güncellerken bir kez gördüm, göstergeyi yeniden derleyerek iyileştirilebilir!

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Eksi bir iade edilebilir, ancak bu EA/gösterge için iyiye işaret değildir.
 
Neyse ki, terminalin hatası nedeniyle gösterge oluşturma hatası pratikte meydana gelmez.