MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1740

 
Maxim Kuznetsov # :

insanlara kötü şeyler öğretme.

verilerinizi hatırlamanız ve üzerinde çalışmanız gerekir

Maxim, bu durumda hiçbir yerde hiçbir şey hatırlamana gerek yok. Sadece son kapatılan pozisyona bakmak çok daha güvenilirdir.

Acil bir durumdan sonra daha sonra kurtarılmaları ile verileri depolamak için orada hiçbir şey icat etmeye gerek yoktur. Terminal kapatılırsa konum verileri kaybolur. Buna göre, onları ezberlerken, hızlı ve etkili bir şekilde iyileşme olasılığını derhal dikkate almalısınız.

(Yorumdaki sırayı hatırlamak - Bunun güvenilir bir karar olduğunu söyleyemem - komisyoncu / DC'nin iradesine güvenmek anlamına gelir)

Ve en ilginç olanı, her durumda, bu verileri bir yerden okuyacaktır. Yani onları orijinal kaynaktan hemen okumak daha kolay değil mi?

 
Sergey Zhukov # :

derleyiciyi MT5 için değil MT4 için derlemeye nasıl zorlayabilirim?

 #ifdef __MQL4__

#else

#endif
 
Artyom Trishkin # :

Maxim, bu durumda hiçbir yerde hiçbir şey hatırlamana gerek yok. Sadece son kapatılan pozisyona bakmak çok daha güvenilirdir.

Acil bir durumdan sonra daha sonra kurtarılmaları ile verileri depolamak için orada hiçbir şey icat etmeye gerek yoktur. Terminal kapatılırsa konum verileri kaybolur. Buna göre, onları ezberlerken, hızlı ve etkili bir şekilde iyileşme olasılığını derhal dikkate almalısınız.

(Yorumdaki sırayı hatırlamak - Bunun güvenilir bir karar olduğunu söyleyemem - komisyoncu / DC'nin iradesine güvenmek anlamına gelir)

Ve en ilginç olanı, her durumda, bu verileri bir yerden okuyacaktır. Yani onları hemen kaynağından okumak daha kolay değil mi?

ve ardından "OnTimer neden birkaç saniyeye sığmıyor veya OnTick çılgınca özlüyor" konularını takip edin :-)

Başlatma sırasında durumu 1 kez geri yükleyin (bir dosyadan okuyarak veya geçmişi/ortamı görüntüleyerek) ve bu kadar... Son sıra, özellikleriyle birlikte bir değişkende saklanır ve her zaman bilinir

 
Maxim Kuznetsov # :

ve ardından "OnTimer neden birkaç saniye içinde sığmıyor veya OnTick çılgınca özlüyor" konularını takip edin :-)

Başlatma sırasında durumu 1 kez geri yükleyin (bir dosyadan okuyarak veya geçmişi/ortamı görüntüleyerek) ve hepsi bu... Son sıra, özellikleriyle birlikte bir değişkende saklanır ve her zaman bilinir

Son pozisyonun nasıl kapatıldığını öğrenmek için onu bulmanız gerekir. Sonuçta, açıkken nasıl kapatıldığını kaydetmenin ve hatırlamanın bir yolu yok - hala açık.

Son açık pozisyonun biletini saklayabilir ve nasıl kapandığını belirlemek için kullanabilirsiniz, ancak ... açıkken pozisyonu manipüle ederken bileti değişebilir. Buna göre, değiştirilen biletin yeniden yazılması için işlevsellik yapılması gerekir. Bütün bunlar kodu karmaşıklaştırıyor.

Ben sadece son kapatılan pozisyonu aramayı önerdim. Ve bu, danışmanı yeniden başlatırken tüm pozisyonların sayımını ve yenisini kapatırken sadece bir pozisyonun verilerini okurken birleştirir.

Sonuçta, umarım herkes bunun için tüm tarihsel konumlar arasında bir döngü yapmanın gerekli olmadığını, sadece sonuncusu üzerinden bir döngü yapmanın gerekli olduğunu anlar. Yani, yalnızca bir döngü indeksi değişkenini hatırlıyoruz - mevcut değeri ve sıfırdan değil, bu değişkenin değerinden yeni bir döngü başlatıyoruz (geçmiş siparişlerin sayısı arttığında). Ve bu değişkenin değeri, Expert Advisor'ı başlatırken ve yeniden başlatırken ve yeni bir pozisyonu kapatırken OnInit()'e girilir. Yani, bu şekilde konum verilerini yazma ve okuma ihtiyacını ortadan kaldırır ve sürücü ile çalışırız.

Bu yaklaşımın en faydalısı olduğunu düşünüyorum, çünkü

1. Yalnızca döngü indeksinin değerini hatırlamanız gerekir
2. Endeksine göre kapalı bir siparişe doğrudan erişerek verileri yalnızca doğru anda alın.
3. Veri okuma/yazma işlevselliğini korumaya gerek yok
4. Hem işte hem de yazmada daha hızlıdır.

Ve evet, tüm verilerinizi bilmeniz gerektiğine katılıyorum - bunu kendim yapıyorum. Ancak bunları bilmek, programın ve kendinizin yararına arzu edilir.

 
Ivan Butko # :

Bilgi için teşekkürler!

Zaman varsa, nasıl düzeltileceğini cevaplamanızı rica ediyorum:

N mumların geçmişinde, iki farklı yönlendirilmiş hedef belirlenir: Kapat[N]+50*Puan ve Kapat[N]-50*Nokta.
O zaman fiyatın hedeflerden birine ulaşması şartı (if (Yüksek[i]> Kapat[N]+50*Puan) veya (if (Düşük[i]<)   Kapat[N]-50*Nokta)
Koşul karşılandığında, Kapat[N] ile Yüksek[i] arasındaki mesafe x[high]=High[i] dizisine girilir.
Ardından, herhangi bir zamanda rastgele herhangi bir çizelgeye koşar.

Ve Print( x[high]) ile kontrol ederken, on değerden 1-2'si 50'den az gösteriyor! Biri 12, diğeri 49'dur. Ancak +50 * Puan kesinlikle belirtilmiştir. 8-9 doğru (50'den fazla) ve 1-2 anormal. Bu bir test cihazı aracılığıyla değil, gerçek bir grafikte bir danışman atıyorum (ticaret işlevleri olmadan), ancak yalnızca yukarıdakilerle, tarihle çalışır ve böyle yazar.

Değer ne kadar büyük olursa, bu tür hatalar o kadar az olur. Yayılmanın yolda olduğunu düşündüm, ama... MT4'te tarihte bir yayılma yok gibi görünüyor.

Karar verildi.

 
RefreshRates() öğesini OnTimer() öğesine eklemek gerekli midir, yoksa zamanlayıcı varsayılan olarak kendini günceller mi?
 
Ivan Butko # :
RefreshRates() öğesini OnTimer() öğesine eklemek gerekli midir, yoksa zamanlayıcı varsayılan olarak kendini günceller mi?
güncellenmiyor
 
Aliaksandr Hryshyn # :
güncellenmiyor

teşekkürler

 
Artyom Trishkin # :

Son pozisyonun nasıl kapatıldığını öğrenmek için onu bulmanız gerekir. Sonuçta, açıkken nasıl kapatıldığını kaydetmenin ve hatırlamanın bir yolu yok - hala açık.

Son açık pozisyonun biletini saklayabilir ve nasıl kapandığını belirlemek için kullanabilirsiniz, ancak ... açıkken pozisyonu manipüle ederken bileti değişebilir. Buna göre, değiştirilen biletin yeniden yazılması için işlevsellik yapılması gerekir. Bütün bunlar kodu karmaşıklaştırıyor.

Ben sadece son kapatılan pozisyonu aramayı önerdim. Ve bu, danışmanı yeniden başlatırken tüm pozisyonların sayımını ve yenisini kapatırken sadece bir pozisyonun verilerini okurken birleştirir.

Sonuçta, umarım herkes bunun için tüm tarihsel konumlar arasında bir döngü yapmanın gerekli olmadığını, sadece sonuncusu üzerinden bir döngü yapmanın gerekli olduğunu anlar. Yani, yalnızca bir döngü indeksi değişkenini hatırlıyoruz - mevcut değeri ve sıfırdan değil, bu değişkenin değerinden yeni bir döngü başlatıyoruz (geçmiş siparişlerin sayısı arttığında). Ve bu değişkenin değeri, Expert Advisor'ı başlatırken ve yeniden başlatırken ve yeni bir pozisyonu kapatırken OnInit()'e girilir. Yani, bu şekilde konum verilerini yazma ve okuma ihtiyacını ortadan kaldırır ve sürücü ile çalışırız.

Bu yaklaşımın en faydalısı olduğunu düşünüyorum, çünkü

1. Yalnızca döngü indeksinin değerini hatırlamanız gerekir
2. Endeksine göre kapalı bir siparişe doğrudan erişerek verileri yalnızca doğru anda alın.
3. Veri okuma/yazma işlevselliğini korumaya gerek yok
4. Hem işte hem de yazmada daha hızlıdır.

Ve evet, tüm verilerinizi bilmeniz gerektiğine katılıyorum - bunu kendim yapıyorum. Ancak bunları bilmek, programın ve kendinizin yararına arzu edilir.

Pozisyon biletinin açıkken değiştiğini fark etmedim. Genellikle bu pozisyonu açan ilk emrin bilete eşittir.

Son kapanan - ve birden fazla danışman bir sembol üzerinde işlem yapıyorsa, artı manuel işlem?
 
JRandomTrader # :

Pozisyon biletinin açıkken değiştiğini fark etmedim. Genellikle bu pozisyonu açan ilk emrin bilete eşittir.

Son kapanan - ve birden fazla danışman bir sembol üzerinde işlem yapıyorsa, artı manuel işlem?

Doldurma veya kısmi kapatma ve bilet zaten farklı. Hangi biletin hangisinden kaynaklandığını belirlemek ve hatırlanan biletin üzerine yazmak gerekir. Ancak hangi platformdan bahsettiğimiz net değil - ikisi de biraz farklı, ancak yine de izlemeniz gerekiyor.

"Son kapalı, bu danışmana ait" anlamına gelir.