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
DoubleRound işlevimi MODE_TICKSIZE (0,25) yerine MODE_TICKVALUE (12.50 olan) ile çağırdım.
Düzelttim ama 130 numaranın kaybolmasına neden olmadı
Güncellenmiş DoubleRound satırındaki hatanın günlüğü:
karşılaştırma için, çalıştığı yerde bir günlük:
her durumda, artık daha sık işe yarayacak gibi görünüyor, kesinlikle yaklaşıyoruz. :)
her durumda, artık daha sık işe yarayacak gibi görünüyor, kesinlikle yaklaşıyoruz. :)
Bu Modify'ın neden başarısız olduğunu anlayamıyorum. . . OrderSend ve OrderModify arasında yeni bir Teklif/Soruşturma alıyor musunuz?
Şimdi önerebileceğim tek şey, 130 hatası aldığınızda. . . her şeyi yeniden yazdırın, Teklif Ver, Sor (MarketInfo kullanarak), OOP, StopLevel, ayarlamaya çalıştığınız SL, vb.
DoubleRound işlevimi MODE_TICKSIZE (0,25) yerine MODE_TICKVALUE (12.50 olan) ile çağırdım.
#130 stoploss hatası artık görünmüyor. Son adımlar sorunu nihayet çözmüş gibi görünüyordu.
Bundan sonra atılan tüm adımları özetleyen başka bir gönderi yayınlayacağım. Bu yüzden forumda Hata #130 ile mücadele eden diğerleri bu konuyu referans olarak kullanabilir.
Devam eden yardımlarınız için teşekkürler :).
şinobi
Devam eden yardımlarınız için teşekkürler :).
şinobi
Hatalarla mücadele için en önemli teknik aşırı günlük kaydıdır. Hataya uzaktan bağlanabilecek her şey için çıktı alın. Açıp kapatabileceğiniz bir log fonksiyonu tanımlarsanız, sorunu çözdükten sonra kodu saklayabilirsiniz.
Uzman danışmanınızı başlatırken MarketInfo'nun size söyleyebileceği tüm bilgileri günlüğe kaydetmelisiniz: https://docs.mql4.com/constants/marketinfo
Ayrıca her zaman fonksiyonların dönüş değerlerini kontrol ettiğinizden emin olun, örneğin OrderModify için:
ECN Broker, alım/satım ve stoploss/takeprofit için ayrı siparişler vermenizi gerektirir. Bu nedenle, kodunuzu aşağıdaki gibi iki sıraya ayırmanız gerekir:
Satış emirleri için OP_BUY'u OP_SELL ile değiştirmeniz gerekir. Ayrıca OrderSelect ve OrderModify'ın dönüş değerlerini de kontrol etmelisiniz (yukarıdaki Genel İpuçlarına bakın).
Bazı Brokerler stoploss, takeprofit ve slipajın 4/5 haneye ayarlanmasını talep eder. Bunu, aşağıdaki kodu init() işlevinize (thx WHRoeder) koyarak yapabilirsiniz:
Ardından, Broker'a göndermeden önce stoploss, takeprofit ve slippage'i pips2db1 ile çarpmanız gerekir.
Diğer bir olası neden ise, Uzman Danışman (EA) tarafından etkinleştirilen onay işareti ile EA OrderSend() veya OrderModify()'ın çalıştırılması arasında piyasa oranlarının değişmesidir. Bu sorunu önlemek için iki olası çözüm vardır:
İlki, Sor ve Bid gibi önceden tanımlanmış piyasa değişkenlerini kullanmadan önce RefreshRates() işlevini kullanmaktır. (tık EA'yı etkinleştirdiğinde bu değişkenler değerlerini alır)
İkincisi, önceden tanımlanmış piyasa değişkenlerini hiç kullanmamaktır. Bunun yerine MarketInfo() ile mevcut piyasa değerlerini kullanabilirsiniz. Sor, Bid ve Point kullanımı yerine
Stoploss veya kar al giriş fiyatına çok yakınsa, emir reddedilecektir. Bu sorunu yaşamamak için Ask ve Bid arasındaki mevcut farkı hesaba katmalısınız. Yine iki çözüm var:
Birincisi, spread'i hesaplamak ve onu stoploss/takeprofit'inize eklemek/çıkarmaktır.
Stoploss veya kar alma hesaplanırken Ask ve Bid kullanarak spread'i dolaylı olarak hesaba katan ikinci çözüm:
Brokerların belirli bir durma seviyesi vardır. Stoploss'unuz bu seviyenin altındaysa siparişiniz reddedilecektir. MarketInfo(Symbol(), MODE_STOPLEVEL) ile durma seviyesini kontrol edebilirsiniz.
Bunu önlemek için stoploss'unuzu aracının durma düzeyine göre kontrol edin ve gerekirse ayarlayın:
Donma Seviyesi benzer bir kavramdır. Stoploss'unuzun ayrıca aracının donma seviyesinden daha büyük olması gerekir. Dondurma seviyesini MarketInfo(Symbol(), MODE_FREEZELEVEL) ile kontrol edebilirsiniz.
Bunu önlemek için, stoploss'unuzu aracının donma düzeyine göre tekrar kontrol edin:
Son olarak, Stoploss veya Takeprofit'iniz reddedilebilir, çünkü Sembol yalnızca, tık boyutuyla eşleşen stoploss/getprofit'i destekler. Tik boyutu, sembolün ödülünün yukarı ve aşağı gidebileceği minimum mesafedir. Örneğin, fiyat 1000 ise ve işaret boyutu 0,25 ise, fiyat yalnızca 0,25'in katı kadar artabilir veya azalabilir (0,25 * n, burada n bir doğal sayıdır). Yani fiyat 0,25'ten 1000,25'e yükselebilir veya 1,75'ten 998,25'e düşebilir.
Ticksize'ı hesaba katmak için, çift değerleri belirli bir adım değerine (örneğin en yakın 0.25'e) yuvarlayacak bir fonksiyona ihtiyacınız vardır. İşte böyle bir işlev:
Örneğin, DoubleRound'u sayı = 1023.81234 ve adım = 0.25 ile çağırmak 1023.75 döndürür. 1023.967834 ile çağırmak 1024.00 döndürür
Şimdi stoploss veya kar alma göndermeden önce, aşağıdakilerle Sembolün işaret boyutuna yuvarlayın:
Yukarıdaki tüm karşı önlemleri dikkate alan eksiksiz bir küçük örnek:
Umarım bu #130'dan kurtulmaya yardımcı olur. Kodunuzu değiştirmek işe yaramazsa, önce yukarıdaki gibi minimal bir örnek kullanın. Ve sonra, hata kaybolduğunda, değiştirilenleri kodunuza alın.
İyi şanslar,
şinobi
Raptor, WHRoeder, SDC, BigAl, gjol ve 35806'ya hatadan kurtulmama yardım ettikleri ve bu referansı bir araya getirdikleri için teşekkür ederim.