Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 264

 
ve her şey böyle. Dizinin boyutu önceden ayarlanmamışsa , kesinlikle ArrayResize yapmak gerekir. Ve ArrayResize (dizi, 0) eyleminin sonunda; evet konu bu, hiç aklıma gelmemişti ........... dikkate alacağım ....... Teşekkür ederim))))
 
Her tikte ArrayResize yapmak imkansız !!!!!!!! Aksi takdirde, hesaplamalarda çıkmaza girin ................. Ve hiçbir çok çekirdekli işlemci tasarruf etmeyecek ........
 
11.11.2013 07:54 tarihinde gönderildi, "ShowCandleSize" makalesi yanlış görüntüleniyor ve bilinmeyen bir nedenle düzenlenemez.
15 Kasım'da bu soruyla noreply@metaquotes.net adresinden destek servisiyle iletişime geçtim ancak bir yanıt alamadım.
Lütfen bana bu soru için doğru adresi söyle.
Samimi olarak.
--
Vladislav Shurkin,
20 Kasım 2013.
 
artmedia70 :
Kapatılan işlemlerin tüm sonuçları hesap geçmişinde görüntülenebilir. Programlı olarak. Ve sürekli olarak onlarla bir dizide çekiçleyin - gerekli mi? Birçoğu olabilir. Onsuz yaşayamıyorsanız, kendinizi gerekli tarih derinliğiyle sınırlamak ve diziyi doldurmak daha iyidir.

Açıklama için teşekkürler!

"Kapatılan işlemlerin tüm sonuçları hesap geçmişinde görüntülenebilir. Programlı olarak." - Neye benziyor?
 
VladislavVG :


Programlar sonlandırıldığında, bellek sızıntılarını önlemek için dinamik olarak ayrılmış bellek serbest bırakılmalıdır. MKL geliştiricilerinin bunu takip edip etmediğini bilmiyorum



Bunu takip ederler, bu amaçla diziler statik hale getirilir, onları tek bir yerde toplamak ve sonra serbest bırakmak için. Programın sonundaki ArrayResize (a,0) sadece kendini beğenmişlik için bile pek mantıklı gelmiyor.
 
Leo59 :
Açıklama için teşekkürler!

"Kapatılan işlemlerin tüm sonuçları hesap geçmişinde görüntülenebilir. Programlı olarak." - Neye benziyor?

Sipariş Seçimi (bilet,SELECT_BY_TICKET, MODE_HISTORY )

veya

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)

 
alsu :

OrderSelect(bilet,SELECT_BY_TICKET,MODE_HISTORY)

veya

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)




Teşekkür ederim!


Kovalev'in ders kitabının iyi yanı bu mu? Bence, orada, basit program kodu örneklerini kullanarak, basit problemleri çözmeyi öğreniyorsunuz.

Aslında Vladislav Goshkov'un gösterge kodu örneğinde programlama öğrenmeye başladım. Destek ve direnç göstergelerini De-Mark'a göre çizdim. Bunun gibi satırlar vardı:
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
Koymak. Nasıl çalıştığını test cihazına bakmaya başladım. Işınlar fraktallara çizilir, ancak geleceğe değil, yalnızca geçmişe bakarlar ...)))). Soru sormaya başladım - anladım! Vladislav'a saygılar !!!!
O zaman Kovalev'in ders kitabına rastladım. Soruların cevaplarını bu sunum formatında karşılamak için daha fazla.

Ve ilerisi.
"Kendi Expert Advisor'ınızı yazmak istiyor ve nereden başlayacağınızı bilmiyor musunuz? Rosh yazılarının Alpari web sitesinde görünmesi ile Expert Advisor oluşturmanın ilk adımları kolay ve acısız hale getirilebilir.
Basit ve erişilebilir bir şekilde Rosh, her EA yazarının geçtiği aşamalardan bahsediyor. Bilgisi uzun deneyimlerle gelen birçok programlama nüansı artık herkesin kullanımına açık.
Adım adım, en temelden başlayarak, Forex için programlamanın inceliklerini anlayacaksınız."

Belki bu makale incelemesinin hangi bağlantıda okunabileceğini biliyorsunuzdur?
 
VladislavVG :


Çünkü bu bir dizi değil, kesin olmak gerekirse. Daha fazla ayrıntı istiyorsanız - C dilinin açıklamalarına bakın.Geliştiriciler en başından beri açık olmayan veya eksik ifade edilen her şey hakkında - C standardına bakın - buna atıfta bulunmuyorum.

Ve eğer "parmaklarda" ise: bir değişken bildirdiğinizde double buffer[]; daha sonra bellek, C cinsinden "işaretçi" olarak adlandırılan, bir tamsayı tipine sahip olan ve dizinin daha sonra başlayacağı bellek hücresinin adresini saklayan bir değişken için tahsis edilir. MCL kullanarak arabellek değişkeninin boyutunu kontrol ederseniz, 0 değerini alırsınız. Bu, dizinin kendisine ayrılmış bellek olmadığı ve bir değer atamaya çalıştığınızda, onu yazacak hiçbir yer olmadığı anlamına gelir. : MCL'de adres aritmetiği yoktur ve işaretçilerle çalışamazsınız . C'de yazmak mümkündür, ancak "ayrılmamış" bellekle bu genellikle bir sistem çökmesine neden olur. AreaResize(array, N), (N>0) uyguladığınızda, bu sayede dizi için bellek tahsis edilir (en az bir eleman) ve değerleri yazmak için bir yer vardır. Ardından, kontrol ederken dizinin boyutu 0'dan farklı olacaktır.

C terimlerinde statik dizi kavramının birkaç anlamı vardır:

1. Statik bir dizi (aynı zamanda bir statik değişken/tür), boyutu derleme aşamasında (MKL4 için ön derleme) bilinen bu tür değişkenler/dizilerdir. Örneğin, çift buff[10000] tanımlanırken; derleyiciye değişkenin boyutu söylenir ve hemen bellek ayırabilir. Bu kavramın aksine, bir "dinamik dizi" kavramı vardır - yani, boyutu derleme aşamasında bilinmeyen ve yalnızca program yürütme aşamasında bilinen böyle bir dizi, bunların hepsi değişken dizileridir. boyut. Bu tür dizilere erişirken, önce bellek ayırmanız gerekir. Bellek, program statik belleğinin dışında tahsis edilir.

C/C++'da, bir dizi bir blokta açıklanıyorsa, görünürlüğü blokla sınırlıdır - statik dizi veya dinamik dizi. Yerel olarak tanımlanan dinamik diziler, programlardaki "bellek sızıntıları" gibi hatalarla ilişkilendirilir - bu, kapsam dışına çıkması nedeniyle bir bellek işaretçisinin yok edilmesi ve bunun için ayrılan belleğin dolu kalmasıdır.

2 Statik değiştirici ile açıklanan bir değişken olarak "statik" dizi kavramı - bu tür değişkenler bloğun kapsamından çıkarken yok edilmez - ayrı bir bellek alanında bulunurlar - bu nedenle değerler saklanır onların içinde. Bellek sızıntısı riski azalır. 1. fıkra anlamında dinamik olarak bildirilen bir dizi (yani, derleme aşamasında boyutu bilinmeyen bir dizi), 2. fıkra anlamında da statik olabilir, yani "statik" değiştiriciyle bildirilebilir.

Programlar sonlandırıldığında, bellek sızıntılarını önlemek için dinamik olarak ayrılmış bellek serbest bırakılmalıdır. MKL'nin geliştiricileri bunu takip ediyor mu bilmiyorum ama programlarında her zaman belleği boşaltırım - C'den bir alışkanlık - ArrayResize (dizi, 0);

MKL'de tüm diziler 2. madde anlamında statiktir.

Şimdi sorunuzla ilgili olarak: "Neden statik dizi çift arabelleğe []; değerler atanamıyor?". Bunun için bellek ayrılmadığından (aslında, statik değiştiricili dinamik bir dizidir). Değer atamadan önce, bellek ayırmanız gerekir - yani, bu diziye 0'dan büyük boyutlu bir ArrayResize uygulayın. Diziler için, ayrılan belleğin (dizinin dışında) çıkışını kontrol etmek gerekir.

PS, umarım anlatabilmişimdir. Mümkün olduğunca basit olmaya çalıştım.

"Beceri içemezsin"!
Teşekkürler!!!!!!!!
 
VladislavVG :

Çünkü tam olarak bir dizi değil. Daha fazla ayrıntı istiyorsanız - C dilinin açıklamalarına bakın.Geliştiriciler en başından beri açık olmayan veya eksik ifade edilen her şey hakkında - C standardına bakın - buna atıfta bulunmuyorum.
........

Çok teşekkürler. Gözlerim takılıp uyandım ama her şeyi büyük bir zevkle okudum, tekrar teşekkürler.
 
Leo59 :


Belki bu makale incelemesinin hangi bağlantıda okunabileceğini biliyorsunuzdur?


https://www.mql5.com/en/articles/mt4


Oh hayır, artık açık değil

Neden: