MT4 iMAOnArray ve iBandsOnArray eleman sayısının hesaplamalar üzerindeki etkisi

 

Aslında bir konu. Tüm diziyi değil, yalnızca son N öğelerini saymam gerekiyorsa.

Bu fonksiyonları kısıtlama altında hesaplamanın mantığını tam olarak anlamıyorum. Bir zaman serisi dizisi vardır (gösterge tamponlarından biri), eleman sayısını 0'a eşit bırakırsanız, soru yoktur, her şey hesaplanır ve ortaya çıkar, ancak hesaplamalara katılan eleman sayısı aynı olduğunda ofsetler azalır, sadece birincil olanları alırım. Basitçe söylemek gerekirse, 5000 elemanlık bir dizi var (tablodaki çubuklar), zaman kazanmak için sadece son 300'ü hesaplamam gerekiyor, ancak ikinci parametrede 300 belirttiğimde birincil 5000-4700 öğeleri alıyorum, ancak 300-0 ofsetinde ve ardından arama sırasındaki değerler değişmez. Bu parametreyi kullanmanın amacı nedir?

 
Sergey Efimenko :

Aslında bir konu. Tüm diziyi değil, yalnızca son N öğelerini saymam gerekiyorsa.

Bu fonksiyonları kısıtlama altında hesaplamanın mantığını tam olarak anlamıyorum. Bir zaman serisi dizisi vardır (gösterge tamponlarından biri), eleman sayısını 0'a eşit bırakırsanız, soru yoktur, her şey hesaplanır ve ortaya çıkar, ancak hesaplamalara katılan eleman sayısı aynı olduğunda ofsetler azalır, sadece birincil olanları alırım. Basitçe söylemek gerekirse, 5000 elemanlık bir dizi var (tablodaki çubuklar), zaman kazanmak için sadece son 300'ü hesaplamam gerekiyor, ancak ikinci parametrede 300 belirttiğimde birincil 5000-4700 öğeleri alıyorum, ancak 300-0 ofsetinde ve ardından arama sırasındaki değerler değişmez. Bu parametreyi kullanmanın amacı nedir?

Sorunu tam olarak anlamak için bir kod örneği verin.
 
Alexander Voronkov :
Sorunu tam olarak anlamak için bir kod örneği verin.

bu yüzden iyi çalışıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 0 , PeriodMA ,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

bu düzgün çalışmıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

 
Sergey Efimenko :

bu yüzden iyi çalışıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 0 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

bu düzgün çalışmıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

Zaman kazanmak ve yalnızca son 300'ü (grafikteki çubuklar) hesaplamak için for() veya if() operatörlerinin değerlerini kullanın.
 
Alexander Voronkov :
Zaman kazanmak ve yalnızca son 300'ü (grafikteki çubuklar) hesaplamak için for() veya if() operatörlerinin değerlerini kullanın.

Hafifçe nasıl ifade edilir ... Neyin tehlikede olduğunu anlıyor musunuz? Hiç kodda başlıkta belirtilen işlevleri kullanıp bunların içindeki dizinin tamamını değil de bir kısmını hesaplamayı denediniz mi? O halde deneyin, belki o zaman "görsel olarak" ne hakkında olduğunu anlayacaksınız. Ne için ne de bu durumda yardımcı olmaz, öneriniz çubukları veya ne kadar saymam gerektiğini açıkça belirtebileceğiniz diğer durumları hesaplarken önemlidir, ancak bu işlevleri kullanan bir dizi değil. Kodun bir kısmı yukarıda gösterilmiştir ve kesinlikle aynıdır, tek fark, ilk durumda tüm diziyi saymam ve ikincisinde değerlerinin sadece 300'ü, ancak değerlerin sonunda sayılmasıdır. dizi, başvurular ise başlangıca kullanılır. Belki durumu net olarak tarif etmiyorum, ancak herhangi bir göstergeye ekleyip sonucu karşılaştırırsanız kod görmenize yardımcı olacaktır...

Not Alternatif fonksiyon analoglarının "kendi kendine yazılmış" versiyonu hakkında anlaşılabilir, ancak dili kullanarak istenen sonucu elde etmek istiyorum.

 
Sergey Efimenko :

Hafifçe nasıl ifade edilir ... Neyin tehlikede olduğunu anlıyor musunuz? Hiç kodda başlıkta belirtilen işlevleri kullanıp bunların içindeki dizinin tamamını değil de bir kısmını hesaplamayı denediniz mi? O halde deneyin, belki o zaman "görsel olarak" ne hakkında olduğunu anlayacaksınız. Ne için ne de bu durumda yardımcı olmaz, öneriniz çubukları veya ne kadar saymam gerektiğini açıkça belirtebileceğiniz diğer durumları hesaplarken önemlidir, ancak bu işlevleri kullanan bir dizi değil. Kodun bir kısmı yukarıda gösterilmiştir ve kesinlikle aynıdır, tek fark, ilk durumda tüm diziyi saymam ve ikincisinde değerlerinin sadece 300'ü, ancak değerlerin sonunda sayılmasıdır. dizi, başvurular ise başlangıca kullanılır. Belki durumu net olarak tarif etmiyorum, ancak herhangi bir göstergeye ekleyip sonucu karşılaştırırsanız kod görmenize yardımcı olacaktır...

Not Alternatif fonksiyon analoglarının "kendi kendine yazılmış" versiyonu hakkında anlaşılabilir, ancak dili kullanarak istenen sonucu elde etmek istiyorum.

Olduğu gibi söyle, önemli değil.

Bu yüzden seni yanlış anladım.

 
Gerçekten hiç kimse bu işlevleri kullanmıyor ve böyle bir durumla karşılaşmadı mı?
 
Sergey Efimenko :

bu yüzden iyi çalışıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 0 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

bu düzgün çalışmıyor:

Tampon[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

Sonuç olarak ne bekliyorsunuz ve normal olarak nasıl çalışmalı?
 
Alexey Viktorov :
Sonuç olarak ne bekliyorsunuz ve normal olarak nasıl çalışmalı?
Ne bekliyorum? Yukarıda, diziye 299-0 uzaklığında erişmeme rağmen, ilk 300'e (başlangıç) değil, son 300 (geçerli) gerçek değere ihtiyacım olduğunu yazdım, ancak "sonundan ofsette veri alıyorum. dizi" - " dizinin sonu - 300 "değerleri (benim durumumda 4999'dan 4700'e), yani 299'da ofset 4999'da olması gereken bir değer var ve benzer şekilde ofset 0'da bir değer var ofset 4700'de olması gereken değer. İlk tarihsel verileri değil, mevcut olanları almak için dizi hesaplamalarının sayısını azaltırken, asıl soru, hesaplamanın hesaplanması gerçeğine rağmen, en eski değerleri hesaplamanın amacı nedir? şimdikiler yapılmadı mı?
 
Sergey Efimenko :
Ne bekliyorum? Diziye 300-0 ofsetinde erişmeme rağmen, ilk 300'e (başlangıç) değil, son 300 (geçerli) gerçek değere ihtiyacım olduğunu yazdım, ancak "sondan bir ofsette veri alıyorum" dizinin" - "bitiş dizisi - 300" değerleri (benim durumumda 4999'dan 4700'e), yani, ofset 300'de ofset 4999'da olması gereken bir değer var ve benzer şekilde ofset 0'da bir değer var Bu, 4700 ofsetinde olmalıdır. Aslında, dizi hesaplamalarının sayısını azaltırken, ilk tarihsel verileri değil, mevcut olanları alın, soru şu ki, hesaplanması gerçeğine rağmen, en eski değerleri hesaplamanın amacı nedir? şimdikiler yapılmadı mı?

ArraySetAsSeries() yardımcı olur mu?

Böyle bir çöple bir kez karşı karşıya kaldı - kazanmadı ve istifa etti. iMAOnArray() olmadan yapılmıştır

 
Artyom Trishkin :

ArraySetAsSeries() yardımcı olur mu?

Böyle bir çöple bir kez karşı karşıya kaldı - kazanmadı ve istifa etti. iMAOnArray() olmadan yapılmıştır

Sorun, dizinin orijinal olarak bir "seri" arabellek olmasıdır. Ve elde edilen değerlerin sıra sırası normaldir, sorun tam olarak hesaplama sayısının sınırlandırılmasında ortaya çıkar, daha önce yazdığım gibi, tüm dizinin hesaplanmasını kullanırken veriler normaldir, ancak terminal sırasında hoş olmayan bir şekilde yavaşlar. başlatma ve hatta daha fazlası, farklı zaman dilimleri için birkaç gösterge kullanırken ve yalnızca Uzman Danışmanın optimizasyonu hakkında böyle bir gösterge hakkında hiçbir şey söylemeyeceğim ve anladığım kadarıyla sorun MT4'te dahilidir, yani , tek çıkış yolunun bu işlevlerin kendi analogunu kullanmak olduğu ortaya çıktı, ancak standart olanlarla uğraşmak istiyorum :(

PS Kendim için, kendi iMAOnArray analogumu da kullanıyorum, ancak burada kaynak kodu sadece benimle olmayacak, bir seçenek olarak kitaplıkların kullanımı ve hatta iBand'lerin ortalama bir çözülebilirlik ile kullanılmasına rağmen, sapmaların hesaplanması yazılması gerekecek. Genel olarak, böyle bir durumun standart fonksiyonlara sahip olması üzücü.

Neden: