![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Sipariş penceresindeki (F9) enstrüman listesini nasıl alacağımı söyle?
Eleman sayısını alıyorum, ancak tam olarak satırları sayıya göre alamıyorum, -1 döndürüyor.
#define ID_SYMBOL 0x053E //seçilecek sembol adı
cm tutamaç ComboBox
Alexey, teşekkürler, işlev çalışıyor, ama ..
Yalnızca iş parçacığı kimliği gereklidir, çünkü İki terminalim var.
Başlık tanımlamasından çıktım, ancak yine de test cihazının altından iş parçacığı kimliğini nasıl belirleyeceğimi bilmek ister miyim?
Herhangi bir metin almadan önce, bu metni alacak kadar büyük bir arabellek hazırlamanız gerekir. ......
BU ARADA!!!
İşlevini ihtiyaçlarıma göre uyarladığımda
işlev düzeyinde yerel olarak bildirilen dize arabelleği dizesi textbuf'un ilk çağrıda yalnızca bir kez başlatıldığı gerçeğiyle karşı karşıya kaldığında,
ve bundan böyle statik bir değişken gibi davranır.
Bu durumu yorumlayabilir misiniz?BU ARADA!!!
İşlevini ihtiyaçlarıma göre uyarladığımda
işlev düzeyinde yerel olarak bildirilen dize arabelleği dizesi textbuf'un ilk çağrıda yalnızca bir kez başlatıldığı gerçeğiyle karşı karşıya kaldığında,
ve bundan böyle statik bir değişken gibi davranır.
Bu durumu yorumlayabilir misiniz?Ne hakkında olduğu anlaşıldı. GetText'ten alınan eski değerin arabellekte saklandığını kastetmiştiniz. Beni de şaşırttığını hatırlıyorum. Ancak bunlar MQL'nin özellikleridir. Forumda bir yerde, geliştiriciler derleyici düzeyinde ayarlanan tüm sabit dizelerin bellekte kalıcı olarak ayrı bir yerde saklandığını ve işlevden çıkarken kaybolmadığını (üzerine yazılmadığını) söyledi. Adresleri başlangıçta bilinir ve program çalışırken değişmez. Bu nedenle fonksiyon tekrar çağrıldığında, aynı sabit dizgeye erişildiğinde aynı adresten alınır. Ama orada zaten GetText işlevi tarafından yerleştirilmiş farklı bir metnimiz var.
Benzer şekilde, basitçe Print("Abvgdeziyklmnoprstu") yapabilirsiniz ve orada da farklı bir metin alırsınız :) I.e. bu textbuf değişkeniyle ilgili değil, sabit dizeyle ilgili. Derleme aşamasında, tüm sabit diziler kontrol edilir ve olduğu gibi veritabanına yerleştirilir ve yalnızca benzersiz dizeler. Aynı satırlar bulunursa, bunlar için veritabanında yalnızca bir ortak örnek oluşturulur. Buna göre, işlem sırasında bu örneği bozarsanız, programın herhangi bir yerinden böyle bir hatta yapılan tüm çağrılar da bozuk bir sonuç döndürür.
Bu size uymuyorsa, programlı olarak bir arabellek oluşturabilirsiniz:
O zaman böyle bir sorun olmayacak. Doğrusu bunu yapmanın mümkün olup olmadığını hatırlamıyorum. Depolamaya erişim hataları olup olmayacağı... Deneyin.
O zaman böyle bir sorun olmayacak. Doğrusu bunu yapmanın mümkün olup olmadığını hatırlamıyorum. Depolamaya erişim hataları olup olmayacağı... Deneyin.
"255 karakterin ekrana sığmadığı ve forumun görüntüsünün bozulduğu" gerçeğini okuduğumda - tam da bunu yaptım.
Ama bu seçenek işe yaramadı, API işlevi hiçbir şey döndürmedi... Bu yüzden seçeneğinizi bıraktım.
......
Her neyse, başka bir ayrıntılı cevap için çok teşekkür ederim.
"255 karakterin ekrana sığmadığı ve forumun görüntüsünün bozulduğu" gerçeğini okuduğumda - tam da bunu yaptım.
Ama bu seçenek işe yaramadı, API işlevi hiçbir şey döndürmedi... Bu yüzden seçeneğinizi bıraktım.
......
Her neyse, başka bir ayrıntılı cevap için çok teşekkür ederim.
Rica ederim.
Anladığım kadarıyla nedeni, bu durumda işleve, değişkene ait orijinal metin arabelleğine değil, kopyasına, yani kopyasına bir referans iletilmesidir. işlev çağrılmadan önce oluşturulan geçici arabellek. Buna göre, işlev bu arabellekteki metni değiştirse bile, orijinal arabellek değişmeden kaldığı için hiçbir şey vermez. Ve işlev çıktığında geçici arabelleğe yapılan başvuru kaybolur. Bir keresinde bir dizenin DLL'ye aktarılmasıyla bunun yüzünden acı çektim. Ama bir çözüm var. Dize dizisinin bir öğesini işleve iletmeniz gerekir. Bu durumda, ara arabellek oluşturulmaz ve işlev, orijinal arabelleğe bir bağlantı alır.
Bu şekilde çalışması gerekir.
Normalde uzunluğu alıyorum ama metni alamıyorum :-(
dizenin nasıl düzgün şekilde başlatılacağını açıklayın ve bunu harici bir dll olmadan uygulamak genellikle mümkün müdür?
bu, araçlar listesinde sembolü bulmak ve seçmek için gereklidir.
Normalde uzunluğu alıyorum ama metni alamıyorum :-(
dizenin nasıl doğru şekilde başlatılacağını açıklayın ve bunu harici bir dll olmadan uygulamak genellikle mümkün müdür?
bu, araçlar listesinde sembolü bulmak ve seçmek için gereklidir.
Dizenin başlatılmasına gelince, bir keresinde bir arkadaşım kemente bir önceki mesajımda açıkladım. Ya dize dizisinin bir öğesini kullanmanız ya da dize değişkenini yeterli uzunlukta bir sabitle başlatmanız gerekir. Sizin durumunuzda, elde edilen dizenin boyutunun 78 baytı geçmeyeceği önceden bilindiği için bir sabit kullanmak daha kolaydır:
12 bayt (enstrüman ticker) + 2 bayt (virgül ve boşluk) + 64 bayt (tam enstrüman adı) . Bu, mümkün olan maksimum dizi uzunluğudur. 80'e kadar yuvarlayabilirsiniz.
Ancak listedeki belirli bir aracı SEÇMEK istiyorsanız, adını almanıza gerek yoktur. CB_SELESTRING mesajını kullanmanız yeterlidir. Orada, bir dize parametresi olarak, adın yalnızca ilk bölümünü ("EURUSD") göndermeniz yeterlidir ve listeden uygun öğeyi bulup seçecektir.
Yakın Gelecek Milyon Dolarlık Robot API: Terminalde bir sürü karlı ticaret çekiyor... :) ve yeni bir milyoner bir veya iki ay içinde komisyoncudan kar çekmeye çalıştığında, tek bir tane olmadığını öğreniyor. ticaret... danışman bitti... :))))))))))
Arkadaşlar lütfen Sipariş penceresindeki Al/Sat butonlarının tutamaçlarını tanımlamama yardım edin. Tutamacı Sipariş penceresinden buldum:
Sonra düğme tutamağını belirlemeye çalışıyorum (örneğin Bai), ancak yanıt olarak 0 alıyorum.
En ilginç şey, " Hemen yürütme " kutusundaki herhangi bir öğeden tutamacı bulmanın mümkün olmamasıdır. Ve Anında Gerçekleştirmenin kendisinden de bulunamaz. WinSpy++ onu ayrı bir öğe olarak görmesine ve bunun için 0xFFFF kimliğini göstermesine rağmen.
Lütfen kesinlikle yargılamayın, ben bir acemiyim.