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

 
Alexey Viktorov # :

tartışmıyorum. Bu yazıdaki resimde "Griler" gösterilmektedir.


Kaynak olmadan bunlar


Eh, "bunlardan" bahsediyorum ve dedim. Bir taşma olduğunda ve göstergeler görüntülenmediğinde, bahsettiğiniz mesajda ekranda gösterilen menüde ne olduğuna bakmadım. Burada kesin bir şey söyleyemem.

Ancak, gezginde gösterge yoksa, ancak bunlar klasördeyse, bu, eskilerden bazıları klasörden kaldırılana kadar gezginde yenilerinin gösterilmeyeceği anlamına gelir.

Oldu, geçti. Yalnız değilim.

 

Dinamik bir diziyi yalnızca bir gösterge arabelleği olarak atayarak manuel olarak yeniden boyutlandırma ihtiyacından kaçınmak istedim. Ancak, boyutu sözde terminalin kendisi tarafından izlenmesi gereken ve sözde manuel olarak yeniden boyutlandırılması gerekmeyen gösterge arabelleğinin sözde dinamik dizisinin ArrayResize() işlevini reddetmek mümkün değildir:

https://www.mql5.com/ru/docs/series/bufferdirection :

Индикаторный буфер представляет из себя  динамический массив  типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции  SetIndexBuffer() . Для индикаторных буферов не требуется задавать размер с помощью функции  ArrayResize() , исполняющая система терминала сама позаботится об этом.

https://www.mql5.com/ru/docs/array/arrayisdynamic adresine gidiyoruz, kodu çalıştırıyoruz ve aniden şunu öğreniyoruz:

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Gösterge tamponunun kontrol edilmesi:

2022.01.24 21:25:27.543 t (NZDUSD,D1) Boş bellekten önceki boyut = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1) Bu dinamik bir dizidir = Hayır

2022.01.24 21:25:27.543 t (NZDUSD,D1) Boş bellekten sonraki boyut = 0

o:

 double ExtBuff[];       // индикаторный буфер
SetIndexBuffer ( 0 ,ExtBuff);

Kitaba bakıyorum - bir incir görüyorum. Yoksa bunca zaman aldatıldık mı?

Ya da belki bir zamanlar dinamik (ilk başlatmada) ve sonra her şey mi?

 
x572intraday # :

Boyutu sözde terminalin kendisi tarafından izlenmesi gereken ve sözde manuel olarak yeniden boyutlandırılması gerekmeyen gösterge arabelleğinin sözde dinamik dizisinin ArrayResize() işlevini reddetmek imkansızdır:

https://www.mql5.com/ru/docs/series/bufferdirection :

https://www.mql5.com/ru/docs/array/arrayisdynamic adresine gidiyoruz, kodu çalıştırıyoruz ve aniden şunu öğreniyoruz:

o:

Kitaba bakıyorum - bir incir görüyorum. Yoksa bunca zaman aldatıldık mı?

Ya da belki bir zamanlar dinamik (ilk başlatmada) ve sonra her şey mi?

22:23:17.002 Dinamik EURCAD,H1: +===========================+

0 22:23:17.002 Dinamik EURCAD,H1: 1. Dinamik diziyi kontrol etme:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 100

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Evet

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:17.002 Dinamik EURCAD,H1: 2. Statik dizi kontrolü:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 100

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Hayır

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:17.002 Dinamik EURCAD,H1: 3. Gösterge tamponunun kontrol edilmesi:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 2725

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Evet

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:24.754 Dinamik EURCAD,H1: uninit neden 1

0 22:23:24.758 Özel gösterge Dinamik EURCAD,H1: kaldırıldı

4'te.

 
x572intraday # :

Dinamik bir diziyi yalnızca bir gösterge arabelleği olarak atayarak manuel olarak yeniden boyutlandırma ihtiyacından kaçınmak istedim. Ancak, boyutu sözde terminalin kendisi tarafından izlenmesi gereken ve sözde manuel olarak yeniden boyutlandırılması gerekmeyen gösterge arabelleğinin sözde dinamik dizisinin ArrayResize() işlevini reddetmek mümkün değildir:

https://www.mql5.com/ru/docs/series/bufferdirection :

https://www.mql5.com/ru/docs/array/arrayisdynamic adresine gidiyoruz, kodu çalıştırıyoruz ve aniden şunu öğreniyoruz:

o:

Kitaba bakıyorum - bir incir görüyorum. Yoksa bunca zaman aldatıldık mı?

Ya da belki bir zamanlar dinamik (ilk başlatmada) ve sonra her şey mi?

Evet, bu o :-)

...SetIndexBuffer'dan sonra ArrayResize kullanmak artık mümkün değildir ve programın bakış açısından dizi, önceden belirlenmiş (dış kontrollü) bir boyuta sahip statiktir.

 
Alekseu Fedotov # :

22:23:17.002 Dinamik EURCAD,H1: +===========================+

0 22:23:17.002 Dinamik EURCAD,H1: 1. Dinamik diziyi kontrol etme:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 100

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Evet

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:17.002 Dinamik EURCAD,H1: 2. Statik dizi kontrolü:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 100

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Hayır

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:17.002 Dinamik EURCAD,H1: 3. Gösterge tamponunun kontrol edilmesi:

0 22:23:17.002 Dinamik EURCAD,H1: Boş bellekten önceki boyut = 2725

0 22:23:17.002 Dinamik EURCAD,H1: Bu dinamik bir dizidir = Evet

0 22:23:17.002 Dinamik EURCAD,H1: Boş hafızadan sonraki boyut = 0

0 22:23:24.754 Dinamik EURCAD,H1: uninit neden 1

0 22:23:24.758 Özel gösterge Dinamik EURCAD,H1: kaldırıldı

4'te.

Fantezi! Sihir ne? EURCAD'de kontrol ettim, H1 - tekrar "Hayır".

Ve 4 nedir? Örnekte sadece üç nokta var.

 
x572intraday # :

Fantezi! Sihir ne? EURCAD'de kontrol ettim, H1 - tekrar "Hayır".

Ve 4 nedir? Örnekte sadece üç nokta var.

Terminal MT4

 
x572intraday # :

Fantezi! Sihir ne? EURCAD'de kontrol ettim, H1 - tekrar "Hayır".

Ve 4 nedir? Örnekte sadece üç nokta var.

0 23:33:06.088 testi (EURUSD,D1) +============================+

0 23:33:06.088 testi (EURUSD,D1) 1. Dinamik bir diziyi kontrol etme:

0 23:33:06.088 testi (EURUSD,D1) Belleği boşaltmadan önceki boyut = 100

0 23:33:06.088 testi (EURUSD,D1) Bu dinamik bir dizi = Evet

0 23:33:06.088 testi (EURUSD,D1) Boş hafızadan sonraki boyut = 0

0 23:33:06.088 testi (EURUSD,D1) 2. Statik dizi kontrolü:

0 23:33:06.088 testi (EURUSD,D1) Belleği boşaltmadan önceki boyut = 100

0 23:33:06.088 testi (EURUSD,D1) Bu dinamik bir dizi = Hayır

0 23:33:06.088 testi (EURUSD,D1) Belleği boşalttıktan sonraki boyut = 100

0 23:33:06.088 testi (EURUSD,D1) 3. Gösterge arabelleğinin kontrol edilmesi:

0 23:33:06.088 testi (EURUSD,D1) Belleği boşaltmadan önceki boyut = 1054

0 23:33:06.088 testi (EURUSD,D1) Bu dinamik bir dizi = Hayır

0 23:33:06.088 testi (EURUSD,D1) Boş hafızadan sonraki boyut = 0


MT5 terminali, düşünce yok.

 
x572intraday # :

Dinamik bir diziyi yalnızca bir gösterge arabelleği olarak atayarak manuel olarak yeniden boyutlandırma ihtiyacından kaçınmak istedim. Ancak, boyutu sözde terminalin kendisi tarafından izlenmesi gereken ve sözde manuel olarak yeniden boyutlandırılması gerekmeyen gösterge arabelleğinin sözde dinamik dizisinin ArrayResize() işlevini reddetmek mümkün değildir:

https://www.mql5.com/ru/docs/series/bufferdirection :

https://www.mql5.com/ru/docs/array/arrayisdynamic adresine gidiyoruz, kodu çalıştırıyoruz ve aniden şunu öğreniyoruz:

o:

Kitaba bakıyorum - bir incir görüyorum. Yoksa bunca zaman aldatıldık mı?

Ya da belki bir zamanlar dinamik (ilk başlatmada) ve sonra her şey mi?

Tampon dizisi dinamiktir. MQL'de, dinamik diziler, onlarla çalışırken anladığım kadarıyla (süper yüksek seviyeli dillerde olduğu gibi) nesnelerin belirtilerine sahiptir. Ancak, dinamik bir dizi bildirdikten sonra onu bir arabellek olarak ilan ederseniz (SetIndexBuffer kullanarak), bu bellek alanı ayrılmış olacaktır. Bu nedenle, çoğu standart işlev boyutunu değiştiremez. Bazen nesne dizilerini gösterge arabellekleri olarak kullanırım. Ve bunu yaparsanız, bu tür dizilerin belleği nesnenin yıkıcısında serbest bırakılır. Böylece, uygulamanın (veya nesnenin) kendisi tarafından gösterge ara belleğinin serbest bırakılmasına izin verilir. Ancak bu, gösterge işlemi sırasında dizinin serbest bırakılabileceği anlamına gelmez. Her şey akılla yapılmalıdır.

 

Tünaydın

Söyle bana, bir danışman yazmaya çalışıyorum ve test sırasında bana anlaşılmaz bir şey oluyor ...

bir fonksiyon var

CalcAngleTrend( NormalizeDouble ((a[ 0 ]-a[ 1 ]), MA_DIGITS));

double CalcAngleTrend( double d)
 {
   double a = ( double ) (( atan (d* pow ( 10 , _Digits - 2 )))*( 180 / M_PI )*coefAngle);
Print ( "d: " , d);
   return ( NormalizeDouble (a, ANGLE_DIGITS));
 }

durum aşağıdaki gibidir, danışmanın bir örneği grafikte başlatılır, ikinci örnek benzer bir grafikte MT4 hata ayıklama modunda başlatılır
Fonksiyonun girdi verileri aynı, ancak çıktı farklı!!!? Sadece bir şey anlamıyorum...

Это выдает запущеный вариант:

2022.01 . 25 15 : 01 : 12.880 USDJPY,M5: d: 0.0014887
2022.01 . 25 15 : 01 : 12.880 USDJPY,M5: d: - 0.0060861
2022.01 . 25 15 : 01 : 12.880 USDJPY,M5: Angle Slow: + 1.70580000
2022.01 . 25 15 : 01 : 12.880 USDJPY,M5: Angle Fast: - 6.96560000

это в режиме отладки:

2022.01 . 25 15 : 01 : 14.330 USDJPY,M5: d: 0.0014887
2022.01 . 25 15 : 01 : 14.330 USDJPY,M5: d: - 0.0060861
2022.01 . 25 15 : 01 : 14.330 USDJPY,M5: Angle Slow: + 4.26450000
2022.01 . 25 15 : 01 : 14.330 USDJPY,M5: Angle Fast: - 17.41390000

hangi yönde bilgi kazacağımı söyle?!

Not: çıktı arasındaki farkı tam olarak 2,5 kez hesapladı
 
Владимир Казаков bir danışman yazmaya çalışıyorum ve test sırasında bana anlaşılmaz bir şey oluyor ...

bir fonksiyon var

durum aşağıdaki gibidir, danışmanın bir örneği grafikte başlatılır, ikinci örnek benzer bir grafikte MT4 hata ayıklama modunda başlatılır
Fonksiyonun girdi verileri aynı, ancak çıktı farklı!!!? Sadece bir şey anlamıyorum...

bilgi kazmak için hangi yönde söyle bana?!

Not: çıktı arasındaki farkı tam olarak 2,5 kez hesapladı

Her şey açıyı hesaplama formülüyle ilgili. Kod, amacı net olmayan, onu hesaplamak için yalnızca bir koordinat ve bir tür katsayı kullanıldığını gösterir. Neye benziyor? Açıyı hesaplamak için hangi verileri kullandığınızı bize daha ayrıntılı olarak bildirin.