Uzman Danışmanlar: "Algoritmik Ticaret için MQL5’te Sinir Ağları" kitabından örnekler - 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
İyi günler,
Kitapta yer alan ve bir csv dosyası oluşturan ilk betiği çalıştırmaya çalışıyorum.
Adı initial_data.mq5.
İlk adımda komut dosyasını çalıştırırken:
If(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||
CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||
CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 ||
CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0)
dönüş;
CopyClose her zaman -1'e eşittir
ve komut dosyası çöküyor, yeniden çalıştırmalar yardımcı olmuyor ve yorumlarda okuduğum gibi
bu normal bir durum ve sunucudan veri gelmediği anlamına geliyor.
Ancak, veri dosyalarının yolunun bu kodda nasıl yazıldığını tam olarak anlamıyorum.
MQL5 dokümantasyonunda yazılmıştır:
Örneğin, MetaQuotes-Demo işlem sunucusundan alınan EURUSD sembol verileriterminal_directory\bases\MetaQuotes-Demo\history\EURUSD\klasöründe yer alacaktır.
Ve .hcc çözünürlüklü dosyalarım ve üzerinde H4.hc gibi dosyalar bulunan \cache alt dizinim var
Ancak initial_data.mq5 kodunda, yolun yazıldığı tek bir yer vardır.
PrintFormat("Korelasyon katsayıları %s\\\\Files\\\\%s dosyasına kaydedildi",
TerminalInfoString(TERMINAL_DATA_PATH), FileName);
I çıkış TERMINAL_DATA_PATH
2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Bu dosyaların yolunu doğru bir şekilde belirtmek için ne yapmalıyım yoksa MQL5 mantığına göre bunları terminal dizininden otomatik olarak mı bağlamalı?
Verileri bir csv dosyasına nasıl indirebilirim?
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum
Yeni başlayanların MQL4 ve MQL5 ile ilgili her türlü sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma
Aleksey Vyazmikin, 2024.06.18 06:28 pm
DosyaAçParametreler
open_flags
[in] dosya ile çalışma modunu tanımlayan bayraklar kombinasyonu. Bayraklar aşağıdaki gibi tanımlanmıştır:
FILE_READ dosya okuma için açılır
FILE_WRITE dosya yazmaiçin açılır
FILE_BINikili okuma-yazma modu (dizeden dizeye dönüştürme yok)
FILE_CSVcsv türünde dosya (yazılan tüm öğeler uygun türde dizelere dönüştürülür, unicode veya ansi ve bir sınırlayıcı ile ayrılır)
FILE_TXTdüz metin dosyası (aynı csv , ancak ayırıcı dikkate alınmaz)
FILE_ANSIANSI tipi dizeler (tek bayt karakterler )
FILE_UNICODE UNICODE tipi dizeler (çift bayt karakterler)
FILE_SHARE_READbirkaç program tarafından paylaşılan okuma erişimi
FILE_SHARE_WRITEbirkaç program tarafından paylaşılan yazma erişimi
FILE_COMMONtüm istemci terminallerinin ortak klasöründeki dosya konumu \Terminal\Common\Files.
Not
Güvenlik nedenleriyle, dosyalarla çalışma MQL5 dilinde sıkı bir şekilde kontrol edilir. MQL5 dil araçları kullanılarak dosya işlemleri için kullanılan dosyalar, dosya "sanal alanı" dışında bulunamaz.
Bir dosyanın belirli bir kodlamada okunması gerekiyorsa (kod sayfası değerine sahip kod sayfası parametresi belirtilir), FILE_ANSI bayrağı ayarlanmalıdır. FILE_ANSI bayrağı belirtilmediğinde, metin dosyası herhangi bir dönüştürme yapılmadan Unicode olarak okunacaktır.
Dosya,istemci terminalinin MQL5\Files alt klasöründeki klasöründe (veya test durumunda test aracısı_ajan\MQL5\Files dizininde)açılır. Bayraklar arasında FILE_COMMON belirtilmişse, dosya tüm istemci terminallerinin ortak klasöründe açılır \Terminal\Common\Files.
"Adlandırılmış kanalları" aşağıdaki kurallara göre açabilirsiniz:
Yukarıdaki satırlarda özel ters eğik çizgi karakteri '\' kullanılır, bu nedenle MQL5 programında isim yazılırken '\' iki katına çıkarılmalıdır, yani yukarıdaki örnek kodda "\\\\servername\\pipe\\\pipename" şeklinde yazılmalıdır.
Adlandırılmış kanallarla çalışma hakkında daha fazla ayrıntı için lütfen "DLL olmadan Adlandırılmış Kanallar aracılığıyla MetaTrader 5 ile İletişim" makalesini okuyun
Açıkçası cevaptan bir şey anlamadım, sanki bir robot yazıyormuş gibi. Oluşturulacak dosyanın nereye yazıldığını biliyorum ama oluşturulmuyor.
Spesifik bir sorum var .hcc ve .hc dosyalarından veri alıp .csv ye nasıl yazılır?
Sonuç olarak kitaptaki initial_data.mq5 betiğini çalıştırıyorum:
CopyClose her zaman -1'dir. Bu nasıl düzeltilir?
Veri dosyalarının yolu doğru yazılmadığı için bu dosyaları görmediğinden şüpheleniyorum.
Veri dosyalarının yolunu nasıl doğru yazabilirim?
Benim durumumda, veri dosyaları sandbox içindeki terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ klasöründe.
Bir haftadır bununla uğraşıyorum, her şeyi okudum ama bir çözüm bulamadım. Lütfen bana yardım edin.
Açıkçası cevaptan bir şey anlamadım, sanki bir robot yazıyormuş gibi. Oluşturulacak dosyanın nereye yazıldığını biliyorum ama oluşturulmuyor.
Özel bir sorum var, .csv'ye yazmak için .hcc ve .hc dosyalarından nasıl veri alınır?
Sonuç olarak kitaptaki initial_data.mq5 komut dosyasını çalıştırın:
CopyClose her zaman -1'dir. Bunu nasıl düzeltebilirim?
Veri dosyalarının yolu doğru yazılmadığı için bu dosyaları görmediğinden şüpheleniyorum.
Veri dosyalarının yolu nasıl doğru şekilde belirtilir?
Benim durumumda, veri dosyaları sandbox içindeki terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ klasöründe bulunur.
Bir haftadır bununla uğraşıyorum, her şeyi okudum ama bir çözüm bulamadım. Lütfen bana yardım edin.
Tüm veriler platformdan alınır, kullanıcı terminalin bunları nereden - hangi dosyadan aldığıyla ilgilenmez.
Kod, grafiğe yansıtılan verilerle çalışır.
Grafikte fiyat teklifi talep ettiğiniz tarihler olup olmadığını kontrol edin.
Tüm veriler platformdan alınır, kullanıcı terminalin bunları nereden - hangi dosyadan - aldığıyla ilgilenmez.
Kod, grafiğe yansıtılan verilerle çalışır.
Teklif talep ettiğiniz çizelgede tarih olup olmadığını kontrol edin.
Lütfen bunun ne anlama geldiğini açıklayın.
Komut dosyasında bir aralık vardır
giriş datetime Başlangıç = D'2015.01.01.01 00:00:00'; // Dönem başlangıcı
giriş datetime End = D'2020.12.31 23:59:00'; // Dönem sonu
M5 üzerinde
M5'te EURUSD grafiğini alıp 2015.01.01' e kaydırmalı ve ardından betiği üzerinde çalıştırmalı mıyım?
Yoksa senaryoyu MN üzerinde çalıştırabilir miyim? Ve yeni kenelerle başa mı dönüyor?Lütfen bunun ne anlama geldiğini açıklayabilir misiniz?
Komut dosyasında bir aralık vardır
giriş datetime Başlangıç = D'2015.01.01.01 00:00:00'; // Dönem başlangıcı
giriş datetime End = D'2020.12.31 23:59:00'; // Dönem sonu
M5 üzerinde
M5'te EURUSD grafiğini alıp 2015.01.01' e kaydırmam ve ardından komut dosyasını üzerinde çalıştırmam gerekiyor mu?
Yoksa senaryoyu MN üzerinde çalıştırabilir miyim? Ve yeni kenelerle başa mı dönüyor?Terminaldeki yardımı okuyun. Ve işte başka bir şey.
Penceredeki maksimum çubuk sayısı aracılığıyla bir geçmiş derinliği ayarı olduğunu öğreneceksiniz. Değişikliklerin etkili olması için terminali yeniden yüklemeniz gerekir.
Bu nedenle, tüm TF'ler için maksimum geçmiş derinliğini bir kerede iş için gerekli olan en küçük TF'ye göre ayarlamak gerekir.
Günler için 100 bar ve dakikalar için 100 barın barlarda aynı derinliği vereceği, ancak tarihlerde vermeyeceği açıktır.
Gerekli değeri veya "Sınırsız "ı ayarladığınızda ve terminali yeniden yüklediğinizde, geçmiş gerekli dönem için mevcutsa, komut dosyasını aylık TF üzerinde çalıştırabilirsiniz.
Terminal yardımını okuyun. Ve işte bir tane daha.
Penceredeki maksimum çubuk sayısı aracılığıyla bir geçmiş derinliği ayarı olduğunu öğreneceksiniz. Değişikliklerin etkili olması için terminali yeniden yüklemeniz gerekir.
Bu nedenle, tüm TF'ler için maksimum geçmiş derinliğini, iş için gerekli olan en küçük TF tarafından bir kerede ayarlamak gerekir.
Günler için 100 çubuk ve dakikalar için 100 çubuğun çubuklarda aynı derinliği vereceği, ancak tarihlerde vermeyeceği açıktır.
Gerekli değeri veya "Sınırsız "ı ayarlayıp terminali yeniden yüklediğinizde, geçmiş gerekli dönem için mevcutsa, betiği aylık TF üzerinde çalıştırabilirsiniz.
Teşekkür ederim! İşe yaradı.
Bir şey değil.
Bu kitaptaki tüm çabalarınız için teşekkür ederim Dmitry . Gerçekten çok faydalı.
Neuronbase.mqh dosyasında ElasticNet Regularization yöntemini kitabınızda açıklama yapmadan aşağıdaki gibi uyguluyorsunuz.
m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]
Ancak temel formülden (+) veya örneğin Keras kaynak kodundan (+) farklıdır.
Lütfen uygulama yönteminizi açıklayın. Neden tam formül yerine sadece lambda kullanıyorsunuz ve neden ağırlıkları bunlardan biriyle çarpıp diğeriyle topluyorsunuz.