[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 396

 
rajak :

Herkese iyi!

Söyleyin bana, belki birileri bunun ne tür bir sorun olduğunu biliyordur, derlendikten sonra ex4 dosyası da metalang yoluyla görünmüyor. Bunlarla ne yapabilirim ve birkaç gün önce her şey yolunda gitti.

Derleme hatasız ve kasıtlı olarak tanıtsanız bile çalışır.

Windows7'niz varsa, sanal klasörde arama yapmayı deneyin.

c:\Users\Klasörünüz\AppData\Local\VirtualStore\Program Files (x86)\MT4 folder\experts\

Klasörünüz ve Klasör MT4 yerine gerçek dizinlerinizi değiştirin.

 
lottamer :

Bir zamanlar burada kibar insanlar, "son kapatılan pozisyonun dönüş bileti" fonksiyonundan "son iki kapanan pozisyonun dönüş biletleri" fonksiyonunun nasıl yapılacağını önerdiler.

Ve "üç kapalı pozisyonun biletleri" işlevine ihtiyacım olduğunda, (benzerlik ve seçim yöntemini kullanarak) uygulayamadım.

yardım lütfen,

Bunların iki nüsha olduğu, ikincisi bazı değişikliklerle birlikte görülebilir. ama onlara devam edebildim...

3. bilet için bu seçeneğim var .. ve nedense ilk pozisyonun biletini tekrar veriyor ...


Yer değiştirmek

 if (OrderTicket()==A && (OrderTicket()==B) ) continue ;

üzerinde

 if (OrderTicket()==A || (OrderTicket()==B) ) continue ;

Sadece bir fonksiyondan üç değer döndürmek için yaptığınız işlemler net değil

 
Roger :


Yer değiştirmek

üzerinde

Sadece bir fonksiyondan üç değer döndürmek için yaptığınız işlemler net değil



nokta, son N pozisyonunun sonucunu hesaplamaktır. Bunun için onların biletlerini arıyorum ve işte bu bir teknoloji meselesi

fLastClosetPoz();
     OrderSelect ( Ticket1,SELECT_BY_TICKET); X=OrderProfit(); SL1=OrderType(); TM1=OrderOpenTime();       Print (Ticket1); Print (SL1, "_" ,X); //ПОСЛЕДНИЙ 
     OrderSelect ( Ticket2,SELECT_BY_TICKET); Y=OrderProfit(); SL2=OrderType(); TM2=OrderOpenTime();       Print (Ticket2); Print (SL2, "_" ,Y); //ПРЕДпоследний
     OrderSelect ( Ticket3,SELECT_BY_TICKET); Z=OrderProfit(); SL3=OrderType(); TM3=OrderOpenTime();       Print (Ticket3); Print (SL3, "_" ,Z); //ПРЕД-ПРЕДпоследний
 
Roger :


Yer değiştirmek

üzerinde


İşe yaradı! dürüst olmak gerekirse, VE yerine VEYA yerine koymak gibi bir fikrim vardı .... ama ... :)))))))))))))))))))))))))

teşekkür etmek! şimdi mantık benim için açık, 15 tane kapalı saymama rağmen, kodu bir balon boyutuna şişirmek zorunda kalacağım!

Bütün bunları tek bir döngüye sığdırmak mümkün mü? ve sadece gerekli işlem sayısı parametresini N ?

 
Zhunko :

1. Boşuna sensin. Algoritmasına olan hayranlığım orada bile ifade ediliyor. Bu aynı HRENFIX'tir. Sonra başka bir lakabı vardı.

Komut dosyasının adının ön ekinde, takma adlarımızın ilk harfleri.

===============

2. Dmitry, her şeye rağmen, ifşa edilmeyen bir gizli algoritma ile bazı gizli problemleri çözdüğün için içtenlikle memnunum.

3. Her şey çok gizemli görünüyordu. Övündüğün için teşekkürler. Şüphesiz bu forumdaki ve hatta belki de tüm evrendeki en havalı programcısın!

1. Ah evet! Bunun sizin kodunuz veya arkadaşınız olduğu ortaya çıktıktan sonra. Abaldet, en değersiz ve ayıp olandı, şimdi bir anda keyifli hale geldi.

2. Ne tür bir programcıyım, ne bildiğimi ve ne yapabileceğimi ve nasıl bildiğimi ve yapabileceğimi, ne bilmediğimi ve ne yapamayacağımı - bir şekilde kendim çözeceğim.

3. Görev kesinlikle gizli değil, kesinlikle açık, burada açıkça tanımlanmış. Anlayabilen herkes hemen sorunsuz anladı. Bunu herhangi bir gizli sihirli yöntemle değil, her zamanki standart ve açık (ve dünyaca ünlü) yöntemle çözdüm. Burada övünmüyorum, ama senin için bir mucize, gülüyorum. Sadece megalomaniniz bunu anlamanıza ve gerçekleştirmenize izin vermez.

 
Integer :

1. Ah evet! Bunun sizin kodunuz veya arkadaşınız olduğu ortaya çıktıktan sonra. Abaldet, en değersiz ve ayıp olandı, şimdi bir anda keyifli hale geldi.

2. Ne tür bir programcıyım, ne bildiğimi ve ne yapabileceğimi ve nasıl bildiğimi ve yapabileceğimi, ne bilmediğimi ve ne yapamayacağımı - bir şekilde kendim çözeceğim.

3. Görev kesinlikle gizli değil, kesinlikle açık, burada açık bir şekilde tanımlandı. Anlayabilen herkes hemen sorunsuz anladı. Bunu herhangi bir gizli sihirli yöntemle değil, her zamanki standart ve açık (ve dünyaca ünlü) yöntemle çözdüm. Burada övünmüyorum, ama senin için bir mucize, gülüyorum. Sadece megalomaniniz bunu anlamanıza ve gerçekleştirmenize izin vermez.




Beyler, gidin başka bir yere sürün! Burada insanlar PRATİK problemleri çözerler. ve dalı duygularla tıkarsın...
 
lottamer :


Beyler, gidin başka bir yere sürün! Burada insanlar PRATİK problemleri çözerler. ve dalı duygularla tıkarsın...


Bu konuda bana ne yazıyorsun? Al ve Zhunko yaz, dördüncü gün konuşmanın ne hakkında olduğunu anlayamıyor, herkes ilk gün anladı.
 

Elbette, herhangi bir anlaşmazlık sınırlı olmalıdır. Aksi takdirde, zaten aklın sınırlarını aşabilir.

Her iki pozisyon da açıklandıktan sonra taraflar anlaşabilir veya görüşlerinde kalabilirler. - Bu onların hakkı. İnsanlar yanılmış olsa bile. Her insanın hata yapma hakkı vardır.

Bunlar bunun gibi halka açık tartışmalarsa, o zaman gözlemciler her iki tarafın argümanlarını görür ve konuyla ilgili varılan (ya da olmayan) fikir birliğine bakılmaksızın, herkes kendi çözüm versiyonunu (veya her ikisini) seçme şansına sahiptir.

Ancak bireye (görev, soru, davaya değil) suçlamalara ve itirazlara geçmek zaten kişinin otoritesini azaltıyor. Bu gereksizdir ve kınanır (kişisel hakaretler için).


Sorunu çözmek için argümanlar ve yöntemler uzun süredir ana hatlarıyla belirtildiği için, her iki tarafın da bu konuda durmasını ve birbirine başvurmasını öneriyorum.

Görünüşe göre, eğer program sorunlarını çözmede, tartışmacılar profesyonel ise, o zaman anlaşmazlıkları yönetme konularında yeni başlayanlardır. Ne dalın konu dışı değil, ancak profesyonel tavsiyeler vermenizi sağlar. Umarım bu tavsiye duyulur.

 
Integer :

1. Ah evet! Bunun sizin kodunuz veya arkadaşınız olduğu ortaya çıktıktan sonra. Abaldet, en değersiz ve en ayıptı, şimdi bir anda keyifli hale geldi.

2. Ne tür bir programcıyım, ne bildiğimi ve ne yapabileceğimi ve nasıl bildiğimi ve yapabileceğimi, ne bilmediğimi ve ne yapamayacağımı - bir şekilde kendim çözeceğim.

3. Görev kesinlikle gizli değil, kesinlikle açık, burada açık bir şekilde tanımlandı. Anlayabilen herkes hemen sorunsuz anladı. Bunu herhangi bir gizli sihirli yöntemle değil, her zamanki standart ve açık (ve dünyaca ünlü) yöntemle çözdüm. Burada övünmüyorum, ama senin için bir mucize, gülüyorum. Sadece megalomaniniz bunu anlamanıza ve gerçekleştirmenize izin vermez.

1. Kod ve algoritma arasındaki farkı hissedebiliyor musunuz? Ayrıca, algoritmanın grafik penceresini açmakla hiçbir ilgisi yoktur. Kod düzeltildi. Grafiğin açıldığı yer pek değişmedi. O zaman, başka seçenek yoktu. DLL'de kız arkadaşına yaptı. Daha güvenilir.

2. Harika! Sen en iyisisin!

3. Bunu kastediyorsunuz:

SSS :

1) Görev: Her komut dosyası (EA) diğerlerinin varlığını bilmelidir.

2) Sorun: Bir arıza meydana gelirse, başarısız olandan gelen globaller huzursuzca askıda kalacak ve kuyruk duracaktır.

3) Çözüm:

Her deneyim, bir ad - ortak önek + pencere tutamacı + sembol ile 1 global düzenler. global değeri, bu sembol için son onay işaretinin zamanıdır. 2 ortak global kendi tutamacı ile (çalıştıktan sonra tutamağını ona yazar veya en eskisiyse sıfırlar)

Sırayı artan düzende (tutamaçlar) düzenleriz, en eskisi ikinci globali sıfırlar

her deneyimde üç dizi oluşturuyoruz (yapı eksikliği için) - sembol\tutamaç\son erişim zamanı\son onay zamanı.

tüm uzmanlar herkes için (son erişim zamanı \ son onay zamanı) kaydını tutar ve farklılık gösterir göstermez (exps'lerden birinde başarısızlık), başarısız olan uzmanın her iki globali de silinir ve etkin olmadığı kabul edilir. dizilerdeki hücreleri kaldırılır (dizi yeniden oluşturulur).

sıra geri yüklendi

gerçekte bu, en aktif grafikte (sık keneler) bulunan exp tarafından yapılacaktır.

normal deinite altında, her exp kendinden sonra temizlenir

maksimum atlama bir onay işaretidir.

not. ancak genel olarak bir çoklu para birimi yapmak daha iyidir

Böylece Rüstem'in telepatik yetenekleri sayesinde elde edildi. Bu varsayımsal bir sorun ve varsayımsal bir çözümdür. Bunun senin görevinle ne alakası var? Bu konuda hiçbir şey söylemedin. sorgulamak zorunda kaldım. Cevap olarak, her şeyi sunduğunuz, ancak uygulamadığınız yapıcı sözler yerine tamamen küfür edin.

2008'de de benzer bir sorun yaşamıştım. Bazıları gibi sır yapmayacağım. Ne tür bir göreve, nasıl karar verdiğimi ve neden bu tür sorunları bu şekilde çözmenin başarısız olduğunu düşündüğümü belirli bir örnekle anlatacağım.

=============================

Görevin ilk verileri:

1. Birkaç özdeş döngülü Uzman Danışman vardır. Onlar. tamamen bağımsız iplikler.

2. Bazı uzmanların eriştiği, 8 gruba ayrılmış bir katsayı veri tabanı bulunmaktadır. 2 GB'den başlayan veritabanı boyutu.

3. Veritabanı bazen yenilenir. 2 saatlik periyotlardan sonra yenilenir. İşlem süresi, günün saatine göre çokluğa bağlıdır. Saatin çokluğuna ve işlemci performansına bağlı olarak 5 dakikadan 45 dakikaya kadar süre.

Görev:

1. Çünkü veritabanının yenilenmesi çok zaman alır, yenilenmesinden yalnızca bir uzmanın sorumlu olması gerekir. Aksi takdirde, bitene kadar bekleyemezsiniz.

2. Güncelleme sırasında veritabanına erişimi devre dışı bırakmak gerekir. Uzmanların çalıştığı katsayıların güncellenmesini büyük ölçüde yavaşlatmamak için gruplar halinde yapın.

3. Güncellenen katsayılarla çalışan Uzman Danışmanlar eski katsayılarla çalışmalıdır.

4. Belirli bir grubun katsayılarının güncellenmesi sürecinde bu gruba geçiş yapan uzmanların tek bir katsayı ile çalışması ve bunu raporlaması gerekir. Tamamlandığında, güncellemeler yeni faktöre geçmelidir. Aynı şey 3. nokta için de geçerlidir.

Şu anda çözüm:

1. Endekslerinden oluşan ortak bir uzman tanımlayıcı kuyruğu oluşturulmuştur.

2. Veritabanına erişen uzmanların indekslerinden oluşan bir tanımlayıcı kuyruğu oluşturulmuştur.

3. Her iki kuyruk da paylaşılan bir kaynaktır. Kuyruklara erişim, tek bir eşitleme nesnesi tarafından eşitlenir.

4. İkinci aşamadan ilk uzman, veri tabanının güncellenmesinden sorumlu uzman olarak atanır.

5. Ayrıca, neredeyse Rüstem'in tarif ettiği gibi. DLL'deki uygulama nedeniyle biraz daha kolay.

Tanımlayıcılar uçtan uca dizinlerdir. Bir uzman kaldırıldığında, tanımlayıcı kuyruktan kaldırılır. Yeniden indeksleme yapılmaz. Kalan uzmanlar endekslerini bırakıyor.

Yeni bir uzman eklenirken, son uzmanın indeksi sayılarına uymuyorsa, ilk boş eski indeks atanır. Aksi takdirde, yeni dizinler atanır.

Tanımlayıcıya ve grafik aracına bağlanma gerekli değildir. Ayrıca, yükleme hatasını izlemeniz gerekmez. Herhangi bir çökme olmadı. Bu gerçekleşse bile, bir felaket olmazdı. Uzman Danışmanlar eski katsayılarla çalışmaya devam edecekti. Bir sonraki güncellemede, güncelleme sayacı denetleyicisi bir güncellemenin olmadığını tespit edecek ve ikinci sıradan önde gelen uzmanın tanımlayıcısını atacaktır. Bir sonraki uzman liderin görevini üstlenecekti. Expert Advisor veritabanı bağlantı moduna geçtiğinde aynı denetleyici kullanılır. Onlar. ikinciye getiriyor. Onlar. Yalnızca katsayı değerinin kritik olmadığı M1 üzerinde çalışan Uzman Danışmanlar zarar görür.

Bu çözüm görevi tamamen yerine getirdi, ancak uzmanların birbirine bağlanması ve veritabanını yenileyen, güvenilirlik katmayan bir uzman için alışılmadık bir görev olduğu için pek beğenmedim. O zaman, çok şey bilmiyordum ve nasıl olduğunu bilmiyordum. Bir yıl sonra değiştirdi.

2. Çözüm:

1. Veritabanına, bir zamanlayıcıya göre kendini yenilediği ayrı bir iş parçacığında hizmet verilir.

2. Yenileme sırasında veritabanına erişim, senkronizasyon nesnesi tarafından korunur.

Her şey çok daha kolay çıktı. Kuyruk yok. Ama bundan da hoşlanmadım. Yenilemeden önce, veritabanı bazen bellek taşmasına neden olan tırnak takas komut dosyasını çağırdı. MT4'ü çok yavaşlatan şey. Daha sonra MT4, 2 GB bellek ile çalıştı. Şimdi 4 GB ile çalışıyor.

Çözüm 3:

1. Veritabanı ayrı bir uygulamadır. Onlar. MT4'ten bağımsız özel belleği olan başka bir işlem.

2. Veritabanı kendini yeniler.

3. Veri alışverişi haritalama yoluyla gerçekleşir. Bu, veri alışverişinin hızını ve veritabanının yenilenme hızını artırdı. Önceden, her şey diskten okunurdu. Aksi takdirde imkansızdı. MT4'ün çok sınırlı bir çalışma belleği vardır.

4. Geçmiş, gerektiğinde tekmelediğiniz veritabanı uygulamasından MT4 aracılığıyla uzaktan yüklenir. MT4'ün herhangi bir arızası - boşaltma ve ardından yükleme.

5. Adım 4, geçerli MT4 dizinine sembolik bir bağlantı oluşturularak gerçekleştirilir. Onlar. bu, mevcut MT4'ün tam bir kopyasıdır. Geçmiş, çalışan MT4'ün boşaltılmasını beklemeden, hareket halindeyken doğrudan MT4 dizinlerine güncellenir.

6. Muteks aracılığıyla güncelleme sırasında veritabanına erişimin senkronizasyonu, çünkü kritik bir bölüm yalnızca bir işlem için çalışır.

=========================

Bu nedenle, Dmitry, probleminizi bilmeden, probleminizin kuyruğa girmeden ve uzman akışlarının bağımsızlığını korumadan çözülebileceğini varsayabilirsiniz. Bu, bir bütün olarak işin güvenilirliğini ve performansını artıracaktır. Birkaç sayfadır bahsettiğim şey (konuların bağımsızlığı).

 

Üzgünüm. Buna cevap vermedi:

Integer :

Bu bir atomik erişim bloğudur ve senkronizasyon yoktur. Sadece mevduata atıfta bulunmak mantıklı değil. Para yatırma parametreleri işlevlerinin herhangi birinin çağrılması, herhangi bir hile olmadan kendi içinde atomik olacaktır. Atomik olarak yapılırsa, danışmanın tüm çalışmaları. Sorunları bu şekilde çözüyorsunuz - bir şey yaptığınızı düşünüyorsunuz, ama aslında - bir yanılsama.

Dmitry, etrafta sadece aptallar olduğunu düşünme. Sergey'in sorusundan, sorunda çok bilgili olduğu açıktır.

Tabii ki, sadece senkronizasyon ile mevduat parametrelerine atıfta bulunmak anlamsızdır. Bu parametreleri değiştirmek için senkronizasyon gereklidir. Böylece paralel Uzman Danışman, önceden değiştirilmiş doğru parametreyi alır ve değiştirme sürecinde almaz.