sihirli sayı oluşturma - sayfa 4

 
7bit :

Hayır, istediğin her şey olabilirler. tıpkı yorum gibi. onları bir tür sayısal yorum olarak görün. Normal MT4 kullanıcı arayüzü ile açılan tüm manuel işlemler sihirli sayı 0'a sahip olacaktır, böylece örneğin tüm siparişleri döngüye alabilir ve tüm EA işlemlerine dokunmadan tüm manuel işlemleri ve siparişleri kapatabilir/silebilirsiniz.

Yalnızca belirli bir siparişi benzersiz şekilde tanımlamak için bilet numarası vardır.

Bunu temizlediğiniz ve görüşlerinizi paylaştığınız için teşekkür ederiz. Fwiw, çok şey öğrendim..

 
7bit :
 /**
* Rotate a 32 bit integer value bit-wise 
* the specified number of bits to the right.
* This function is needed for calculations
* in the hash function makeMacicNumber()
*/
int bitRotate( int value , int count){
   int i, tmp, mask;
   mask = MathPow( 2 , count) - 1 ;
   tmp = value & mask;
   value = value >> count;
   value = value | (tmp << ( 32 - count));
   return ( value );
}

MathPow()'a ihtiyacım yok, neden kimse bunu görmedi?
 /**
* Rotate a 32 bit integer value bit-wise 
* the specified number of bits to the right.
* This function is needed for calculations
* in the hash function makeMacicNumber()
*/
int bitRotate( int value , int count){
   int i, tmp, mask;
   mask = ( 0x00000001 << count) - 1 ;
   tmp = value & mask;
   value = value >> count;
   value = value | (tmp << ( 32 - count));
   return ( value );
}
şimdi ilk gönderiyi güncelliyoruz.
 
7bit :
MathPow()'a ihtiyacım yok, neden kimse bunu görmedi?

Akla gelen üç ana neden:

  • Halihazırda bir karma işlevi kullanan birinin, onu kodunuzla değiştirmesi pek olası değildir ve bu nedenle kodunuzun ayrıntılarını umursamayacaktır.
  • Şu anda bir karma işlevi kullanmayan, ancak bunun iyi bir fikir olabileceğini düşünen herkes, muhtemelen sizinki gibi bir kodu güven üzerine alacak ve ne kadar zarif veya optimize edilmiş olduğuna değil, yalnızca çalışıp çalışmadığına bakacaktır.
  • MathPow()'u bitsel bir işlemle değiştirmeniz, makeMagicNumber()'a yapılan çağrı başına önemli ölçüde bir milisaniyeden daha az tasarruf sağlayacaktır. makeMagicNumber() öğesinin bir EA'nın ömrü boyunca init() içinde bir kez çağrılmasını öneriyorsunuz. Bu nedenle, değişikliğiniz EA ömrü başına bir milisaniyeden daha az tasarruf sağlıyor. Bu tamamen önemsiz bir değişikliktir (ve muhtemelen kodun netliğini azaltır).
 
jjc : muhtemelen kodun netliğini azaltır

    Netliği azalttığını söyleyemem. Ana amacım performans değil, netlik, zarafet ve doğruluktur.

    Herhangi bir bitsel operatör kullanmadan gerçek bit kaydırmayı yapmak için güç, çarpma, bölme (ve modulo) da kullanabilirim. Ama zarafet (ve aynı zamanda netlik) adına, bunu ya yalnızca biri ya da diğeriyle yapmalı, ancak karıştırılmamalı. Ve işlevin anlamı bitleri kaydırmak olduğundan, yalnızca çarpmalarla bit kaydırmaları yaparsam kodu karıştırırdım.

    Ayrıca, tamsayılarla toplama ve çarpma yapılabilirken, MathPow() işlevi dahili olarak logaritma kullanır, yaklaşıklık gibi kokar ve ihtiyacım olan şeye kıyasla inanılmaz derecede karmaşıktır, kullanır ve bir çift değer döndürür ve bunun bir tamsayı ile ilgisi yoktur. yalnızca n bit kaydırması gereken işlev.

    Belki de bunu neden görmedim sorusunu sormalıydım. Neden ilk etapta MathPow()'u kullandım? bilmiyorum. En son 15 yıl önce bir montajcı yaptığımda, bugün daha yüksek soyutlamalardaki problemler hakkında düşünmeye alışığım. Belki de nedeni buydu. Beynimde bir yerde n'inci bitin 2^n olmasıyla güçlü bir bağlantı var, bunu bir saniye bile düşünmeden yazdım. Bir montajcı programcısı bunu asla yapmazdı. Sola kaydırmak 2 ile çarpmaktır, 2 ile çarpmak sola kaydırmaktır.

     
    Hey millet, neden aynı tf ve sembolü aynı ayarlarla çalıştıran birden fazla uzmana ihtiyacınız olduğunu merak ediyorsunuz?

    Kalıcılık için çözümüm, kullandığım tf'leri (10 tanesi), siparişi açan uzman sürümü veya ticaret yöntemini (bunlardan 4 tanesine sahibim) tutmak için int'nin 32 bitini kullanmaktır. Hala ihtiyacım olursa yedeklenecek çok parça var. Bunu halletmek için bitsel işlemleri ve bazı dönüştürme işlevlerini kullanıyorum. Başkalarının bunu veya buna benzer bir şey yaptığını biliyorum, ancak bu sizin durumunuz için yeterli görünmediğinden, hala kafamı sorduğum soruya sarmaya çalışıyorum.
     
    7bit :

    Ö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?

    Olmazdı, ama kullandığım para yönetimi bunu MN'ye dayandırıyor. Bu durumda, MM'nin tüm açık(ing) işlemleri hesaba katması için hepsinin aynı olmasına ihtiyacım var. Geliştirdiğim EA'nın hangi sürümü ve TimeFrame'i kullandığını ve MQL4 Strateji Test Cihazında oturum açtığını bilmek ve bunları ticaret#, döviz çifti veya yorum alanı. Günlüğü görüntülediğimde, ticaretin hangi para birimi için olduğunu söylüyor. Analiz için Excel'e aktardığımda istediğim alana göre sıralayabiliyorum.
    Yaklaşımınızın avantajlarını görebiliyorum ve gelecekte bir noktada bunu kullanabilirim. Ama bir NuB olarak MQL4.Com'daki kod tabanından MM kullanıyorum. Dolayısıyla programlama öğrenme eğrimin bu noktasında MM benim önceliğim değil. Ekleyebileceğim daha iyi bir yöntem bulabilirsem, MM öncelik listemin en üstüne çıkana kadar yapacağım, onu kullanmaya karşı değilim. Biz NuB'lerin alabileceğimiz tüm yardıma ihtiyacımız var!
    İsim ve/veya versiyon numarası ile ilgili olarak, MN sadece rakamlara izin verir, harflere izin vermez.
    Kodunuzu incelemedim, ancak algoritmanızın adı MN'nizin bir parçasına dönüştürdüğünü varsayıyorum, bu durumda hangi döviz çiftini adreslediğinizi hemen söylemez.
     
    FourX :
    algoritmanız adı MN'nizin bir parçasına dönüştürüyor, bu durumda hangi döviz çiftine hitap ettiğinizi hemen söylemez.

    Herhangi bir dizeyi güvenilir bir şekilde benzersiz bir tam sayıya dönüştürür. Bu dönüşüm tek yönlü bir yoldur, ancak asla geri dönüştürmeye ihtiyacım yok.

    Tek bilmem gereken, aynı numaraya sahip bu işlemlerin birbirine ait olduğu. Döngüde tek bir if() ile bu özel EA/sembol/TF kombinasyonunun tüm işlemlerini kolayca bulmak için yalnızca bir kimlik numarasıdır. Bu sayı hakkında bilinmesi gereken tek şey, her EA/sembol/zaman aralığı kombinasyonu için benzersiz olması ve deterministik olması ve bilgisayarımın çökmeye karar vermesi durumunda değişmeyeceğidir.

    Mantıken birbirine ait olan tüm işlemler aynı MN'ye sahip olacaktır. Daha sonra hangi sembolün yapıldığını söylemem gerekirse (örneğin ay sonunda bazı istatistikler yapmak için) bu siparişlerde basitçe OrderSymbol() kullanabilirim.

     
    circlesquares wrote >>
    Hey millet, neden aynı tf ve sembolü aynı ayarlarla çalıştıran birden fazla uzmana ihtiyacınız olduğunu merak ediyorsunuz?

    Kalıcılık için çözümüm, kullandığım tf'leri (10 tanesi), siparişi açan uzman sürümü veya ticaret yöntemini (bunlardan 4 tanesine sahibim) tutmak için int'nin 32 bitini kullanmaktır. İhtiyacım olursa hala birçok parça yedek. Bunu halletmek için bitsel işlemleri ve bazı dönüştürme işlevlerini kullanıyorum. Başkalarının bunu veya buna benzer bir şey yaptığını biliyorum, ancak bu sizin durumunuz için yeterli görünmediğinden, hala kafamı sorduğum soruya sarmaya çalışıyorum.


    Başkası adına konuşamam ama bir siparişi kapatması biraz zaman alabilen bir EA'm var ve önceki siparişten hala kapanmadığı için yeni giriş noktalarını kaçırıyor. Her girişi bağımsız olarak ele almasını ve her ticareti her ticaretin kurallarına göre takip etmesini istiyorum (sl'yi hareket ettirmek, tp'ye ilk ulaştığında yarıyı kapatmak, vb.).
     
    joetrader :


    Başkası adına konuşamam ama bir siparişi kapatması biraz zaman alabilen bir EA'm var ve önceki siparişten hala kapanmadığı için yeni giriş noktalarını kaçırıyor. Her girişi bağımsız olarak ele almasını ve her ticareti her ticaretin kurallarına göre takip etmesini istiyorum (sl'yi hareket ettirmek, tp'ye ilk ulaştığında yarıyı kapatmak, vb.).

    Anlıyorum. Yani sunucu yanıtını beklemek bağlı ve bu arada başka siparişler açabilirsiniz?

    Ancak, ticaret bağlamının meşgul olması, siparişle ilgili herhangi bir eylemi durdurmuyor mu?

    Sanırım işe yaradığı sürece, gerçekten önemli olan tek şey bu.

     

    Çok fazla sunucu yanıtı değil, sadece bir siparişin açık olması. Böylece EA bir satın alma sinyali alabilir ve satın alabilir ve ardından açık kalabilir. Birkaç saat sonra başka bir alım sinyali geliyor, ancak zaten açık bir pozisyon olduğu için ilk emri kapatmayı beklediği için alım yapmıyor. Ancak, ilk satın alma sinyalinin ikinciden daha karlı olacağını veya EA'nın ek siparişler açmasına izin vermeden önce ilkinin kapanmasını beklemekten elde edilecek bir şey olduğunu varsaymak için hiçbir neden yok. Ama hala üzerinde çalışıyorum, bu yüzden benim için hala teori. :)