Uzman Danışmanlar: Yatırımcılar için MQL5 Programlama - Kitaptan kaynak kodları. Bölüm 6 - sayfa 2
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
Emirler, anlaşmalar, pozisyonlar zaten zaman dilimleriyle ilgili değildir. Ya bir şeyi yanlış anladınız ya da ifadeniz yanlış.
Üzgünüm, sanırım kelime seçimim kafa karıştırıcı"zaman çerçevesi" ile "tarih aralığı" demek istiyorum. Diyelim ki 2025-10-01 00:00:00 ile 2025-10-22 23:59:59 arasındaki Fırsatlar gibi belirli bir tarih aralığında işlem gören Fırsatları/Siparişleri seçmek istiyorum.
Bir işlem geçmişinin bir alt aralığını analiz etmek istiyorsanız, filtreleme kodunun kendisini etkilemeden, filtrelemeden önce geçmişin yalnızca bu bölümünü talep etmek daha verimli olduğunda:
Herhangi bir nedenle, HistorySelect ile uyguladığınız genel aralık içinde (daha dar) bir alt aralık seçmek isterseniz, bunu filtreleme kodunda şu şekilde yapabilirsiniz:
{ // bunlardan bazıları buraya gider // HistorySelect(0, LONG_MAX); // HistorySelectByPosition(PositionID); ... DealTuple deals[]; if(SubrangeFrom != SubrangeTo && SubrangeFrom < SubrangeTo) { filter.let(DEAL_TIME, SubrangeFrom - 1, IS::GREATER).let(DEAL_TIME, SubrangeTo + 1, IS::LESS); } filter.let(DEAL_POSITION_ID, PositionID).select(deals, true); ... }Sarı renkle vurgulanan satır, IS::GREATER ve IS::LESS ek niteleyicilerini kullanarak tarih-saat aralığı [SubrangeFrom, SubrangeTo] için 2 koşul belirler (varsayılan olarak, let() işlevine yapılan diğer çağrılarda belirtilmezler ve daha sonra IS::EQUAL normalde tek değerli alanlar için kullanılır).
Alt filtreyi tarih aralığına göre uygulamak için tek bir neden biliyorum - bu, emirlerin kurulum zamanı (ORDER_TIME_SETUP) içindir, çünkü HistorySelect emirlerin başka bir tarih-zaman özelliğine uygulanır - yani emir gerçekleştirme zamanı (ORDER_TIME_DONE). Ayrıca, çok sayıda aktif emir varsa, aktif emirlerin bir alt aralığını (geçmişte olmayan) filtrelemek ilginç olabilir.
Başlangıç noktası olarak MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 örnek koduna bakabilirsiniz.Bir işlem geçmişinin bir alt aralığını analiz etmek istiyorsanız, filtreleme kodunun kendisini etkilemeden, filtrelemeden önce geçmişin yalnızca bu bölümünü talep etmek daha verimli olduğunda:
Herhangi bir nedenle, HistorySelect ile uyguladığınız genel aralık içinde (daha dar) bir alt aralık seçmek isterseniz, bunu filtreleme kodunda şu şekilde yapabilirsiniz:
Sarı renkle vurgulanan satır, IS::GREATER ve IS::LESS ek niteleyicilerini kullanarak tarih-saat aralığı [SubrangeFrom, SubrangeTo] için 2 koşul belirler (varsayılan olarak, let() işlevine yapılan diğer çağrılarda belirtilmezler ve daha sonra IS::EQUAL normalde tek değerli alanlar için kullanılır).
Alt filtreyi tarih aralığına göre uygulamak için tek bir neden biliyorum - bu, emirlerin kurulum zamanı (ORDER_TIME_SETUP) içindir, çünkü HistorySelect emirlerin başka bir tarih-zaman özelliğine uygulanır - yani emir gerçekleştirme zamanı (ORDER_TIME_DONE). Ayrıca, çok sayıda aktif emir varsa, aktif emirlerin bir alt aralığını (geçmişte olmayan) filtrelemek ilginç olabilir.
Başlangıç noktası olarak MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 örnek betiğine bakabilirsiniz.Hata Düzeltmesi MQL5/Include/MQL5Book/TradeUtils.mqh.
Bir moderatör yanlış yapıştırılan kodu biçimlendirdi. Genellikle bu tür kodlar kaldırılır.
StanislavKorotky Lütfen bu hatayı incelemeye yardımcı olabilir misiniz, MT5 güncellemelerinden sonra başladığına inanıyorum çünkü kodun önceki aylarda herhangi bir değişiklik yapılmadan çalıştığını biliyordum.
parametre dönüştürme türü 'long[][2]' to 'string[][] &' is not allowed SymbolFilter.mqh 199 20
Aşağıdaki kodun sorunu tekrarlamaya yardımcı olacağından şüpheleniyorum:
Merhaba @Paul Dick
Dizileri sıralamak için bu https://www.mql5.com/tr/code/57233 adresini deneyin
Değişken lotlar için hesaplamanın düzeltildiği R2 - RSquared.mqh'ye dayalı özeloptimizasyon kriterinin hesaplama dosyasının güncellenmiş bir sürümünü ekliyorum.
Tahmin kalitesi önemli ölçüde iyileştirilmiştir - optimizasyon sonuçları tablosuna bakılırsa, geri kazanım faktörü ve Sharpe parametrelerinin kombinasyonu elde edilmiştir.
Kullanım örneği.
Son zamanlarda Frame öğreniyorum ve kodunuzu test ettim, FrameTransfer.mq5. Bu satır mevcut MT5 derleyicisinde bir hata veriyor. Lütfen doğrulayın: #property tester_set "FrameTransfer.set" (geçersiz tester set dosya uzantısı, '*.set' beklenen FrameTransfer.mq5)
Başarılı bir şekilde derlenmesi için bu şekilde değiştirilmelidir: #property tester_set "\\Presets\\FrameTransfer.set"
Hatta `#property tester_set "/Presets/FrameTransfer.set"` bile başarısız olacaktır.
Belki algoritma kitabındaki açıklamayı değiştirebilirsiniz:
Başarılı bir derleme için aşağıdaki gibi değiştirilmelidir: #property tester_set "\\Presets\\FrameTransfer.set"
Hatta `#property tester_set "/Presets/FrameTransfer.set"` bile başarısız olacaktır.
Belki de algoritma kitabındaki açıklamayı değiştirebilirsiniz:
Bu bariz bir derleyici hatasıdır - koda "geçersiz tester set dosya uzantısı, '*.set' bekleniyor" hatası verir:
dosyanın gerekli uzantıya sahip olduğu yerde. Dosya konum yolunun bununla hiçbir ilgisi yoktur.
Bu hata uzun zamandır, en azından 2024'ten beri var. MQ neden bunu düzeltmek için can atmıyor, bilmiyorum.
Kitap düzenlemelerine gelince, bu durumda gerekli değiller, ancak her durumda kitap artık tamamen MQ'nun kontrolü altında.
Bu bariz bir derleyici hatasıdır - hata verir: "geçersiz test cihazı seti dosya uzantısı, '*.set' bekleniyor" koduna:
MetaEditor sürümünüzde kalmak için dosya adı sonuna sıfır ekleyin: "myset.set\0"