
MQL5 Algo Forge'a Geçiş (Bölüm 1): Ana Deponun Oluşturulması
İçindekiler
- Giriş
- Şu anda mevcut olan araçlar
- Geçiş sürecinin başlatılması
- Depo yönetim aracı
- Ana deponun oluşturulması
- Depoyu klonlama
- Yoksayılan dosyaları yapılandırma
- Değişiklikleri işleme
- Arşiv dalı oluşturma
- Proje dalları oluşturmaya hazırlanma
- Sonuç
Giriş
Orta ila büyük ölçekli bir proje üzerinde çalışırken, kaçınılmaz olarak koddaki değişiklikleri takip etme, bunları anlamsal içeriklerine göre gruplandırma ve önceki sürümlere geri dönebilme ihtiyacı ortaya çıkar. Genellikle bu, Git veya Subversion (SVN) gibi sürüm kontrol sistemleri tarafından gerçekleştirilir.
Çoğu geliştirme ortamı, bazı sürüm kontrol sistemlerinin depolarıyla çalışmak için yerleşik araçlar sağlar. MetaEditor bir istisna değildir - SVN tabanlı kendi deposu MQL Storage'ı destekler. Dokümantasyonda belirtildiği gibi:
MQL5 Storage, MQL4/MQL5 kaynak kodları için kişisel bir çevrimiçi depodur. MetaEditor'a entegre edilmiştir: verileri doğrudan editörde kaydedebilir ve depodan alabilirsiniz.
Depolama, sürüm kontrol sistemine sahiptir. Bu, dosyaların ne zaman ve nasıl değiştirildiğini her zaman öğrenebileceğiniz ve değişiklikleri iptal edip önceki sürüme geri dönebileceğiniz anlamına gelir.
MQL5 Storage ile kaynak kodlarınız her zaman güvende kalır. Veriler korumalı bir sunucuda saklanır ve bunlara yalnızca siz erişebilirsiniz. Sabit diskiniz arızalanırsa, önceden kaydedilmiş tüm kodlar kolayca geri yüklenebilir.
Depolama, grafik şablonlarını ve profillerini, MQL5 programlarını test etmek için parametre setlerini ve alım-satım enstrümanları setlerini farklı platformlar arasında kolayca paylaşmanıza ve senkronize etmenize olanak tanır.
MQL5 Storage, paylaşılan projeleri kullanan ekiplerde MQL5 uygulamalarının uzaktan geliştirilmesine olanak tanır.
Ancak Git sürüm kontrol sistemi çok daha popüler hale geldi - ve bana göre de bunu hak ediyor. Belki de bu nedenle, 2024 yılının ortalarında MetaQuotes, Git'i MetaEditor'da yerleşik sürüm kontrol sistemi olarak benimseme planlarını açıkladı ve GitHub'a kendi bünyesinde bir alternatif olan MQL5 Algo Forge'u duyurdu.
Bu makale yazıldığı sırada yeni depo kullanıma hazır durumda, ancak MetaEditor entegrasyonu henüz tamamlanmadı. Bu nedenle, MetaEditor ana geliştirme ortamı olmaya devam ederken, geliştiriciler hala SVN tabanlı MQL Storage ile sınırlıdır.
Çeşitli projelerdeki çalışmalarımızda, mevcut sürüm kontrol sistemini aktif olarak kullandık. Bununla birlikte, "Çok dövizli Uzman Danışman geliştirme" makale serisini yazarken, dallarda paralel kod geliştirme ve bunların daha sonra birleştirilmesi için destek eksikliği özellikle fark edildi. SVN'nin kendisi dallar oluşturmayı desteklerken, MetaEditor bunun için bir arayüz sağlamaz. Harici SVN istemcileri kullanılabilir, ancak bu alışılmış iş akışının yeniden yapılandırılmasını gerektirir.
Bu nedenle, MQL5 Algo Forge'un duyurusu memnuniyetle karşılandı. MetaEditor'ın nihayet dallar oluşturmayı destekleyeceğini umuyorduk. Ancak yedi ay sonra, bu beklentiler hala karşılanmadı. Dolayısıyla, şu anda mevcut olan araçlarla geliştirme sürecini nasıl iyileştirebileceğimizi inceleyelim.
Bu makaleyi daha iyi anlayabilmeniz için sürüm kontrol sistemleri hakkında en azından temel bilgilere sahip olmanız gerekmektedir. Bu nedenle, gerekirse MQL5 web sitesinde veya başka bir yerde bu konuyla ilgili materyalleri, örneğin “Git ile çalışmaya başlama” makalesini okumanızı öneririm.
Şu anda mevcut olan araçlar
MetaQuotes, MQL5 Algo Forge'un hayata geçirilmesiyle ilgili haberleri yayınladıktan kısa bir süre sonra, mevcut MQL Storage'ımızdaki tüm dosyaları içeren mql5 adlı bir depo oluşturuldu. Ancak, bunların hepsi super.admin kullanıcısı altında tek bir committe eklenmişti, yani hiçbir commit geçmişi korunmamıştı. Bu beklenen bir şeydi. Farklı sürüm kontrol sistemleri arasında tüm geçmişleri taşımak neredeyse imkansızdır.
Daha sonra, MetaEditor'daki bazı arayüz öğeleri yeni bir depo adı göstermeye başladı. Örneğin, sürüm geçmişi iletişim kutusunun başlığı "MQL5 Algo Forge" olarak değiştirildi:
Yine de işin özü değişmedi: tüm değişiklikler hala Algo Forge'a değil MQL Storage'a gidiyor. Dolayısıyla, yedi ay önce Algo Forge'a kopyalanan dosyalar o zamandan beri güncellenmedi.
Ancak değişen şey, artık birden fazla depo ile çalışabilmemiz. Önceden sadece bir depo vardı. Her zaman depo kökü olan MQL5 veri klasörü içinde ayrı klasörlerde farklı projeler oluşturmak zorunda kaldık. Bu, yeni bir proje için yeni bir terminal örneği oluşturduğumuzda ve depolamayı etkinleştirdiğimizde, ilgisiz olanlar da dahil olmak üzere tüm projeleri depodan indirdiğimiz anlamına geliyordu. Sayıları arttıkça bu durum uygunsuz hale geldi.
Alakasız projeleri veri klasöründen silmek bir seçenek değildi, çünkü her committe silinen öğelerin depolama alanına gönderilmekten manuel olarak hariç tutulması gerekiyordu.
Uygun bir Git deposu ile artık depolamayı yapılandırmak ve farklı projeleri yönetmek için çeşitli seçeneklerimiz var:
- Her proje kendi deposunda bulunur.
- Her proje tek bir deponun ayrı bir dalında bulunur.
- Karma bir model: bazı projeler ayrı depolarda bulunurken, diğerleri tek bir depoda dallar olarak bir arada bulunur.
Her yaklaşımın artıları ve eksileri vardır. Örneğin, birden fazla proje aynı kütüphaneyi paylaşıyorsa, kütüphaneyi ayrı bir depoda tutmak sakıncalıdır. Bunun yerine, değişiklikleri gerektiğinde proje dallarıyla birleştirerek özel bir dalda tutmak daha iyidir. Öte yandan, kendi kendine yeten projeler için ayrı bir depo tercih edilir çünkü bu, diğer projelerden ilgisiz kodların depolanmasını önler.
Geçiş sürecinin başlatılması
Değişiklik yaparken, halihazırda var olanı korumak akıllıca olacaktır. Otomatik olarak oluşturulan mql5 deposunu kullanmak en iyi fikir olmayabilir, çünkü MetaQuotes orada super.admin altında ek eylemler gerçekleştirebilir. Bu nedenle, öncelikle mevcut tüm projelerimizi depolamak için yeni bir depo oluşturacağız. Bunun için farklı projelerin farklı dallarda depolanması modelini benimseyeceğiz. Bu ayrımı uygulamak için aşağıdaki kuralları tanımlıyoruz:
- Ana dal ya boş kalacak ya da yalnızca tüm projeler tarafından kullanılan minimum ortak kod kümesini içerecektir.
- Ayrı bir arşiv dalı, geçiş sırasında mevcut olan tüm kodları depolayacaktır. Buradan, kodu ayrı proje dallarına kopyalayabiliriz.
- Diğer dallar bireysel projelerle ilgili olacak ve buna göre adlandırılacaktır.
- Bir proje, seçilen dallanma stratejisine bağlı olarak birden fazla aktif dala sahip olabilir (örneğin, “Başarılı bir Git dallanma modeli” bölümünde açıklanan yaklaşım).
Yüklü bir terminali ve bağlı bir MQL Storage’ı olan bir MetaTrader5 klasörümüz olduğunu varsayalım. Yani, terminalin MetaTrader5/MQL5 veri klasörü, standart dosyalarla birlikte projelerimizin kodunu içerir.
MetaTrader5.forge adlı yeni bir klasör oluşturalım ve iki yürütülebilir dosyayı buraya kopyalayalım:
MetaTrader terminalini bu klasörden portable modda başlatalım. Sistemimde, çift tıklama ile bu modda başladı. Aksi takdirde, komut satırından çalıştırırken /portable anahtarını açıkça belirtmeniz veya bu anahtarı uygulama başlatma komutuna ekleyerek bir kısayol oluşturmanız gerekebilir. Bu aşamada bir demo işlem hesabı açmanıza veya MQL5.community'e giriş yapmanıza gerek yoktur.
Yeni klasörde boş bir MQL5 veri klasörü de dahil olmak üzere bir başlangıç klasör yapısı oluşturulur. Henüz dosyalarımızı içermiyor.
F4 tuşuna basarak MetaEditor'ı terminalden başlatalım.
Bir klasör adına sağ tıklarsanız, içerik menüsü MQL5 Algo Forge depolamayı etkinleştirme seçeneği sunar (ancak gerçekte bu MQL Storage’ı etkinleştirecektir). Yeni depo türüne geçmeyi planladığımız için henüz etkinleştirmiyoruz.
Ardından hem MetaTrader'ı hem de MetaEditor'ı kapatıyoruz, çünkü bir süre onlara ihtiyacımız olmayacak ve bazı eylemleri doğrudan terminal klasöründe gerçekleştirmemiz gerekecek.
Depo yönetim aracı
Bir sonraki adım, gelecekteki depo ile çalışmak için bir araç seçmektir. Daha sonra bu rolü MetaEditor'ın kendisi üstlenebilir, ancak şimdilik başka bir şey kullanmamız gerekiyor. Bir Git deposuyla çalışmak için herhangi bir aracı kullanabilirsiniz, örneğin Git ile birlikte Visual Studio Code (VSCode). Git'in Windows sürümü gitforwindows.org adresinden indirilebilir.
Git ve VSCode'u yükleyelim. VSCode'da, MQL5 dosyalarıyla çalışmak için MQL Tools uzantısını yükleyelim:
Uzantıyı yükledikten sonra, ayarlardaki 'Metaeditor5 Dir' parametresinde MetaEditor çalıştırılabilir dosyasının yolunu belirtelim. Bir terminal örneğinin çalışma klasörü dışında bulunan MQL5 kaynak dosyalarıyla çalışmaya gerek olmadığından, öneriyi takip edebilir ve VSCode'da o anda açık olan klasöre göre yolu belirtebilirsiniz:
Uzantı ayarlarında daha aşağıda, "Portable MT5" seçeneğini etkinleştirmenizi şiddetle tavsiye ederiz.
Sözdizimi vurgulaması için C/C++ uzantısını da yüklemeniz gerekir.
Ne yazık ki, MQL5 C++'a çok benzese de, standart C++'da kullanılmayan bazı dil yapıları içerir. Sonuç olarak, uzantı zaman zaman MQL5 bağlamında alakasız sözdizimi hataları görüntüleyebilir.
Şimdi, VSCode'da MetaTrader5.forge/MQL5 veri klasörünü açalım:
Herhangi bir Uzman Danışman dosyasını açmayı deneyelim:
Sözdizimi vurgulaması düzgün çalışıyor ve düzenleyici penceresinin sağ üst köşesinde artık MQL5 sözdizimi denetimi ve MetaEditor aracılığıyla derleme için ek düğmeler görüntüleniyor. Ancak, tüm #include yönergeleri hata iletileri oluşturur. Bunun nedeni MQL5'in C++ olmaması ve standart kütüphane dahil etme dosyalarının konumunun farklı olmasıdır. Bunu düzeltmek için önerilen çözümü izleyin: VSCode için C/C++ uzantısı ayarlarında, MetaTrader5.forge/MQL5/Include yolunu ekleyin.
Bu yapıldığında, hata mesajları kaybolur ve Uzman Danışman başarıyla derlenir:
Bu noktada VSCode'u geçici olarak bir kenara bırakacağız, çünkü asıl oyuncu şimdi sahne alıyor: MQL5 Algo Forge.
Ana deponun oluşturulması
https://forge.mql5.io/ adresine gidin ve yeni bir hesap açın ya da mevcut MQL5.community giriş bilgilerinizi kullanarak giriş yapın:
Sağ üst menüden "Yeni depo" seçeneğini seçin.
Depo için bir ad seçin (örneğin, mql5-main). Depoyu yerel olarak klonlarken, kök klasör için herhangi bir ad belirtebilirsiniz, bu nedenle depo adının kendisi kritik değildir. Başlatma sırasında hem .gitignore hem de README.md dosyalarını ekleyin.
Harika, depo oluşturuldu ve ilk commit otomatik olarak yapıldı:
Sonraki adımlar için depo URL'sini kopyalayın. Bizim durumumuzda bu: https://forge.mql5.io/antekov/mql5-main.git. Artık tarayıcıdan VSCode, MetaEditor ve MetaTrader 5 terminaline dönebiliriz.
Depoyu klonlama
Depoyu yerel olarak klonlamak için terminal dizininde boş bir MQL5 klasörüne ihtiyacımız var. Şu anda zaten dosyalarla dolu, bu yüzden aşağıdaki şekilde devam etmeliyiz:
- VSCode, MetaEditor ve MetaTrader 5'i kapatalım.
- Mevcut MQL5 klasörünü yeniden adlandıralım (örneğin, MQL6 olarak).
Artık MetaTrader5.forge dizininde MQL5 klasörü yok:
Bu klasörü VSCode'da açalım ve [Ctrl + `] tuşlarına basarak VSCode terminalini başlatalım.
Depo URL'sini kopyalayalım ve URL'den sonra yerel deponun kök klasör adını belirterek (MQL5 ile eşleşmelidir) klonlama komutunu çalıştıralım:
git clone https://forge.mql5.io/antekov/mql5-main.git MQL5
Depo özelse ve ilk kez klonluyorsanız, giriş bilgilerinizi girmeniz istenecektir. Sonuç olarak, terminal dizininde .gitignore ve README.md içeren yeni bir MQL5 alt klasörü görünecektir.
Şimdi MetaTrader5.forge/MQL6'daki tüm dosya ve klasörleri MetaTrader5.forge/MQL5'e taşıyalım, ardından eski MetaTrader5.forge/MQL6 klasörünü silelim.
VSCode'da MetaTrader5.forge/MQL5 klasörünü açalım. Sol taraftaki Source Control panelinde, depo klasöründe çok sayıda yeni dosya olduğunu göreceksiniz (bizim durumumuzda 581):
Ancak bu dosyaların çoğu, standart MetaTrader 5 kurulumuna ait oldukları için depomuzda bulunmamalıdır. Yeni sürümlerde, bu standart kütüphanelerin ve örnek projelerin içeriği ve yapısı değişebilir. MetaTrader terminalinin bir sonraki güncellemesi sırasında veya yeni bir çalışma klasörüne geçerken çakışma riski olmadan bunları değiştiremeyiz. Bu nedenle, bunları depomuza dahil etmek için bir neden yok.
Yoksayılan dosyaları yapılandırma
İşte tam da bu noktada .gitignore dosyası kullanışlı hale geliyor. Burada Git'in hangi dosya ve dizinleri görmezden gelmesi gerektiğini belirtebiliriz. Bu şekilde, yüzlerce alakasız değişiklik yerine, sadece kendi dosyalarımızdaki değişiklikleri göreceğiz. Depoya henüz herhangi bir şey eklemediğimiz için, şu anda listelenen tüm dosyalar göz ardı edilmelidir.
Bu amaçla, .gitignore dosyasını açalım ve varsayılan içeriğini aşağıdaki gibi değiştirelim:
# ---> MQL5 # VSCode Preferences .vscode/* # Executables *.ex5 # MQL5 Standard Files /Experts/Advisors/ /Experts/Examples/ /Experts/Free Robots/ /Experts/Market/ /Files/ /Images/ /Include/Arrays/ /Include/Canvas/ /Include/ChartObjects/ /Include/Charts/ /Include/Controls/ /Include/Expert/ /Include/Files/ /Include/Generic/ /Include/Graphics/ /Include/Indicators/ /Include/Math/ /Include/OpenCL/ /Include/Strings/ /Include/Tools/ /Include/Trade/ /Include/WinAPI/ /Include/MovingAverages.mqh /Include/Object.mqh /Include/StdLibErr.mqh /Include/VirtualKeys.mqh /Indicators/Examples/ /Indicators/Free Indicators/ /Libraries/ /Logs/ /Profiles/ /Scripts/Examples/ /Scripts/UnitTests/ /Services/ /Shared Projects/ /experts.dat /mql5.*
Bu şekilde, sürüm kontrol sistemine VSCode ayar dosyalarını, derlenmiş Uzman Danışman ve gösterge dosyalarını (depo genellikle yalnızca kaynak kodu depolar) ve listelenen klasörlerde bulunan standart MetaTrader 5 dosyalarını hariç tutması talimatını veriyoruz. Yalnızca kendi kaynak kodunuz izlenecektir.
Değişiklikleri işleme
.gitignore kaydedildikten sonra, VSCode sadece tek bir değiştirilmiş dosya gösterir - .gitignore'un kendisi. Artık mal5-main depomuzun kök klasörü olan MQL5 klasöründeki diğer tüm dosyalar, fiziksel olarak mevcut olmalarına rağmen, artık yok sayılmaktadır:
Şu şekilde bir mesaj ekleyerek yerel depoda bir commit gerçekleştirelim: "Add standard files to .gitignore" ve "Commit" düğmesine tıklayalım.
Bu noktada, değişiklik yalnızca yerel depoda bulunur. Uzak depoya göndermek için "Push" komutunu çalıştıralım. Bu farklı şekillerde yapılabilir, örneğin "Sync Changes" düğmesine tıklayarak, CHANGES'ın karşısındaki üç noktadan açılan menüden "Push"u seçerek veya 'git push' konsol komutunu manuel olarak çalıştırarak.
Ancak, son commiti yukarı akışa göndermeden önce GRAPH'taki commit geçmişini kontrol edin. İki commit görmelisiniz: "Initial commit" ve "Add standard files to .gitignore". Dal adı, sağ tarafta, commitlerin yanında renkli olarak gösterilir. İlk commit origin/main olarak, ikincisi ise sadece main olarak etiketlenmiştir. Aslında bunlar aynı main dalıdır. Burada, origin uzak deponun bir takma adıdır, bu nedenle origin/ ön eki bu commitin yukarı akış deposundaki main dalındaki son commit olduğu anlamına gelir. İkinci commit bu ön eke sahip değildir, dolayısıyla yalnızca yerel depoda mevcuttur ve sonuncusudur.
"Sync Changes" düğmesine tıklayalım:
Değişiklikler artık uzaktaki depoya başarıyla gönderildi ve mor "origin" etiketi ikinci commite taşındı. Web arayüzünde depoyu görüntüleyerek bunu doğrulayabiliriz:
Bu aşamada, çalışmamız için neredeyse boş bir depo hazırladık. main adlı tek dalı, eklediğimiz iki dosyayı içerir. Bu terminal örneğinin veri klasöründe bulunan diğer tüm dosyalar sürüm kontrol sistemi tarafından yok sayılır.
Arşiv dalı oluşturma
Daha önce de belirtildiği gibi, ilk adım mevcut tüm dosyalarımızı tek bir dala yerleştirmektir, böylece sürüm kontrolü altına girerler ve uzak depoya gönderilebilirler. Bu, gerektiğinde daha sonra bunları başka bir bilgisayardan alabilmemizi sağlar.
Sürüm kontrol sistemindeki diğer işlemler gibi, dallar da farklı şekillerde oluşturulabilir. VSCode'dan depo menüsünü (...) açalım. Ardından "Checkout to…" seçeneğini seçelim.
Ardından, açılan işlemler listesinden "Create new branch…" seçeneğini seçelim.
Web arayüzünde, uzak depodan dallar sekmesine gidelim ve yeni dal oluşturma düğmesine tıklayalım (aşağıda yeşil dikdörtgenle vurgulanmıştır):
Bu iki yöntem arasında bir fark vardır. İlki yerel bilgisayarda yeni bir dal oluşturur ve siz değişiklikleri gönderene kadar uzak depo bu dal hakkında hiçbir şey bilmez. İkinci yöntem uzak depoda yeni bir dal oluşturur, böylece yerel depo siz değişiklikleri pull komutu ile alana kadar bu dalın varlığından haberdar olmaz. Her iki durumda da, pull veya push komutlarını çalıştırarak senkronize etmeniz yeterlidir.
Üçüncü yol ise komut satırını kullanmaktır. Yerel depoda "archive" adında yeni bir dal oluşturmak için, örneğin depo klasöründen aşağıdaki komutu çalıştırabiliriz:
git checkout -b archive
Bunu VSCode'daki entegre terminalde yaparsak, şunu görürüz:
Terminal bize deponun yeni oluşturulan "archive" dalına geçirildiğini bildiriyor. Commit listesinde, main dal adı archive olarak değiştirildi. Değişiklik günlüğü bizden yeni dalı uzak depoya göndermemizi isteyecektir. Ancak, önce dosyalarımızı bu dala ekleyeceğiz.
MetaTrader terminalinde, tüm dosyalarımızın bulunduğu MQL5 klasörünü içeren bir başlangıç klasörümüz vardı. Depo başka bir terminal klasörünün içinde oluşturulmuştu. Şimdi, eski orijinal MetaTrader5/MQL5 klasöründeki tüm dosyaları yeni deponun klasörüne kopyalayalım:
Sürüm kontrol sistemi, depo klasöründeki yeni dosyaları hemen algıladı ve bunlar için belirli eylemler kullanılabilir hale geldi. Tüm yeni dosyaları indekse eklememiz gerekir (sürüm kontrolünü etkinleştirmek için). Bu işlem VSCode arayüzü üzerinden değişiklik listesi başlığından "+" (Stage All Changes) düğmesine tıklanarak ya da şu komut çalıştırılarak yapılabilir:
git add .
Artık değişiklik listesindeki her dosya U yerine A ile etiketlendi, yani indekse eklendi. Ardından, değişiklikleri commit edelim ve uzak depoya gönderelim:
Gördüğümüz gibi, main dalındaki son commit artık ikinci committir, üçüncü commit ise archive dalında yapılmıştır. Yeni dalın uzak depoya gönderildiğini doğrulayalım:
En son yapılan commit uzak depoda görünüyor ve yeni archive dalına ait. Üzerine tıklayarak bu commite hangi değişikliklerin eklendiğini görebiliriz:
Bu noktada, tüm dosyalar arşiv dalına başarıyla eklenmiştir. Şimdi, yerel depomuzdaki main dalına geri dönelim.
Proje dalları oluşturmaya hazırlanma
Ana dala geçmek için konsolda aşağıdaki komutu çalıştıralım.
git checkout main
Yerel depo, tüm dosyaları kopyalamadan önceki durumuna geri dönmelidir. Ancak, geçiş yaptıktan sonra MQL5 klasörünün içeriğini incelediğinizde, Uzman Danışman klasörlerimizin çoğunun kaldığını fark edebilirsiniz.
Bu klasörler hala derlenmiş .ex5 dosyalarını içeriyor. Mesele şu ki, bunları sürüm kontrol sistemi tarafından izlenmekten hariç tuttuğumuz için, arşiv dalından ana dala geçiş yapıldığında bu dosyalar dokunulmadan kaldı. Yalnızca stage ve commit edilen kaynak dosyalar klasörden kaldırıldı.
Bu çok uygun değildir, bu nedenle derlenmiş dosyaları ve bunları sildikten sonra kalan boş dizinleri kaldırmamız gerekir. Bunu manuel olarak yapmak zaman alıcı olacaktır, özellikle de gelecekte tekrarlamamız gerekebileceğinden. Bu nedenle, bu görevi otomatik olarak yerine getirmek için basit bir komut dosyası yazmak daha pratiktir.
Komut dosyası geliştirme sırasında, dal değiştirdikten sonra kök klasörü orijinal durumuna geri getirmek için dosyaları silmenin tek başına yeterli olmadığı anlaşıldı. .ex5 dosyaları silindikten sonra boşalan dizinleri de kaldırmak gerekir. Bazı klasörler kasıtlı olarak boş olabilir ve kaldırılmamalıdır. Bunlar bir dışlama listesine eklenecektir. Bu liste, daha önce .gitignore'da listelenen tüm klasörlerin yanı sıra sürüm kontrolü meta verilerini içeren .git klasörünü de içerecektir.
İşte böyle bir komut dosyası örneği:
import os def delete_ex5_files_and_empty_dirs(path, excluded=['.git', '.vscode']): # Exceptions excluded = {os.path.join(path, dir) for dir in excluded} # Check all folders and files in the directory tree for root, dirs, files in os.walk(path, topdown=False): is_excluded = False for ex in excluded: if root.startswith(ex): is_excluded = True break if is_excluded: continue # Delete all files with extension .ex5 for file in files: if file.endswith('.ex5'): file_path = os.path.join(root, file) os.remove(file_path) print(f'File removed: {file_path}') # Delete all folders that have become empty after deleting files for dir in dirs: dir_path = os.path.join(root, dir) # IF the directory is empty after deleting files if dir_path not in excluded and not os.listdir(dir_path): try: os.rmdir(dir_path) print(f'Empty folder removed: {dir_path}') except OSError: pass # If error occurred, ignore excluded = [ '.git', '.vscode', 'Experts\\Advisors', 'Experts\\Examples', 'Experts\\Free Robots', 'Experts\\Market' 'Files', 'Images', 'Include\\Arrays', 'Include\\Canvas', 'Include\\ChartObjects', 'Include\\Charts', 'Include\\Controls', 'Include\\Expert', 'Include\\Files', 'Include\\Generic', 'Include\\Graphics', 'Include\\Indicators', 'Include\\Math', 'Include\\OpenCL', 'Include\\Strings', 'Include\\Tools', 'Include\\Trade', 'Include\\WinAPI', 'Indicators\\Examples', 'Indicators\\Free Indicators', 'Libraries', 'Logs', 'Presets', 'Profiles', 'Scripts\\Examples', 'Scripts\\UnitTests', 'Services', 'Shared Projects', ] if __name__ == '__main__': current_dir = os.getcwd() # Current working directory delete_ex5_files_and_empty_dirs(current_dir, excluded)
Bu komut dosyasını depo kök dizinine clean.py olarak kaydedelim ve ana daldaki sürüm kontrolüne ekleyelim. Şu andan itibaren, arşivden ana dala geri döndükten sonra, derlenmiş dosyaları ve boş klasörleri otomatik olarak temizlemek için bu komut dosyasını çalıştırmamız yeterlidir.
Sonuç
Yeni depo sistemiyle yaptığımız ilk deneyleri burada sonuçlandırıyoruz. Tüm dosyalarımız başarılı bir şekilde bu depoya aktarıldı. Yeni projeler için yeni proje dalları oluşturmanın temelini attık. Kod arşiv dalında güvenli bir şekilde saklandığından, projeleri gerektiğinde kademeli olarak ayrı dallara taşıyabiliriz.
Bir sonraki ilginç adım, "Çok dövizli Uzman Danışman geliştirme" makale serimizin kaynak kodu için herkese açık bir depo oluşturmayı denemek olacaktır. Serinin farklı bölümlerindeki kodların nasıl yapılandırılacağı hala belirsiz, ancak bunu yakın gelecekte ele alacağız.
İlginiz için teşekkür ederim! Yakında görüşmek üzere.
Arşiv içeriği
# | Ad | Sürüm | Açıklama |
---|---|---|---|
MQL5 | Depo kök klasörü (terminal veri klasörü) | ||
1 | .gitignore | 1.00 | Git sürüm kontrol sistemi tarafından göz ardı edilecek klasör ve dosyaları listeleyen dosya |
2 | clean.py | 1.00 | Deponun ana dalına geçerken derlenmiş dosyaları ve boş dizinleri silmek için komut dosyası |
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/17646
Uyarı: Bu materyallerin tüm hakları MetaQuotes Ltd.'a aittir. Bu materyallerin tamamen veya kısmen kopyalanması veya yeniden yazdırılması yasaktır.
Bu makale sitenin bir kullanıcısı tarafından yazılmıştır ve kendi kişisel görüşlerini yansıtmaktadır. MetaQuotes Ltd, sunulan bilgilerin doğruluğundan veya açıklanan çözümlerin, stratejilerin veya tavsiyelerin kullanımından kaynaklanan herhangi bir sonuçtan sorumlu değildir.





- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Dürüst olmak gerekirse, bu senaryo gerçekten dikkate alınmadı. Bir kullanıcının forumda yasaklanmasının mevcut MQL Depolama deposuna erişimi kısıtlayıp kısıtlamadığını ve bunun yeni depoya erişimi de kısıtlayıp kısıtlamayacağını bilmiyorum. Eğer öyleyse, bu risk faktörü kesinlikle dikkate alınmaya değerdir.
Bunu kontrol etmek zordur - bu nedenle risk değerlendirmesi teoriktir ;-) ancak böyle bir risk vardır
MQLStorage, topluluğa giriş yapılmasını gerektirir. Giriş yapmanın teknik olasılığı yöneticilerin elindedir. Teorik olarak, kuralları ciddi bir şekilde ihlal ederseniz (veya birisi bunu ciddi olarak düşünürse) sert bir yasak alabilirsiniz. Geçici bir yasaklama ile krode sadece "haklarda yenilgi" olarak, yani sadece sitenin bileşenleri ve bireysel hizmetler yasaklanır.
Ancak ban-po-ip kazanmış sanallar, sunucular, veri merkezleri, ağlar da var. MQLStorage büyük olasılıkla oradan kullanılamaz. Kişisel çaba harcamadan ve hatta sadece dinamik ip ile alabilirsiniz :-)
Bu tür riskleri en aza indirmek için - tam yedekleri ve deponun bağımsız bir aynasını tutun. Bu da ayrı bir zevk...
İlk olarak, https://forge.mql5.io/ iki yetkilendirme seçeneğine sahiptir. MQL5.com'dan tamamen bağımsız bir hesap oluşturabilirsiniz
İkinci olarak, forum yasağı sadece gönderi yasağı anlamına gelir ve diğer hizmetler üzerinde herhangi bir etkisi yoktur.
Üçüncüsü, yasakların bununla ne ilgisi var? Robotların geliştirilmesine dahil olun, forumlara değil.
İlk olarak, https://forge.mql5.io/ iki yetkilendirme seçeneğine sahiptir. MQL5.com'dan tamamen bağımsız bir hesap oluşturabilirsiniz
Ancak mql5.com'a bağlı değilsem ME projelerine nasıl erişebilirim? Oradaki topluluğa giriş yapmak zorunlu gibi görünüyor.
Ve sonra mql5.com'a bağımlılık yoksa ME'den projelere nasıl erişilir? Oradaki topluluğa giriş yapmak gerekli gibi görünüyor.
Oh, doğru. Hesap zaten MQL5.com'da oluşturulacaktır.
Ve sonra mql5.com'a bağımlılık yoksa ME'den projelere nasıl erişilir? Oradaki topluluğa giriş yapmak gerekli gibi görünüyor.
Henüz topluluğa giriş yapmak zorunda değilsiniz. Algo Forge veya GitHub gibi herhangi bir depodan bir depoyu MQL5 veri klasörünün içindeki bir klasöre klonlarsanız, sadece dosya içeren bir klasör olarak görünür. Bu düzenleme, başlatma ve hata ayıklama için yeterlidir, ancak depoyla ilgili tüm işlemlerin üçüncü taraf araçlar kullanılarak gerçekleştirilmesi gerekecektir. Bu seçeneği bir süre kullandım, ME henüz Algo Forge ile çalışamıyordu. Ancak genel olarak mql5.com hesabı ile daha kolaydır.