Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
tavsiye için teşekkürler, işte kodumun çok basit bir versiyonu, bu benim gerçek kodum değil ama umarım bu daha açık olur.
dediğim gibi bu gerçek kod değil, kalıp bulma vb. sadece bir örnek. bu konuyu açmamın nedeni DetectExistingPattern() işlevidir.
OnTick() öğesinin ilk çalıştırmasında kodun nasıl çalıştırılacağına ilişkin size zaten örnek kod verdim, bu nedenle şimdi kod gönderinizi uygun şekilde güncelleyin, böylece DetectExistingPattern() öğesi OnTick() öğesinin ilk çağrısında çalışır ve OnInit() öğesinde değil .
Ayrıca, Yeni bir Çubuğu tespit etmek için "Çubukları" kullanamazsınız. Bu yanlış. "Zaman[0]" veya "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )" kullanmalısınız. İşte bir örnek:
OnTick() öğesinin ilk çalıştırmasında kodun nasıl çalıştırılacağına ilişkin size zaten örnek kod verdim, bu nedenle şimdi kod gönderinizi uygun şekilde güncelleyin, böylece DetectExistingPattern() öğesi OnTick() öğesinin ilk çağrısında çalışır ve OnInit() öğesinde değil .
Ayrıca, Yeni bir Çubuğu tespit etmek için "Çubukları" kullanamazsınız. Bu yanlış. "Zaman[0]" veya "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )" kullanmalısınız. İşte bir örnek:
teşekkürler @FMIC, @jjc istediği için basit kodu ekledim. Bu arada Barları 'dan öğrendim hatırladığım kadarıyla herkes öyle yazıyordu ben de öyle yaptım. Neden yanlış ? Yanlış çalışabilir mi?
ps: Metatrader 4 kullanıyorum, yani mql4 değil mi?
teşekkürler @FMIC, @jjc istediği için basit kodu ekledim. Bu arada Barları 'dan öğrendim hatırladığım kadarıyla herkes öyle yazıyordu ben de öyle yaptım. Neden yanlış ? Yanlış çalışabilir mi?
ps: Metatrader 4 kullanıyorum, yani mql4 değil mi?
FMIC :
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
dediğim gibi bu gerçek kod değil, kalıp bulma vb. sadece bir örnek. bu konuyu açmamın nedeni DetectExistingPattern() işlevidir.
Orijinal sorunuza dönersek... Bu örnekte, CheckTrendPattern() işlevinizi belirli bir çubuktan başlaması söylenecek şekilde değiştirmeniz bir seçenek olacaktır. 1'den 10'a kadar olan sabit çubuk aralığını kullanmak yerine, bunun yerine belirli bir başlangıç noktasından 1'den 10'a kadar bir ofset kullanırsınız.
Mevcut bir sipariş olmadığında ve kalıbın şu anda karşılanıp karşılanmadığını kontrol etmek istediğinizde, CheckTrendPattern() yerine CheckTrendPattern(0)'ı kullanırsınız.
Başlarken, mevcut bir siparişiniz varsa, onu tetikleyen modeli aşağıdaki gibi arayabilirsiniz. Bu, başlangıçta yaptığım önerinin aynısı: mevcut siparişin açık zamanına eşdeğer olan çubuk indeksini alıyorsun ve oradan geriye doğru bakmaya başlıyorsun.
Ancak, FMIC'in dediği gibi, bu kontrolün OnInit() yerine OnTick()'e yapılan ilk çağrıda yapılması tercih edilir. Bunu önermemin kendi nedenlerimin "başlatmayı geciktirmek" ile hiçbir ilgisi yok. Bunun yerine, MT4 zaten bir grafiğe eklenmiş EA ile yeniden başladığında, komisyoncudan veya güncellenmiş bir çubuk geçmişinden henüz %100 güvenilir bir sipariş listesine sahip olmadığınızdan endişe duyarım.
Aklınızda bulundurmak isteyebileceğiniz bir diğer husus, tümü tek bir çubuk tarafından kapsanan süre boyunca gerçekleşen aşağıdaki senaryodur:
Bunu önlemek için kapalı emirlerin yanı sıra açık emirleri de kontrol etmek isteyebilirsiniz.
Orijinal sorunuza dönersek... Bu örnekte, CheckTrendPattern() işlevinizi belirli bir çubuktan başlaması söylenecek şekilde değiştirmeniz bir seçenek olacaktır. 1'den 10'a kadar olan sabit çubuk aralığını kullanmak yerine, bunun yerine belirli bir başlangıç noktasından 1'den 10'a kadar bir ofset kullanırsınız.
Mevcut bir sipariş olmadığında ve kalıbın şu anda karşılanıp karşılanmadığını kontrol etmek istediğinizde, CheckTrendPattern() yerine CheckTrendPattern(0)'ı kullanırsınız.
Başlarken, mevcut bir siparişiniz varsa, onu tetikleyen modeli aşağıdaki gibi arayabilirsiniz. Bu, başlangıçta yaptığım önerinin aynısı: mevcut siparişin açık zamanına eşdeğer olan çubuk indeksini alıyorsun ve oradan geriye doğru bakmaya başlıyorsun. Ancak, FMIC'in dediği gibi, bu kontrolün OnInit() yerine OnTick()'e yapılan ilk çağrıda yapılması tercih edilir. Bunu önermemin kendi nedenlerimin "başlatmayı geciktirmek" ile hiçbir ilgisi yok. Bunun yerine, MT4 zaten bir grafiğe eklenmiş EA ile yeniden başladığında, komisyoncudan veya güncellenmiş bir çubuk geçmişinden henüz %100 güvenilir bir sipariş listesine sahip olmadığınızdan endişe duyarım.
Aklınızda bulundurmak isteyebileceğiniz bir diğer husus, tümü tek bir çubuk tarafından kapsanan süre boyunca gerçekleşen aşağıdaki senaryodur:
Şimdi neden OnInit'te yapmam gerektiği daha net anlaşıldı, güvenilirlik elbette en önemli nokta ve dikkate alma uyarınızı düşünmedim. bu kısım gerçekten önemli, gereksiz siparişler açabilirim, belki nadir ama mümkün. Bunu bir şekilde halletmeliyim. Gerçekten çok teşekkür ederim.
@ WHRoeder yeni çubuk kontrol kontrolünüz çok basit ve güzel. Yönteminizi koduma ekledim, teşekkür ederim.
Herkese merhaba,
@FMIC'in önerdiği gibi, kalıbımı bulan bir gösterge yazıp, bir sinyal ve emirlerim için kullanacağım birkaç veri daha veriyorum (farklı fiyatlarla birden fazla emir açabiliyorum). Şimdi EA'mda kullanmak istiyorum ama bir sorum var, aslında deneyiminize ihtiyacım var. İndikatörümden bir sinyal aldığımda, tekrar açtığımda mt4'üm herhangi bir nedenle çökerse, emir açacağım veya emir vereceğim (satış limiti veya alış limiti vb.) Açılan emrin hangi sinyale ait olduğunu nasıl bulabilirim? benim göstergemde. Bunun için bar shift kullanmak uygun mudur? daha önce konuştuğumuz gibi, sipariş oluşturma zamanını bulabilirim, sonra o çubuk kaymasını bulabilirim ve bu kaydırmayı kullanarak gösterge değerini elde etmeye çalışmalı mıyım? Bu sıralama ve gösterge kaymasını nasıl eşleştirebilirim?
Teşekkürler.
Evet, iBarShift() işlevini kullanabilirsiniz, tıpkı jjc'nin daha önceki bir gönderide size açıkladığı gibi, ardından göstergenizin verilerine iCustom() işlevi aracılığıyla başvurmak için.