[ ... Özet fonksiyonu ... ]
Kayıt için, fbj bir zamanlar iyi bilinen djb2 karma işlevini kullanarak benzer bir şey yaptı: https://www.mql5.com/en/forum/120034/page2
Yukarıdaki bağlantınızda bahsedilen djb2, etrafındaki yüzlerce satır olmadan basitçe şöyle yazılabilir:
int djb2( string key){ int i, h, k; for (i= 0 ; i< StringLen (key); i++){ k = StringGetChar(key, i); h = (h << 5 ) + h + k; } return (h); }
Yukarıdaki bağlantınızda bahsedilen djb2, etrafındaki yüzlerce satır olmadan basitçe şöyle yazılabilir: [...]
Özellikle djb2'yi bırakın, karma algoritmalar konusunda uzman değilim, ancak karma değerinin (sürümünüzdeki h değişkeni) 5381'e başlatılmasının önemli olarak kabul edildiğini hatırlıyorum, ancak kimse tam olarak neden olduğundan emin değil.
* magic = makeMagicNumber(name+ Symbol() + Period());Küçük düşürmek gibi olmasın ama bunu da kullanabilmelisin:
* magic = makeMagicNumber(WindowExpertName() + Symbol() + Period());Kodu (ve karma makaleyi!) gönderdiğiniz için teşekkür ederiz.
Soru - Aynı grafikte, aynı algoritmada vb. birden fazla siparişi açıp kapatmak için bir yöntem üzerinde çalışıyorum.
2 adımda yaklaşıyorum -
1) bir tamsayı olarak bir temel MN (yukarıdaki kodun yaptığı gibi) oluşturmak. Taban, her çizelge/sembol/zaman çerçevesi için her zaman aynı olacaktır.
2) her belirli sipariş gönderimi için ondalık nokta olarak ifade edilen belirli bir son ekin üretilmesi, bir son ek kullanılmadığında onu tekrar kullanılabilir hale getirmek
Dolayısıyla MN, XXXXXX.YYY olur, burada X taban ve Y özel sonektir. Son ekler .001 ile başlar ve her yeni gönderim için .001 ile artar. Her sipariş gönderiminde, şu anda kullanılmayan en düşük son eki atayacaktır. Bu şekilde, MN tabanını yeniden oluşturarak ve son ekler arasında dolaşarak MN'yi daha sonra alabilirim.
Biraz fazla karmaşık görünüyor. Bunu yapmanın daha iyi bir yolu var mı?
Bittiğinde elimdekileri yayınlıyorum.
EA # sürümü için sadece ilk 5 rakamı ve işlem gördüğü dakika sayısı için son 4 rakamı kullanıyorum.
Bir NuB olarak, neden 'şifreli' bir MagicNumber isteyip istemediğinizden emin değilim?
EA # sürümü için sadece ilk 5 rakamı ve işlem gördüğü dakika sayısı için son 4 rakamı kullanıyorum.
Örneğinizde Symbol() nasıl MN'nin bir parçası olur? Bir EA numaranız ve bir Zaman Çerçevesi numaranız var, peki ya sembol?
Siparişlerimi yalnızca MN ile tanımlarım, sipariş listesi üzerindeki döngülerim yalnızca OrderMagicNumber() ile karşılaştırır, sizinkilerin de sembol adını kontrol etmesi gerekir. Sipariş listesiyle bir şeyler yapan birkaç başka bağımsız komut dosyam var, örneğin, EA'ların hisse senedi arsalarını çizin veya alım satımları başka bir platforma kopyalayın, belirli bir Çiftte belirli bir EA'nın alım satımlarını tanımlamak için hepsinin yalnızca sihirli sayıya ihtiyacı var ve belirli bir Zaman Çerçevesi.
Farklı EA'larım için hiç seri numaraları kullanmıyorum, tüm EA'larım için 4 veya 5 harflik kısa adlar kullanıyorum. Örneğin, snowball.mq4 adlı bir EA "snow" adını alır. Bu, kodda sabittir ve asla değişmez. Bu kısa adı sipariş yorumları için de kullanıyorum.
Yani 3 şeyim var: kısa isim, Sembol ve zaman dilimi. Bunu bir MN'ye dönüştürmenin en uygun yolu bir karmadır. EA'larım için isimler yerine numaralar verebilirdim ama yine de sembol adını bir sayıya dönüştürmenin kolay bir yolu olmazdı. Bir Hash, tüm bu sorunları bir kerede çözer.
Bir NuB olarak, neden 'şifreli' bir MagicNumber isteyip istemediğinizden emin değilim?
EA # sürümü için sadece ilk 5 rakamı ve işlem gördüğü dakika sayısı için son 4 rakamı kullanıyorum.
Bunu da görmelisiniz -> https://www.mql5.com/en/forum/120034
Tüm bu yaklaşımla ilgili sorunum, bazen aynı hesapta çalışan aynı uzman/sembol/zaman çerçevesine sahip olmam. Sonunda yine de bir şeyi manuel olarak değiştirmek zorunda kalacağım, bu yüzden sihrin kendisini manuel olarak ayarlamayı tercih ediyorum.
Tüm bu yaklaşımla ilgili sorunum, bazen aynı hesapta çalışan aynı uzman/sembol/zaman çerçevesine sahip olmam. Sonunda yine de bir şeyi manuel olarak değiştirmek zorunda kalacağım, bu yüzden sihrin kendisini manuel olarak ayarlamayı tercih ediyorum.
Saniye kullanmaya ne dersiniz? TimeCurrent(), her zaman benzersiz olacak bir sayı döndürür - en azından bu saniye aralığının dışında.
- Uzmanınız için bir GlobalVariable Kimlik Numarası atayın. WindowExpertName() ile döndürün.
- Bu kimliği bir artış sayacıyla (aynı uzmanı eklemeniz gerekir) ve TimeCurrent () ile birleştirin
- TimeCurrent() tarafından döndürülen sayı izin verilen boyutu aşarsa. Ardından gün, saat, dakika ve saniye modülünü elde edene kadar yıl ve ay miktarını atın.
Saniye kullanmaya ne dersiniz? TimeCurrent(), her zaman benzersiz olacak bir sayı döndürür - en azından bu saniye aralığının dışında.
- Uzmanınız için bir Kimlik Numarası atayın. WindowExpertName() ile döndürün.
- Bu kimliği bir artış sayacı ve TimeCurrent () ile birleştirin
- TimeCurrent() tarafından döndürülen sayı izin verilen boyutu aşarsa. Ardından gün, saat, dakika ve saniye modülünü elde edene kadar yıl ve ay miktarını atın.
Çünkü o zaman o sihir için bir kalıcılık seviyesini korumanız gerekir. Terminaliniz yeniden başlatılırsa ne olur? Büyü farklı olurdu...
Çünkü o zaman o sihir için bir kalıcılık seviyesini korumanız gerekir. Terminaliniz yeniden başlatılırsa ne olur? Büyü farklı olurdu...
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz