Yedelkin : 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:
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.
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.
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 :
voidOnStart ()
{
int A = 661701 ;
int B = A;
long C = 661701 ;
Print ( " A=" ,A, " B=" ,B, " C=" ,C);
uint X = 10000 ;
long L1 = A*X;
long L2 = B*X;
long L3 = C*X;
Print ( " L1=" ,L1, " L2=" ,L2, " L3=" ,L3);
}
/* Вывод в лог (хронология - сверху вниз):
KO 0 1 (EURUSD,M15) 00:46:28 A=661701 B=661701 C=661701
OE 0 1 (EURUSD,M15) 00:46:28 L1=2322042704 L2=2322042704 L3=6617010000
*/
Ve işte orijinal kodun çalışması:
voidOnStart ()
{
long A = 661701 ;
long B = A;
long C = 661701 ;
Print ( " A=" ,A, " B=" ,B, " C=" ,C);
long X = 10000 ;
long L1 = A*X;
long L2 = B*X;
long L3 = C*X;
Print ( " L1=" ,L1, " L2=" ,L2, " L3=" ,L3);
}
/* Вывод в лог (хронология сверху вниз):
DL 0 1 (EURUSD,M15) 00:49:13 A=661701 B=661701 C=661701
HG 0 1 (EURUSD,M15) 00:49:13 L1=6617010000 L2=6617010000 L3=6617010000
*/
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 ...
Bu makalenin yazarı olarak sizi tamamen destekliyorum. verileri kontrol etmek programın hızını bir bütün olarak kötüleştirmez, belki sadece% 0.01, böyle bir kontrol yapmadım, ancak verilerin kullanılmadan önce kontrol edilmesi gerektiği gerçeği sadece tümün kararlılığı içindir bir bütün olarak sistem, aksi takdirde terminal genel olarak çökene kadar öngörülemeyen sonuçlar olabilir.
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 * stepvolAslı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 * stepvolgumgum :
#property script_show_inputsGerç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 ...