Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Telegram üzerinde bulun!
Fan sayfamıza katılın
Kodu ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Kodu beğendiniz mi? MetaTrader 5 terminalinde deneyin
Komut dosyaları

TransactionCostCollector — Aracı Maliyet Profilleme Komut Dosyası - MetaTrader 5 için komut dosyası

Patrick Murimi Njoroge
Patrick Murimi Njoroge
Quantitative researcher building production-grade ML pipelines for MetaTrader 5.
Author of the "MetaTrader 5 Machine Learning Blueprint" (20+ parts) and
"Feature Engineering for ML" series on MQL5 Community — the most comprehensive
| Turkish English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Görüntülemeler:
53
Derecelendirme:
(2)
Yayınlandı:
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Üçlü bariyerli etiketleme süreçleri, min_ret eşiği olarak sıklıkla keyfi bir sabit (%0,5–1,0) veya eski bir spread varsayımı kullanır. Gerçek gidiş-dönüş işlem maliyetinin altına ayarlanan bir eşik, sürecin maliyet kaynaklı gürültüyü işlem yapılabilir sinyal olarak etiketlemesine neden olur. Etiketlenen veri kümesi daha sonra kenar değerlerini sistematik olarak abartır ve bu etiketler üzerinde eğitilen herhangi bir model, gerçek piyasa yapısına değil, etiketleme şemasının bir artefaktına aşırı uyum sağlar.

TransactionCostCollector.mq5, bu sorunun veri toplama aşamasını çözen bağımsız bir komut dosyasıdır. Tarihsel spread dağılımından örnekler alır, ekli grafik sembolü için brokerın swap oranlarını ve komisyon tanılama bilgilerini okur ve her şeyi yapılandırılmış bir CSV dosyasına aktarır. CSV dosyası, tüm maliyetleri kesirli getirilere dönüştüren ve etiketleme çağrınız için enstrümana özgü min_ret eşiğini hesaplayan eşlik eden Python sınıfı TransactionCostModel tarafından kullanılır.

İşlem Maliyetleri Toplayıcısının Çıktısı

TransactionCostCollector çıktısının üç panelli gösterimi: seansa göre gün içi maliyet dağılımı (a), tam maliyet dağılımı (b) ve min_ret seçimi için yüzdelik eğri (c)

Komut Dosyası Neleri Toplar?

Komut dosyası, tek bir çalıştırmada tek bir sembol için üç maliyet bileşenini toplar:

  • Spread — istenen çubuk sayısı boyunca CopySpread() 'den alınan geçmiş dağılım. Ortalama, standart sapma ve yüzdelik dilimler (p25, p50, p75, p90, p95, p99) olarak raporlanır; tüm değerler pip cinsindendir. Ayrıca, seans etkilerini ortaya çıkarmak için günün UTC saatlerine göre de hesaplanır.
  • SwapSYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT'tan doğrudan okunan uzun ve kısa gecelik swap oranları; swap modu (puan, para birimi, faiz) ve üçlü swap ücretinin uygulandığı hafta içi günü de içerir.
  • Komisyon — yalnızca tanılama amaçlıdır. MQL5, tüm brokerlarda lot başına komisyonu doğrudan bir API çağrısı olarak sunmaz. Komut dosyası, ACCOUNT_COMMISSION_BLOCKED değerini ve tek bir referans işlemden lot başına oranının nasıl hesaplanacağını açıklayan bir notu kaydeder.

Giriş Parametreleri

Parametre Varsayılan Açıklama
InpBars 50000 Örneklem alınacak spread geçmişinin çubuk sayısı. Daha büyük bir değer, daha temsil edici bir dağılım sağlar ve seans varyasyonunu daha iyi yakalar. H1'de 50.000 çubuk yaklaşık 5,7 yılı, M15'te ise yaklaşık 1,4 yılı kapsar. Terminalde sembol için sınırlı geçmiş varsa bu değeri azaltın.
InpOutputFile (boş) Çıktı dosya adını geçersiz kılar. Boş bırakıldığında (varsayılan), dosya <SYMBOL>_costs.csv olarak adlandırılır — örneğin, EURUSD için EURUSD_costs.csv. Dosya, terminal veri klasöründeki MQL5\Files\ dizinine yazılır (FILE_WRITE | FILE_CSV modu).

CSV Çıktı Biçimi

CSV, dört sütunlu bir yapı kullanır: bölüm, anahtar, değer, birim. Bölümler şunlardır:

  • symbol_properties — nokta boyutu, pip faktörü, tick değeri, sözleşme boyutu, para birimi tanımlayıcıları.
  • swap — uzun/kısa oranlar, swap modu, üçlü swap günleri.
  • commission — teşhis değeri ve türetme notu.
  • spread_summary — örneklemdeki tüm çubuklar için ortalama, standart sapma ve yüzdelik dilimler.
  • spread_by_hour — günün her saati için ortalama spread (pip), saat başına bir satır (UTC, broker saati).

Çalıştırma

  1. TransactionCostCollector.mq5 dosyasını MQL5\Scripts\Downloads\ klasörüne yerleştirin ve MetaEditor'da derleyin.
  2. Hedef sembolün herhangi bir zaman dilimindeki grafiğini açın. Zaman dilimi, spread dağılımının hangi çubuk türünden örnekleneceğini belirler — ayrıntı düzeyi ve geçmiş uzunluğu arasında makul bir denge sağlayan H1 önerilir.
  3. Script'i grafiğin üzerine sürükleyin. Giriş diyalog penceresi açılacaktır ( #property script_show_inputs ile kontrol edilir). InpBars'ı istediğiniz örnek sayısına ayarlayın ve Tamam'a tıklayın.
  4. Çıktı CSV dosyasını terminal veri klasöründeki MQL5\Files\ klasöründen alın (MetaTrader 5'teDosya → Veri Klasörünü Aç ).

Python ile entegrasyon

Eşlik eden Python sınıfı TransactionCostModel, CSV dosyasını yükler ve üçlü bariyer etiketlemesi için min_ret değerini hesaplar:

from afml.transaction_costs import load_cost_model
import pandas as pd

model = load_cost_model(
    csv_path           = "EURUSD_costs.csv",
    spread_percentile  = "p95_pips",   # muhafazakar
    slippage_pips      = 0.4,
    commission_per_lot = 7.0,          # referans işlemden
    lot_size           = 0.01,
)

close = pd.read_parquet("EURUSD_H1.parquet")["close"]
min_ret = model.min_ret_for_symbol(
    price_series    = close,
    holding_days    = 1.0,
    cost_multiplier = 1.5,   # 1,5 kat kâr-zarar eşiği
)
print(f"min_ret = {min_ret:.6f}")

Komisyonla İlgili Notlar

Lot başına komisyon oranı, tüm brokerlarda program yoluyla okunamaz. Önerilen prosedür şudur: bir demo hesabında tam olarak 1,0 standart lotluk bir referans işlem açın, işlem açıldıktan hemen sonra terminalden ACCOUNT_COMMISSION_BLOCKED değerini okuyun, ardından işlemi kapatın. Engellenen değer 1,0’a bölündüğünde lot başına oran elde edilir. Hesap ekstresiyle karşılaştırarak doğrulayın. Bu işlem, her broker ilişkisi için bir kez yapılmalıdır.

Neden Ortalama Değil de p95?

Ortalama spread, Asya seansı, gece konsolidasyonu ve düzenli trend koşulları gibi sakin dönemlerden etkilenir. Oysa strateji girişleri genellikle en yüksek belirsizliğin yaşandığı anlarla çakışır (bu, modellerin sinyal ürettiği anlardır). Min_ret girdisi olarak 95. persentil spread'i kullanmak, ortalama piyasa koşulları yerine tipik giriş koşullarındaki maliyet ortamını hesaba katar.

Kaynakça ve İlgili Makale

MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/73173

Institutional Harmonic Volumetric Gravity Center Institutional Harmonic Volumetric Gravity Center

Aritmetik uç değerleri ortadan kaldırmak ve gerçek kurumsal likidite ağırlık merkezini belirlemek için ağırlıklı harmonik ortalama matematik yöntemini kullanan nicel hacim yoğunluğu hesaplama motoru.

Close Profit Positions Close Profit Positions

Kârlı Pozisyonları Kapat

Heiken ashi as series Heiken ashi as series

Tüm tamponlar seri olarak ayarlanmış Heiken Ashi

SetSLByLoss - set Stop Loss on all open positions by target loss amount SetSLByLoss - set Stop Loss on all open positions by target loss amount

Hesap para biriminde belirlenen hedef zarar tutarına göre (örneğin, pozisyon başına 50 $) her açık pozisyonda Stop Loss ayarlayan komut dosyası. Herhangi bir para biriminde yatırılan parayla ve herhangi bir forex sembolünde çalışır. Brokerın stop/dondurma seviyelerini doğrular. Para birimi dönüştürme işlemi otomatik olarak gerçekleştirilir.