MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 910

 

Kapanış fiyatlarını neden belirtilen süreden belirtilen miktarda yanlış kopyaladım. MQL5

copied = CopyClose ( _Symbol , PERIOD_H4 ,Time[ 59 ], 5 ,MPI); Alert (copied);
   for ( int i = 0 ; i < 100 ; i++)
    {
     Alert (MPI[i]);
    };
 
Alexandr Sokolov :

Kapanış fiyatlarını neden belirtilen süreden belirtilen miktarda yanlış kopyaladım. MQL5

mql5'te Time[] öğesini nerede buldunuz yoksa özel bir dizi mi?

 
Alexey Viktorov :

mql5'te Time[] öğesini nerede buldunuz yoksa özel bir dizi mi?

Evet, bu, göstergenin bulunduğu zaman diliminin çubuklarının açılma zamanını kopyaladığım özel bir dizidir. Veya tarihi başka nasıl belirtebilirim (özellikle gelecekte birkaç şekilde birleştirilmesi gerekeceğini düşünerek)?

 
Alexandr Sokolov :

Evet, bu, göstergenin bulunduğu zaman diliminin çubuklarının açılma zamanını kopyaladığım özel bir dizidir. Veya tarihi başka nasıl belirtebilirim (özellikle gelecekte birkaç şekilde birleştirilmesi gerekeceğini düşünerek)?

Evet, "yabancı" tf kopyalarken bir sorun var. Birkaç TF'de bir gösterge başlattım ve CopyRates() öğesinin hemen kopyalamadığını fark ettim. Görünüşe göre döneme ilişkin hazırlıksız veriler nedeniyle. Sadece yeniden derlemek durumu düzeltir. Önce noktayı "çekmeniz" ve ardından kopyalamanız gerektiği ortaya çıktı. Ama ondan önce eller uzanmadı. Yarın kontrol edeceğim. Ama umarım haklıyımdır.

Ve kısa bir soru: bunun yerine time[] kullanabiliyorsanız, göstergenin bulunduğu zaman diliminin çubuklarının açılış saatini neden kopyalayasınız? Ve indeksleme yönünü unutma.

 
Alexey Viktorov :

Ve kısa bir soru: bunun yerine time[] kullanılabiliyorsa, göstergenin bulunduğu zaman çerçevesinin çubuklarının açılış saatini neden kopyalamalısınız? Ve indeksleme yönünü unutma.

Zaman, OnCalculate dışında kullanılır. Tüm arabelleklerde dizin oluşturma yönü ArraySetAsSeries(...,true)


Bu neden? - Bir trend göstergesi yaptım (CodeBase'de yayınladım), "gürültülü". Yavaşladım - yeterli değil. Şimdi, daha düşük zaman diliminin her bir mumundaki değerlerin, daha yüksek zaman diliminin çubuklarından hesaplandığından emin olmak istiyorum.

"Çekmek" ile ne demek istiyorsun?

 
Alexandr Sokolov :

Zaman, OnCalculate dışında kullanılır. Tüm arabelleklerde dizin oluşturma yönü ArraySetAsSeries(...,true)


Bu neden? - Bir trend göstergesi yaptım (CodeBase'de yayınladım), "gürültülü". Yavaşladım - yeterli değil. Şimdi, daha düşük zaman diliminin her bir mumundaki değerlerin, daha yüksek zaman diliminin çubuklarından hesaplandığından emin olmak istiyorum.

"Çekmek" ile ne demek istiyorsun?

"Çek" benim ifadem değil. Bu yüzden bu forumda istenen dönemin verilerine periyodik bir itiraz okudum.

İşe yaramadığı gerçeğine öfkeyle, ben bile "nedensel bir yerden bir kedi gibi dönemi çekerek" kendimi ifade ettiğimi hatırlıyorum, ancak bunun bir faydası olmadı. Sorunla ilgili birçok tartışmadan sonra, kopyayı bir do while döngüsüne sardım. İlk denemeden kopyalandıysa, Tanrıya şükür. Değilse, 200-500 iterasyon için boş bir for döngüsü üzerinden N deneme veririz, bu yeterli gibi görünüyor. büyütülebilir...

Ve biraz önce bahsettiğim gösterge hala en başında. Bu yüzden doğru yapılmıyor. Mevcut dönemin mevcut çubukları için eski TF'nin kaç çubuğunun gerekli olduğunu kontrol ettim. 5000 M5 bar için 17 günlük bar olduğu ortaya çıktı. Ve bu dikkate alınmazsa, mevcut M5 döneminin 5000'i, 4 saatin 5000'i ve günün 5000'i kopyalanır. Çok fazla gereksiz...

Bir başka önemli not: Bir süre önce dizi indekslemeyi bir kez tersine çevirmek mümkündü, ancak şimdi her hapşırmada yeniden yönlendirmeniz gerekiyor. Bir yerde bunun hakkında zaten yazdım. Bu yüzden varsayılan modda çalışmayı tercih ediyorum. alışmak zor değil.

 

GlobalVariable varsayılan olarak yalnızca double olabilir

 double close = GlobalVariableGet ( "close" );


Kesirli kısım olmadan yakın değere ihtiyacım olursa, şöyle yazmak doğru olur mu:

 int close = GlobalVariableGet ( "close" );
 
Alexey Viktorov :

"Çek" benim ifadem değil. Bu yüzden bu forumda istenen dönemin verilerine periyodik bir itiraz okudum.

İşe yaramadığı gerçeğine öfkeyle, ben bile "nedensel bir yerden bir kedi gibi dönemi çekerek" kendimi ifade ettiğimi hatırlıyorum, ancak bunun bir faydası olmadı. Sorunla ilgili birçok tartışmadan sonra, kopyayı bir do while döngüsüne sardım. İlk denemeden kopyalandıysa, çok şükür. Değilse, 200-500 iterasyon için boş bir for döngüsü üzerinden N deneme veririz, bu yeterli gibi görünüyor. büyütülebilir...

Ve biraz önce bahsettiğim gösterge hala en başında. Bu yüzden doğru yapılmıyor. Mevcut dönemin mevcut çubukları için eski TF'nin kaç çubuğunun gerekli olduğunu kontrol ettim. 5000 M5 bar için 17 günlük bar olduğu ortaya çıktı. Ve bu dikkate alınmazsa, mevcut M5 döneminin 5000'i, 4 saatin 5000'i ve günün 5000'i kopyalanır. Çok fazla gereksiz...

Bir başka önemli not: Bir süre önce dizi indekslemeyi bir kez tersine çevirmek mümkündü, ancak şimdi her hapşırmada yeniden yönlendirmeniz gerekiyor. Bir yerde bunun hakkında zaten yazdım. Bu yüzden varsayılan modda çalışmayı tercih ediyorum. alışmak zor değil.

Bekle, bir şeyi kaçırdık ya da birbirimizi yanlış anladık, çünkü

 Alert (copied);

... benim için doğru olan 5 değerini döndürür, ancak arabellekteki değerlerin hepsi benim için aynı

 
Alexandr Sokolov :

Bekle, bir şeyi kaçırdık ya da birbirimizi yanlış anladık, çünkü

... benim için doğru olan 5 değerini döndürür, ancak arabellekteki değerlerin hepsi benim için aynı

O zaman MPI dizisinin boyutu ve indeksleme yönü ile ilgilenmeniz gerekir, eğer 5 öğeyi kopyalarsanız, o zaman döngü neden 100'e kadar çıkıyor?

Bu gibi durumlarda, hata ayıklayıcıyı kullanmayı tercih ederim. Bir dizim var ve dizinin tüm alanlarını aptallık noktasına kadar yeniden başlatmadan kontrol edin ...

 
Alexey Viktorov :

O zaman MPI dizisinin boyutu ve indeksleme yönü ile ilgilenmeniz gerekir, eğer 5 öğeyi kopyalarsanız, o zaman döngü neden 100'e kadar çıkıyor?

Bu gibi durumlarda, hata ayıklayıcıyı kullanmayı tercih ederim. Bir dizim var ve dizinin tüm alanlarını aptallık noktasına kadar yeniden başlatmadan kontrol edin ...

100'ü belirledim çünkü ihtiyacım olanın 59 ile başlayacağını düşündüm ama 6 ile aynı