"Expert Advisor yazarken MQL5 Standard Alım Satım Sınıfı kitaplıklarının kullanımı" makalesi için tartışma - sayfa 2
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Neyi yanlış yapıyorum? Teklif neden yazdırılmıyor?
İşte çalışma kaydı
2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
İşte kod
my_symbol.Refresh();\ yerine \my_symbol.RefreshRates();\ kullanın. O zaman çalışır!
Teşekkürler.
Bu muhtemelen geliştiricilere veya Yardım'ı yazan kişiye yönelik bir sorudur.
Makale şöyle diyor
mysymbol.Refresh()
Yenilemek için kullanılır tüm veriler bir sembol için. Bir sınıf için yeni bir sembol adı belirttiğinizde, otomatik olarak çağrılır.
mysymbol.RefreshRates()
Tırnak işaretlerini güncellemek için kullanılır. Yeni bir sembol belirlendiğinde otomatik olarak çağrılır.
1. Tüm verilerin olmadığı ortaya çıktı mı?
2. Yeni bir sembol belirtmek ile yeni bir sembol ayarlamak arasındaki fark nedir?
3. Otomatik olarak kelimesini anlamıyorum. my_symbol.Name(_Symbol) komutuyla bir sembol ayarlamış gibi görünüyorum, ancak güncelleme gerçekleşmedi....
Makalede şöyle deniyordu
mysymbol.Refresh()
Yenilemek için kullanılır tüm veriler bir sembol için. Bir sınıf için yeni bir sembol adı belirtildiğinde, bu sembol otomatik olarak çağrılır.
mysymbol.RefreshRates()
Kotaları yenilemek için kullanılır. Yeni bir sembol ayarlandığında, otomatik olarak çağrılır.
1. Görünen o ki tüm veriler ?
2. Yeni bir karakter belirtmek ile yeni bir karakter ayarlamak arasındaki fark nedir?
3. Otomatik olarak kelimesini anlamıyorum. Sembolü my_symbol.Name(_Symbol) komutuyla ayarlamış gibi görünüyorum, ancak güncelleme gerçekleşmedi....
Makalenin yazarından veya referans kitabın yazarından bir cevap beklemek zorunda olmadığınız o nadir an :) RefreshRates() işlevinin, "belirtilen sembol için güncel fiyatları MqlTick türünde bir değişkende döndüren" SymbolInfoTick() işlevini tamamen kopyaladığını görmek için kaynak koda bakmak yeterlidir . Bu nedenle, yazarlar " fiyat tekliflerini güncellemek hakkında" derken, aslında MqlTick türünde bir değişkenin değerlerini güncellemekten bahsediyorlar .
2. Kaynak kodunda böyle bir satır var
Bu, Name() işlevi çağrıldığında yalnızca Refresh() işlevinin otomatik olarak etkinleştirildiğini gösterir. Name() işlevi çağrıldığında RefreshRates() işlevinin otomatik olarak etkinleştirilmesi hakkında herhangi bir bilgi bulamadım. Bu nedenle, "bugün itibariyle" Name() işlevi için bir sembol değişikliğinin RefreshRates() işlevini otomatik olarak etkinleştirmediği ortaya çıkıyor. MqlTick tipi değişkenin ("tırnakları yenile") değerlerini bağımsız olarak ve zorla güncellememiz gerekecektir.Neyi yanlış yapıyorum? Teklif neden yazdırılmıyor? İşte çalışma günlüğü 2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
İşte kod
İşte Teklif değerinin neden sıfır olarak yazdırıldığının yanıtı. Kaynak kod, Bid() fonksiyonunun şu satırla tanımlandığını gösterir
Böylece, Bid() fonksiyonunun değeri MqlTick tipindeki bir değişkenin elemanlarından birinin değerine bağlanır. Ve bu değişken, bir sembol değiştirildiğinde otomatik olarak değil, RefreshRates() fonksiyonunun ek bir çağrısıyla güncellenir. Kodunuzda, Refresh() işlevi çağrılır - aslında, iki kez çağrılır (Name() işlevinin gövdesi dikkate alınarak) - ve RefreshRates() işlevi bir kez çağrılmaz.
Belki deRefresh () fonksiyonunun son kısmınaRefreshRates( ) çağrısını ekleyerek kodu geliştirebilirsiniz. o zaman tüm veriler gerçekten güncellenecektir.....
Name() fonksiyonuna RefreshRates() çağrısını ekledim. Ancak yine de - bunlar bireysel bir kullanıcının ihtiyaçları için yapılan yamalar.
Ancak geliştiriciler Refresh() işlevini başka yerlere de koyarlarsa (kendi takdirlerine bağlı olarak) çoğu kullanıcı için normal bir çözüm olacaktır.
Yenile'nin tüm verileri güncellediğini söylersek , o zaman tüm veriler gerçekten güncellenmelidir. IMHO
Ancak geliştiriciler bunu Refresh()'e ve diğer yerlere (kendi takdirlerine bağlı olarak) koyarlarsa, çoğu kullanıcı için normal bir çözüm olacaktır.
Yenile'nin tüm verileri güncellediğini söylersek , o zaman tüm veriler gerçekten güncellenmelidir. IMHO
Bu konuda bir tartışma yok. Ancak yine de kullanıcılar için normal çözüm, mevcut tasarımların ve özelliklerinin açık ve anlaşılır bir şekilde tanımlanması olacaktır. O zaman kullanıcı bu yapıları nasıl kullanacağını kendisi bulacaktır. Ve böyle bir çözüme ulaşmak çeşitli nedenlerden dolayı zor olduğundan, kendilerine ve başkalarına ek sorular soranlar ilerleyecektir :)
Bilmiyorum, ben standart kütüphaneyi sadece çalışma amaçlı kullanıyorum. Tüm projelerimi kendi bileşenlerim üzerine yazıyorum.
Yapıcılar daha kullanışlı hale gelene kadar bekleyeceğim, sonra standart kütüphaneden tamamen vazgeçeceğim....
Bu arada, CHistoryOrderInfo sınıfının aşağıdaki gibi birkaç satıra sahip olduğunu öğrendim
return(FormatType(str,Type())); ... FormatType(type,Type())Ancak Type() işlevi sınıfta bulunmamaktadır.