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
simpleton , ben de benzer bir yol izledim, ancak int yazmak için açık bir döküm kullandım. Mümkün olan maksimum lot büyüklüğünün ya komisyoncu/bayi tarafından ya da özkaynak büyüklüğü ile sınırlandırılacağı gerçeğinden yola çıktım. Bu bağlamda int kullanımı yeterli olacaktır. Bu yaklaşımla ilgili herhangi bir tuzak olduğunu düşünüyor musunuz ("aşağıdan" int ile yuvarlama)?
Gerçek ticaret için büyük olasılıkla - evet, int / uint yeterlidir.
Ancak test cihazına girerseniz, bazı deneyler için yeterli olmayabilir.
Formüldeki N tamsayısının 0..INT_MAX aralığına düştüğünü garanti ederseniz ve böylece taşma olmadığını garanti ederseniz, int kullanırken MQL5 uygulamasında olası sonraki hatalar dışında hiçbir tuzak yoktur. Yani, çeki değiştirin
tmp < ULONG_MAX * stepvol
üzerinde
tmp < INT_MAX * stepvol
Aslında, int türü işaretlidir, olası değerlerinin yarısı negatif sayılar bölgesinde bulunur ve burada her zaman negatif olmayanlar olacaktır. Aynı boyutta ancak negatif olmayan aralığın iki katı olan işaretsiz bir uint'iniz olduğunda int kullanmak mantıklı değildir. Bu nedenle, int / uint'te durursanız, sırasıyla uint'i seçmek ve kontrolü aşağıdakilerle değiştirmek daha iyidir:
tmp < UINT_MAX * stepvol
gumgum :
#property script_show_inputs
Gerçek ticaret için büyük olasılıkla - evet, int / uint yeterlidir.
..Aslında, int tipi işaretlidir, olası değerlerinin yarısı negatif sayılar bölgesinde bulunur ve burada her zaman negatif olmayanlar olacaktır. Aynı boyutta ancak negatif olmayan aralığın iki katı olan işaretsiz bir uint'iniz olduğunda int kullanmak mantıklı değildir. Bu nedenle, int / uint'te durursanız, sırasıyla uint'i seçmek ve kontrolü aşağıdakilerle değiştirmek daha iyidir:
Bu bir hata değil, türler hakkında ilginç bir gözlem uyarısıdır.
Kaçın iki katı olacağını düşünüyorsunuz, yani. 2*2
4 düşün belki haklısın!
tamam peki
iki yüz bin iki yüz bin
200000 * 200000
Evet, herhangi bir öğrenci ikiyi çarpar ve dört alır Evet, sıfırları toplayın ve
400000000000.
Ve şimdi makinenin dilinde basit bir kod
uzun partiler = 200000*200000;
değeri alan değişkenin türünün uzun olduğuna dikkat edin.
Minimum değer -9 223 372 036 854 775 808, maksimum değer 9 223 372 036 854 775 807'dir.
Sonucu yazdırıyoruz ve
lot = 1345294336
iki ve ikiden çok uzakta ve iki tane olacak.
Tipler ve tip döküm hakkında yardım bölümünü yeniden okudum.
Sıradan sayıların da açıkça istenen türe dönüştürülmesi gerektiğine dair hiçbir bilgi bulamadım.
yani doğru olmalı
uzun partiler = (uzun) 200000 * (uzun) 200000;
Alternatif olarak, yardımcı değişkenleri de kullanabilirsiniz.
Üstelik.
Bazı özellikleri büyük sayılarla almak ve çarpmak istiyorsanız ....
İşte kod
Ve işte sonuç
girdi aynı ama sonuç farklıSHOOTER777 :
Ve şimdi makinenin dilinde basit bir kod
uzun partiler = 200000*200000;
değeri alan değişkenin türünün uzun olduğuna dikkat edin.
Minimum değer -9 223 372 036 854 775 808, maksimum değer 9 223 372 036 854 775 807'dir.
Sonucu yazdırıyoruz ve
lot = 1345294336
iki ve ikiden çok uzakta ve iki tane olacak.
Tipler ve tip döküm hakkında yardım bölümünü yeniden okudum.
Sıradan sayıların da açıkça istenen türe dönüştürülmesi gerektiğine dair hiçbir bilgi bulamadım.
yani doğru olmalı
uzun partiler = (uzun) 200000 * (uzun) 200000;
Alternatif olarak, yardımcı değişkenleri de kullanabilirsiniz.
"Normal sayılar", aynı zamanda bir türü olan sabit ifadelerdir. Bu durumda, tür int'dir.
Her biri int türünden iki alt ifadenin çarpımından oluşan bir ifade de int türündedir. Taşma burada gerçekleşir.
Ve ancak o zaman, long tipinde bir değişken başlatılırken, int tipinden long tipine örtük bir döküm yapılır.
Burada her şey temiz. Bu arada, bu durumda işlenenlerin her birini uzun türe dökmek gerekli değildir. Birini vermek yeterlidir, ikincisi ise dolaylı olarak verilecektir.
Üstelik.
Bazı özellikleri büyük sayılarla almak ve çarpmak istiyorsanız ....
İşte kod
Ve işte sonuç
girdi aynı ama sonuç farklıGünlük ve kod karıştırılmış gibi görünüyor. Verilen kod "temiz" çalışır. Ve böyle bir günlük elde etmek için, int veya uint türünün A ve B değişkenlerini ve uint türünün X değişkenini yapmak zorunda kaldım :
Ve işte orijinal kodun çalışması:
314 oluşturun (20 Ağu 2010).
Söyle bana, örneğin, bir göstergenin değerini almanız gerekiyor. Önceden, tam olarak aldım ve yerleşik bir işlev kullanarak garanti ettim. Şimdi bir sürü kod kullanarak kendim yazmam, arabellekleri işlemem vb. Ancak! Bu durumda değil. Benim için asıl önemli olan, kodun her satırda kelimenin tam anlamıyla buggy olması, çünkü bunu her kod satırında bir hata olup olmadığını kontrol etmeniz gerekiyor ... Ve genel olarak, tüm bu zil ve ıslıkların, sınıfların ve temel olan ancak hızı, güvenilirliği vb. artırmak için zahmetli ve zahmetli hale gelen şey... 20 sinyalle ilgili bir makale okuyorum... şöyle diyor:
"Gösterge verilerine, oluşturulduktan hemen sonra erişemezsiniz, çünkü gösterge değerlerinin hesaplanması biraz zaman alır ve bu nedenle OnInit() içinde gösterge tanıtıcıları oluşturmak en iyisidir."
Ardından, her satır kontrol edilir
"Onları kontrol edelim: İhtiyacımız olandan daha az veri varsa, kopyalama sırasında bir hata oluştu ve verilerin saklanması gereken diziye daha fazla erişim bir hataya yol açacaktır. Bunu hariç tutmak için fonksiyondan çıkacağız. "
Yani, sonuç almak için hız yerine bir şey yapmalıyım, bu fonksiyon boyunca döngü (kaç kez?) ... Bu, her değer için ayrı bir işlevdir... Çok fazla değişken ve kod var...
Kısaca açıklayın, bir bağlantı verin, tüm bunların anlamını, bunun neden böyle olduğunu ve ne kadar güvenilir olduğunu anlamak istiyorum ...
Ve bu tür soruların cevaplarını referansın MKL4'ten MKL5'e geçiş bölümüne koymak veya forumda tartışmasız, özellikle bir soru-cevap ve neden böyle olduğunu açıklayan uygun bir bölüm oluşturmak güzel olurdu. ...mesela burada dönemle ilgili çok net bir şekilde anlatılmış, burada da aynı şekilde, temel sorulara cevap almak istiyorum.
Söyle bana, örneğin, bir göstergenin değerini almanız gerekiyor. Önceden, tam olarak aldım ve yerleşik bir işlev kullanarak garanti ettim. Şimdi bir sürü kod kullanarak kendim yazmam, arabellekleri işlemem vb. Ancak! Bu durumda değil. Benim için asıl önemli olan, kodun her satırda kelimenin tam anlamıyla buggy olması, çünkü bunu her kod satırında bir hata olup olmadığını kontrol etmeniz gerekiyor ... Ve genel olarak, tüm bu zil ve ıslıkların, sınıfların ve temel olan ancak hızı, güvenilirliği vb. artırmak için zahmetli ve zahmetli hale gelen şey... 20 sinyalle ilgili bir makale okuyorum... şöyle diyor:
"Gösterge verilerine, oluşturulduktan hemen sonra erişemezsiniz, çünkü gösterge değerlerinin hesaplanması biraz zaman alır ve bu nedenle OnInit() içinde gösterge tanıtıcıları oluşturmak en iyisidir."
Ardından, her satır kontrol edilir
"Onları kontrol edelim: İhtiyacımız olandan daha az veri varsa, kopyalama sırasında bir hata oluşmuş demektir ve verilerin saklanması gereken diziye daha fazla erişim, bir hataya yol açacaktır. Bunu ortadan kaldırmak için fonksiyondan çıkacağız. "
Yani eninde sonunda sonuca varmak için hız yerine bu fonksiyon üzerinden bir döngü (kaç kere?) yapmalıyım... Ve periyodik olarak farklı göstergelerin tek tek satırlarının ayrı değerlerine ihtiyacım olursa.. .Bu her değer için ayrı bir fonksiyondur... Çok fazla değişken ve kod var...
Kısaca açıklayın, bir bağlantı verin, tüm bunların anlamını, bunun neden böyle olduğunu ve ne kadar güvenilir olduğunu anlamak istiyorum ...
Ve bu tür soruların cevaplarını referansın MKL4'ten MKL5'e geçiş bölümüne koymak veya forumda tartışmasız, özellikle soru-cevap ve neden böyle olduğunu açıklayan uygun bir bölüm oluşturmak güzel olurdu. ...mesela burada dönemle ilgili çok net bir şekilde anlatılmış, bu şekilde aynı şekilde, temel sorulara cevap almak istiyorum
Daha güvenilir? Başlatma sırasında tanıtıcı almak neden güvenilir değil? Gerekli verileri kontrol etmek neden güvenilir değil? Ve dahası, çeklerin varlığı neden güvenilir değil?
Yeni başlayanlar için o kadar kolay olmayabilir, ancak zamanla her şey netleşecek ...
Daha güvenilir? Başlatma sırasında tanıtıcı almak neden güvenilir değil? Gerekli verileri kontrol etmek neden güvenilir değil? Ve dahası, neden çeklerin varlığı güvenilir değil?
Yeni başlayanlar için o kadar kolay olmayabilir, ancak zamanla her şey netleşecek ...