Hatalar, hatalar, sorular - sayfa 2021

 

Bir hatanın çoğaltılması

  1. Metaquotes-Demo'ya gidin.
  2. Piyasa incelemesinde yalnızca AUDJPY'yi bırakın ve grafiğini açın.
  3. Terminali yeniden başlatıyoruz ve tam bir bağlantı bekliyoruz - teklifler geliyor.
  4. Komut dosyasını grafikte çalıştırın

 void OnStart ()
{  
   for ( int i = 0 ; i < 5 ; i++)
     Print ( SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE ));
}


sonuç

 2017.10 . 05 09 : 02 : 27.460 Test6 (AUDJPY,M1)       0.0
2017.10 . 05 09 : 02 : 27.460 Test6 (AUDJPY,M1)       0.0
2017.10 . 05 09 : 02 : 27.460 Test6 (AUDJPY,M1)       0.0
2017.10 . 05 09 : 02 : 27.460 Test6 (AUDJPY,M1)       0.0
2017.10 . 05 09 : 02 : 27.460 Test6 (AUDJPY,M1)       0.0


Tekrar başlat

 2017.10 . 05 09 : 02 : 32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10 . 05 09 : 02 : 32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10 . 05 09 : 02 : 32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10 . 05 09 : 02 : 32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10 . 05 09 : 02 : 32.028 Test6 (AUDJPY,M1)       0.8868393047179851


Onlar. SYMBOL_TRADE_TICK_VALUE , Sleep() yapılmadığı sürece ilk çalıştırmada sıfır döndürür;


Tehdit Piyasa İzleme'de görünmez bir sembol konusunda. Komut dosyası başlatma adımından önce USDJPY grafiğini açmaya çalışırsanız (Enter'a basın ve "USDJPY" girin), hiçbir şey çalışmayacaktır. Ve betiği çalıştırdıktan sonra - işe yarayacak. Piyasaya Genel Bakış değişmemiş olsa da.

 
fxsaber :

Bir hatanın çoğaltılması

  1. Metaquotes-Demo'ya gidin.
  2. Piyasa incelemesinde yalnızca AUDJPY'yi bırakın ve grafiğini açın.
  3. Terminali yeniden başlatıyoruz ve tam bir bağlantı bekliyoruz - teklifler geliyor.
  4. Komut dosyasını grafikte çalıştırın


sonuç


Tekrar başlat


Onlar. SYMBOL_TRADE_TICK_VALUE , Sleep() yapılmadığı sürece ilk çalıştırmada sıfır döndürür;


Tehdit Piyasa İzleme'de görünmez bir sembol konusunda. Komut dosyası başlatma adımından önce USDJPY grafiğini açmaya çalışırsanız (Enter'a basın ve "USDJPY" girin), hiçbir şey çalışmayacaktır. Ve betiği çalıştırdıktan sonra - işe yarayacak. Piyasaya Genel Bakış değişmemiş olsa da.

Bu döngüyü betiğin başına ekleyin

   for ( int i = 0 ; i < SymbolsTotal ( true ); i++)
     Print ( SymbolName (i, true ));

Ve kaç karakter yazdırılacağını görün.

İlk başlangıçta, AUDJPY'ye erişim, piyasaya genel bakışa yalnızca AUDUSD ve USDJPY ekler ve yalnızca bu çiftler aracılığıyla ikinci erişimde sembol özelliğini alır. Benim durumumda OrderCalcMargin ile ilgili soruna neden olan şey budur.

 
fxsaber :

Bu konuda defalarca yazıldı. Nedense çalışmıyorlar.

Servis masasından yanıt geldi. Tamir edecekler.
 

Herkese merhaba!

Lütfen yeni başlayan birine yardım edin.

Maksimum fiyatı arama işlevi yürütülmüştür. BAR NUMARASI'nı belirli bir maksimum fiyatla hesaplamak ve koda geri döndürmek nasıl mümkün olabilir?

 
Alexey Viktorov :

Bu döngüyü betiğin başına ekleyin

Ve kaç karakter yazdırılacağını görün.

İlk başlangıçta, AUDJPY'ye erişim, piyasaya genel bakışa yalnızca AUDUSD ve USDJPY ekler ve yalnızca bu çiftler aracılığıyla ikinci erişimde sembol özelliğini alır. Benim durumumda OrderCalcMargin ile ilgili soruna neden olan şey budur.

Sanırım bununla nasıl başa çıkacaklarına karar verecekler.

Anatoli Kazharski :
Servis masasından yanıt geldi. Tamir edecekler.

Teşekkür ederim.

 

"Etrafında" olan hatayla ilgili olarak OrderCalcMargin() , SD'de bir Başvuru yaptı

 
Kirill Belousov :

MQL4/5 yardımında doğrudan bir çelişki olduğunda emin olmak zordur:

... Unutulmamalıdır ki , parametreler fonksiyona geriye doğru iletilir , yani en son parametre ilk önce hesaplanıp iletilir, ardından sondan bir önceki parametre vb . Açılan parantezden sonra ilk gelen parametre değerlendirilir ve sırayla en son geçer.


...
x1,..., xn ifadelerinin yürütme sırasının garanti edildiğine dikkat edin .

Çelişki nedir? Öne geri - ve hepsi bu. Aksi bir açıklama yok.
 
Alexey Navoykov :
Çelişki nedir? Öne geri - ve hepsi bu. Aksi bir açıklama yok.

- Bu iki öneri ayrı yardım konularındadır.

Bölümü okuduğunuzda

"x1, x2,..., xn bağımsız değişkenleriyle bir işlevi çağırma"

x1,.....,xn ifadelerinin uygulama sırası garantilidir , o zaman hangi sırayı düşünüyorsunuz?

x1,...,xn sırası hakkında mı yoksa xn,....,x1 sırası hakkında mı?

 
Kirill Belousov :

- Bu iki öneri ayrı yardım konularındadır.

Bölümü okuduğunuzda

"x1, x2,..., xn bağımsız değişkenleriyle bir işlevi çağırma"

x1,.....,xn ifadelerinin uygulama sırası garantilidir , o zaman hangi sırayı düşünüyorsunuz?

x1,...,xn sırası hakkında mı yoksa xn,....,x1 sırası hakkında mı?

Evet, haklısın, kafa karıştırıcı.

Bununla birlikte, her durumda, algoritmanızın mantığını belirli bir argüman geçişi sırasına koymanın kötü bir uygulama olduğuna inanıyorum. Özellikle bu hesaplamaların sağdan sola yapılması kodun anlaşılmasını karıştırmaktadır. Bu nedenle, bunu uygularsanız, yalnızca yazdırma gibi kritik olmayan bazı yerlerde.

 
Kirill Belousov :

Print() içinde ifadelerin değerlendirilme sırası sağdan soladır. Öyle görünüyor ki ... Şimdilik ... Ben de önceden kontrol ettim :)

MQL5 Referansı \ Dil Temelleri \ İşlemler ve ifadeler \Diğer işlemler

x1, x2,..., xn argümanlarıyla bir fonksiyon çağırma

x1,..., xn ifadelerinin yürütme sırasının garanti edildiğine dikkat edin.

Bu, C++ satır içi anahtar sözcüğünün kullanışlılığını bir kez daha kanıtlıyor (burada eski olduğu iddia edilen bir görüş vardı).
Diğer şeylerin yanı sıra, satır içi aslında programcının işlev parametrelerinin değerlendirme sırasını kullanmayı reddettiği anlamına gelir ve derleyici işlevi satır içi yapmaya karar verirse, derleyici doğrudan değerlendirme sırasını daha verimli olarak kullanabilir (tersi değerlendirme açıkça yalnızca çağrılan işlevler için etkilidir).
Aynı zamanda, derleyici satır içi olmayan bir işlevi satır içi yapmaya karar verirse, bu, verimlilik kaybına yol açsa bile (genel) ters değerlendirme sırasını kullanmalıdır (çünkü programcı, bildirimde bulunmadan bu sıraya güvenmiştir). işlev satır içi)

değerlendirme sırasının açıkça kontrol edilemediği MQL'de satır içi de uygun olacaktır.