Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 203

 
 

"{ ... }" başlatma dizilerini genişletiyoruz, bir sonraki derlemede sadece sabit bir ifadeyi değil, herhangi bir ifadeyi kullanmasına izin verilecek.

Bu değişiklik yerine, numaralandırmalar için sabitlerin kullanımı konusunda da bir kısıtlama olacaktır (düzenli bir ifadede olduğu gibi): sabit numaralandırmaya dahil edilmemişse, uygun bir hata üretilecektir.

Mevcut kodların analizi, bir sıfır dizisinin genellikle yanlış kullanıldığını gösterdi - "{0}"

Örneğin şöyle:

 MqlTradeRequest request={ 0 };


Böyle bir kayıt, yapının ilk alanı için değeri sıfıra ayarlamak ve geri kalan alanları sıfıra ayarlamak anlamına gelir.

Yukarıdaki kod satırı için yeni kurallara göre bir hata üretilecektir, çünkü ilk alan türdedir ENUM_TRADE_REQUEST_ACTIONS , "0" değeri eksik bir numaralandırma

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Şu şekilde doğru olacaktır:

 MqlTradeRequest request={};
 
Ilyas :

Şu şekilde doğru olacaktır:

 MqlTradeRequest request={};

Peki request.action neye eşit olacak?

 
mktr8591 :

Peki request.action neye eşit olacak?

Tabii ki Zero, bu yapının bir nesnesine ZeroMemory çağrılmış gibi

 

Zaman serilerinin ve üzerlerinde oluşturulan göstergelerin senkronizasyonu hakkında:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Slava , 2021.05.29 18:16

Hatırlatmak isterim.

1. En az bir grafiğin açık olduğu her bir sembol için, gelen onay işaretlerini işlemek için ayrı bir iş parçacığı çalışır. Belirli bir sembol için birkaç çizelge açılabilir, ancak akış yine aynı olacaktır.

2. Sembol akışı çizelgeleri değil, zaman serilerini işler. Yani, CopyRates isteğine verilen veri dizileri

3. Sembolünüze OnTick veya OnCalculate'de senkronize olup olmadığını sormanın faydası yoktur. Tabii ki evet!

4. Tüm zaman serileri, en küçüğünden en büyüğüne doğru sırayla işlenir. Önce bir onay işareti uygulanıyor, ardından bu zaman serisinde oluşturulan tüm göstergeler hesaplanıyor. M1 üzerinde çalışan bir göstergeden aynı H1 sembolü için veri isterseniz, uygulanan onay işaretiyle asla veri alamazsınız. Hangi hileleri kullanırsanız kullanın, veriler her zaman bir tık geri olacaktır. Çünkü zaman dilimlerinin sıralı işlenmesiyle sembol başına bir iş parçacığı.

5. Önceki ifade, Uzman Danışmanlar ve komut dosyaları için geçerli değildir, çünkü Uzman Danışmanlar ve komut dosyaları her biri kendi ayrı iş parçacığında çalışır.


 
Andrey Khatimlianskii :

Zaman serilerinin ve üzerlerinde oluşturulan göstergelerin senkronizasyonu hakkında:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Slava , 2021.06.01 06:34

İlk istekte, gösterge sembolünden veri almayabilir, ancak yalnızca bir nedenden dolayı farklı bir zaman çerçevesi alabilir - gerekli zaman serisi henüz oluşturulmamıştır veya talep olmadığında bir süre geçtikten sonra zaten yok edilmiştir.

Başarısız bir istekten sonra , grafiğinize bir güncelleme komutu göndermeniz ve OnCalculate'den hemen çıkmanız yeterlidir. OnCalculate'in aranacağı ve bu ana kadar gerekli zaman serilerinin hazırlanacağı garanti edilir.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2017.11.30 09:48

hafıza

Eylem/program türü TF veya sembolü değiştir hesap değişikliği
Gösterge OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değiştirilir (sabit yeniden yükleme). Ön_hesaplananı sıfırlamaktan başka bir şey olmaz.
danışman OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değişmez . OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değiştirilir (sabit yeniden yükleme).
Göstergelerin vurgulanan davranışı değişti. Şimdi danışmanla çakışıyor.
 
fxsaber :
Göstergelerin vurgulanan davranışı değişti. Şimdi danışmanla çakışıyor.

Sonuç olarak farklı - belki bu bir gözden kaçırmadır ve davranışta bilinçli bir değişiklik değildir? Tanıdın mı?

 
Artyom Trishkin :

Sonuç olarak başka bir şey var - belki bu bir gözden kaçmadır ve davranışta bilinçli bir değişiklik değildir? Tanıdın mı?

Tanımadım. Neredeyse hiç geri bildirim yok. Ancak burada yeni öğrendiğim bir özellik var.

 const bool Init = EventSetMillisecondTimer ( 1 );
const long Account = AccountInfoInteger ( ACCOUNT_LOGIN );

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnTimer ()
{
   if (Account != AccountInfoInteger ( ACCOUNT_LOGIN ))
     Alert (TOSTRING(Account) + TOSTRING( AccountInfoInteger ( ACCOUNT_LOGIN )));
}

Bu EA, hesaplar arasında geçiş yaparken uyarı verir. Kurala göre bunu yapmaması gerekiyor gibi görünüyor.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2017.11.30 09:48

hafıza

Eylem/program türü TF veya sembolü değiştir hesap değişikliği
Gösterge OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değiştirilir (tam yeniden yükleme). Ön_hesaplananı sıfırlamaktan başka bir şey olmaz.
danışman OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değişmez . OnDeinit ve OnInit çalıştırıldığında, global sınıf nesnesi değiştirilir (tam yeniden yükleme).
Ancak, bu zamanlayıcıdan kaynaklanmaktadır.
 
fxsaber :

Bu EA, hesaplar arasında geçiş yaparken uyarı verir. Kurala göre bunu yapmaması gerektiği anlaşılıyor.

Ancak, bu zamanlayıcıdan kaynaklanmaktadır.

Hiç kimse diğer olay işleyicilerinin kesintiye uğrayacağını (veya çalıştırılmayacağı) garanti etmedi.

Uyarıdan sonra hem deinit hem de init gerçekleşir, değil mi?

Neden: