Uzman Danışmanlar: "Algoritmik Ticaret için MQL5’te Sinir Ağları" kitabından örnekler - sayfa 2

 

İ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?


 
bobozel1 #:

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

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| Harici parametreler|
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // Dönem başı
input datetime End = D'2020.12.31 23:59:00';    // Dönem sonu
//--- Veri yazmak için dosyayı açın
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
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.

DosyaAç

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:

  • Kanal adı şu şekilde olması gereken bir dizedir: "\\servername\pipe\pipename", burada servername ağdaki sunucunun adı ve pipename kanalın adıdır. Kanallar aynı bilgisayarda kullanılıyorsa, sunucu adı atlanabilir, ancak bunun yerine bir nokta kullanılmalıdır: "\\.\pipe\pipename". Kanala bağlanmaya çalışan istemci kanalın adını bilmelidir.
  • FileFlush() ve FileSeek(), kanaldan okuma ve kanala yazma işlemleri arasında dosyanın başında çağrılmalıdır.

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


 
Aleksey Vyazmikin #

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.

 
bobozel1 #:

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.

 
Aleksey Vyazmikin #:

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?
 
bobozel1 #:

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.


 
Aleksey Vyazmikin #:

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! Her şey işe yaradı.
 
bobozel1 #:
Teşekkür ederim! İşe yaradı.

Bir şey değil.

 
En sıkıntılı şey bu değil. En sıkıntılı şey, parametreleri optimize ettikten sonra yalnızca bir yıl boyunca kazanabilmenizdir. Başka bir yıl için değiştirirseniz tekrar çalışmaz. Bu da yazarın önerisinin uygulanabilir olmadığı anlamına geliyor. Parametreler yıldan yıla büyük farklılıklar gösterebilir. Belki de her yıl kârlı olabilecek böyle bir parametre seti yoktur!
 

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.

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.07.15
  • www.mql5.com
Trader's profile