English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
MQL5 Algo Forge'a Geçiş (Bölüm 3): Kendi Projelerinizde Harici Depoları Kullanma

MQL5 Algo Forge'a Geçiş (Bölüm 3): Kendi Projelerinizde Harici Depoları Kullanma

MetaTrader 5Örnekler |
31 0
Yuriy Bykov
Yuriy Bykov

Giriş

MQL5 Algo Forge'a geçişimizin ikinci bölümünde, önemli zorluklardan birini çözmeye odaklandık - birden fazla depo ile çalışma. Adwizard kütüphane projesi ve Simple Candles Uzman Danışmanı kombinasyonunu kullanarak, çoğunlukla dosya dahil etme yolları ve dal birleştirme ile ilgili sorunlarla karşılaştık ve bunları başarıyla çözdük. Ayrıca, düzeltmeler için ayrı bir dal oluşturmaktan “Pull talebi” aracılığıyla birleştirmeye kadar tüm iş akışı boyunca MetaEditor araçlarını (mümkün olan yerlerde) kullanmaya çalıştık. Ancak MetaEditor işlevselliğinin yeterli olmadığı durumlarda MQL5 Algo Forge web arayüzüne, Visual Studio Code'daki harici bir Git istemcisine veya Git konsol komutlarına geçtik. Bu, bireysel geliştirmede bile, projenizdeki düzeni ve değişikliklerin net bir geçmişini korumak için Git'in en iyi yöntemlerini nasıl uygulayabileceğinizi açıkça göstermiştir.

Ancak bu sadece bir tarafıydı: geliştiricinin kullanılan tüm depolara sahip olduğu "kapalı" bir ekosistem. Mantıklı bir sonraki adım ve Git'e geçmenin ana nedenlerinden biri, diğer topluluk üyelerinin herkese açık depolarından tam olarak yararlanabilmektir. Dağıtık geliştirmenin gerçek potansiyeli burada ortaya çıkıyor: üçüncü taraf kodunu kolayca bağlama ve güncelleme, geliştirilmesine katkıda bulunma ve hazır, iyi test edilmiş bileşenlerden karmaşık projeler oluşturma yeteneği. 

Bu makalede, nihayet bu heyecan verici ama aynı zamanda daha karmaşık görevi ele alacağız: MQL5 Algo Forge’daki üçüncü taraf depolardan kütüphanelerin pratikte nasıl bağlanacağı ve kullanılacağı. Ve "gelecekte bir gün" değil, MetaEditor'ın depo araçlarının daha da geliştirilmesini beklemeden hemen şimdi yapacağız. 


Yol haritasını çizme

Bu makalede, denemeler için mükemmel bir test alanı olarak hizmet edecek olan Simple Candles proje depomuzla çalışmaya devam edeceğiz. Mevcut alım-satım stratejisi, standart Average True Range (ATR) göstergesine işlevsel olarak benzer özel bir volatilite hesaplaması içerir. Ancak, yalnızca kendi uygulamamıza güvenmek yerine, topluluktan özelleşmiş, kullanıma hazır çözümleri dahil ederek kodu nasıl geliştirebileceğimizi araştıracağız.

Bunu yapmak için, göstergenin daha gelişmiş ve optimize edilmiş bir versiyonunu içerdiğini varsayarak halka açık SmartATR deposuna başvuracağız. Uzun vadeli pratik hedefimiz, Uzman Danışmanı dahili hesaplamayı kullanmaya devam etmek veya harici SmartATR kütüphane algoritmasına geçmek arasında seçim yapabilecek şekilde değiştirmektir. Ancak bu makalede, tamamen işlevsel bir Uzman Danışman oluşturmaya odaklanmayacağız, bunun yerine harici depolarla çalışmanın temel yönlerini inceleyeceğiz.

Bunu başarmak için şunları yapmamız gerekiyor. SmartATR kütüphane kodunu yerel makinemize indireceğiz ve projemize dahil etmek için ayarlayacağız. Çalışma ortamımıza harici bir deponun nasıl ekleneceğini ele alacağız, böylece daha sonra yeni sürümler yayınlandığında kolayca güncellenebilir. Devamında, hem Simple Candles projesine hem de (gerekli olduğu ortaya çıktıkça) SmartATR kütüphane kodunun kendisine değişiklikler uygulayacağız. İdeal olarak, son adımdan kaçınabiliriz, ancak bizim durumumuz bunu gerektirdiğinden, bunu başka birinin deposuna nasıl değişiklik yapılacağına dair pratik bir örnek olarak kullanacağız. Son olarak, SmartATR kütüphanesinin projemizin bir parçası olarak başarılı bir şekilde dahil edilip derlenip derlenemeyeceğini test ederek entegrasyonu doğrulayacağız.

Bu yaklaşım, harici kodu entegre etme sürecinin tamamında dikkatli bir şekilde ilerlememizi sağlayacaktır. Kazanılan deneyim evrensel olacaktır: bir kütüphaneyi başarıyla ekledikten sonra, aynı yaklaşımı kullanarak MQL5 Algo Forge'dan başka herhangi bir herkese açık depoyu projelerimize dahil edebileceğiz.


Harici kodu elde etme

İlk bakışta bunun bir sorun teşkil etmemesi gerekir. Herhangi bir Git deposu, standart konsol komutu kullanılarak yerel bir bilgisayara klonlanabilir:

git clone ...

Ancak, belirli bir sırayı takip etmeyi kabul ettik: önce MetaEditor arayüzü, ardından MQL5 Algo Forge web arayüzü üzerinden çalışmayı denemek ve yalnızca bu yaklaşımlar başarısız olursa Visual Studio Code veya Git konsol komutları gibi harici araçlara başvurmak.

İlk soru şu: MetaEditor'da başka birinin deposunu klonlama için seçmek üzere nasıl görüntüleyebiliriz? Kısmi cevap yardım dokümantasyonunda bulunabilir, ancak çok az kullanıcı hemen nereye bakacağını bilir. Ben de bu sayfaya sonradan rastladım. Bundan önce, MetaEditor'daki Shared Projects klasörünün yalnızca kendi depolarımızı gösterdiğini fark ettim. MetaEditor'ın Kılavuz penceresinden bu klasör için mevcut olan içerik menüsü seçeneklerini denedim. 

Yeni Proje seçeneği burada doğru seçenek değildir, çünkü yalnızca bize ait yeni bir depo oluşturur. Yenile seçeneği herhangi bir harici depo da eklemiyor. 'Tüm dosyaları göster' seçeneği garip davranıyor: çalıştırdıktan sonra, henüz yerel olarak klonlanmamış depolarımız için yinelenen adlar ortaya çıkıyor. Neyse ki, Yenile düğmesine tıklandığında bu yinelenen adlar kaldırılıyor. Son umudumuz ‘Tüm herkese açık projeleri göster’ seçeneğiydi, bu da görünür bir değişiklik yaratmadı.

Ne yazık ki bu, harici depoları klonlamak için şimdilik yalnızca MetaEditor'a bağlı kalamayacağımız anlamına geliyor. Hedefimize ulaşmak için birkaç alternatif yaklaşıma bakalım.


Birinci yaklaşım: Doğrudan klonlama

Bir deneyle başlayalım. Shared Projects içinde rastgele bir adla (örneğin, TestRepo) boş bir klasör oluşturursak, MetaEditor'da görünür hale gelir. Buradan, içerik menüsünden Clone komutunu bile çalıştırabiliriz. Ancak, günlüğe bakılırsa, MetaEditor, Algo Forge’daki kişisel depolama alanımızdan aynı ada sahip bir depoyu (TestRepo) klonlamaya çalışıyor - tabii ki var olmayan bir depo:

Bu, yöntemin başka birinin deposunu klonlamak için çalışmayacağını doğruluyor. Bunun yerine ‘git clone ...’ konsol komutunu kullanarak SmartATR deposunu doğrudan Shared Projects’e klonlamayı deneyelim ve ne olacağını görelim.

Klonlamadan sonra, Shared Projects'te yeni bir SmartATR klasörü görünür ve MetaEditor'ın Kılavuz penceresinde görüntülenir. Daha da önemlisi, bu depoyu yalnızca görüntülemekle kalmaz, aynı zamanda onunla bir depo olarak da çalışabiliriz: Pull işlemini gerçekleştirebilir ve değişiklik geçmişini doğrudan MetaEditor'dan görüntüleyebiliriz.

Dolayısıyla, MetaEditor'da şu anda eksik olan şey, kullanıcının MQL5 Algo Forge'dan bir deponun URL'sini belirtmesine veya alternatif olarak MQL5 Algo Forge'daki tüm herkese açık depoları aramak ve seçmek için bir iletişim kutusu (web arayüzündeki Keşfet bölümüne benzeyen) açmasına olanak tanıyan ‘Clone from...’ gibi bir içerik menüsü seçeneğidir. Bir başka olası iyileştirme de, Shared Projects altında yalnızca kişisel depoları değil, aynı zamanda kullanıcının web arayüzünde yıldızladığı herkese açık depoları da (Yıldızlanmış depolar) görüntülemek ve görünürlüklerini değiştirebilmek olabilir. Ancak MetaEditor'da ne gibi değişiklikler olabileceği konusunda çok fazla tahminde bulunmayalım.

Başarıyla klonlanmış SmartATR depomuza dönersek, belirlenen hedefe ulaşıldığını söyleyebiliriz. Projenin kaynak kodu artık yerel olarak mevcuttur, bu da onu kendi projelerimizde kullanabileceğimiz anlamına geliyor. Ancak, bir nüans var. Doğrudan kullanıma yalnızca SmartATR kodunda herhangi bir değişiklik yapılmasını gerektirmiyorsa, yani “kutudan çıktığı gibi” kullanabiliyorsak ve yalnızca yeni sürümler yayınlandığında güncelleme yapabiliyorsak devam edebiliriz. Bakalım bunu yapabilecek miyiz?


İşlevselliği kontrol etme

SmartATR projesi kapsamında, (açıklamaya göre) daha gelişmiş bir yaklaşım kullanarak Average True Range (ATR) hesaplayan bir MetaTrader 5 göstergesinin kaynak kodunu içeren bir dosya aldık. Derlemeyi deneyelim... ve hemen bir hatayla karşılaşıyoruz. 

Hatanın ne kadar ciddi olduğuna bakılmaksızın, önemli olan nokta şudur: değişiklik yapmadan projeyi kullanamayız. Bu aşamada, düzeltmeleri yalnızca yerel kullanımımız için mi uygulayacağımıza yoksa bunları paylaşıp orijinal depoya katkıda bulunup bulunmayacağımıza karar vermeliyiz. Diğer geliştiriciler de bu projedeki kodu kullanmaya çalışırken aynı sorunla karşılaşabilir. Bu nedenle, açık kaynak geliştirme felsefesiyle uyumlu olduğu için ikinci seçenek daha çok tercih edilmelidir.

Ancak şimdilik, şu anda düzeltmeleri yayınlamayacağımızı varsayalım. Öncelikle hataları çözmemiz gerekiyor; ancak o zaman yayınlayacak anlamlı bir şeyimiz olur. Bu durumda, SmartATR projesinde yalnızca yerel değişiklikler yapmayı planlıyorsak, yeni bir yerel dal oluşturabiliriz. 

Bunu yapmaya çalışalım. Orijinal SmartATR deposu yalnızca bir main dalı içerir, bu nedenle MetaEditor'daki proje klasörünün içerik menüsü aracılığıyla yeni bir develop dalı oluşturacağız. Oluşturduğumuz dal, MetaEditor'da gösterilen dallar listesinde görünür. Ardından Push düğmesine tıklayalım ve günlüğü kontrol edelim, işlemin başarılı olduğunu onaylıyor. Bu noktada, yeni dalın orijinal depoda oluşturulmuş olmasını bekleyebiliriz. Ancak MQL5 Algo Forge web arayüzünü kontrol ettiğimizde bunun aksini görüyoruz: hiçbir şey değişmemiş.

Şimdi, kodu düzenlemeyi ve MetaEditor'dan değişiklikleri commit etmeyi deneyelim. Hataya neden olan her satırın önüne açıklama ekliyor, düzeltme ihtiyacını belirtiyor ve bu değişiklikleri commit ediyoruz. MetaEditor günlüğü hem commit hem de push işleminin başarılı olduğunu gösteriyor.

Ancak bir kez daha, MQL5 Algo Forge web arayüzündeki orijinal depoyu kontrol ettiğimizde, hiçbir şeyin değişmediğini görüyoruz. Bu alışılmadık bir durum. Visual Studio Code'da projeyi kontrol edelim ve neler olduğunu anlamaya çalışalım. SmartATR proje klonumuzun bulunduğu klasörü açıyoruz ve aşağıdakileri görüyoruz:

En son commit mevcut, ancak VS Code develop dalını yayınlamamızı öneriyor. Bu, dalın uzak depoda henüz mevcut olmadığı ve bizim commitimizin de mevcut olmadığı anlamına geliyor. Dalı yayınlamayı deneyelim ancak bir hata alıyoruz:

Nedenini öğrenmek için günlüğü kontrol edelim:

Kullanıcı hesabımızın orijinal depo için yazma izinleri yok. Bu mantıklı. Aksi takdirde, proje herhangi birinin kontrolsüz düzenlemeleriyle kolayca kaosa dönüşebilir. Bu, yalnızca yerel kopyamızda değişiklikler yapabileceğimiz anlamına gelir. Ancak, bu değişiklikler uzak depo ile senkronize edilemez ve yalnızca yerel klonumuzda bulunur. Bu ideal olmaktan çok uzak. İşbirliği imkanının ötesinde, harici depolar çok önemli bir rol oynar - proje yedekleme deposu olarak hizmet verirler. Bu güvenceden vazgeçmek akıllıca olmayacaktır.

Ayrıca, yalnızca MetaEditor'da çalışırken bir şeylerin yanlış gittiğine dair hiçbir belirti olmadığını da belirtmek gerekir. MetaEditor günlüğüne göre her şey yolunda görünüyordu: hata yoktu ve tüm değişiklikler “başarıyla” var olmayan bir depoya gönderilmişti. Umarım bu sorun gelecekteki sürümlerde düzeltilecektir.


İkinci yaklaşım: Çatal klonlama

Şimdi farklı bir yol deneyelim. Burada da MetaEditor'ın mevcut yeteneklerinin dışına çıkmamız gerekecek - bu sefer ek olarak MQL5 Algo Forge web arayüzünü kullanacağız. Komut satırı Git işlemlerini zorlayıcı bulan geliştiriciler için bu bir çözüm sağlar. MQL5 Algo Forge'un web arayüzünde, istenen orijinal depoyu çatallayabiliriz. 

Çatal, MQL5 Algo Forge da dahil olmak üzere sürüm kontrol sistemlerinde ve işbirliğine dayalı geliştirme platformlarında temel bir konsepttir. Platform içinde orijinal deponun eksiksiz ve bağımsız bir kopyasını oluşturma süreci anlamına gelir.

Bir kullanıcı başka birinin deposunu çatalladığında, platform kullanıcının hesabı altında tam bir kopya oluşturur. Bu kopya, çatallama sırasında kaynak projedeki tüm değişiklik geçmişini, dalları ve dosyaları alır, ancak o andan itibaren özerk bir depo haline gelir. Yeni sahibi orijinali etkilemeden serbestçe değişiklik yapabilir.

Böylece bir çatal, herhangi bir kullanıcının mevcut bir proje üzerine inşa etmesine ve onu kendi yolunda geliştirmesine olanak tanıyarak kod için etkili bir şekilde yeni bir evrim dalı oluşturur. Bu konsept, açık kaynak ekosistemi içinde türetilmiş projelerin ve alternatif uygulamaların oluşturulmasını sağlar.

Çatallar aynı zamanda kullanıcının doğrudan yazma erişimine sahip olmadığı projelerde değişikliklere katkıda bulunmanın birincil yoludur. Standart iş akışı şu şekildedir: bir çatal oluşturma, gerekli değişiklikleri uygulama ve test etme ve ardından orijinal deponun sahibini Bölüm 2'de ele aldığımız bir “Pull talebi” aracılığıyla önerilen iyileştirmeler hakkında bilgilendirme. Bu, merkezi olmayan işbirlikçi geliştirme modelinin temelidir.

Bağımsız olmalarına rağmen, çatallar kaynak deposu ile teknik bir bağlantı sürdürür. Bu, orijinaldeki değişiklikleri izlemeyi ve bunları çatalınızla senkronize etmeyi, üst projedeki commitleri kendi projenizle birleştirmeyi mümkün kılar.

Çatal ile basit bir klon arasında ayrım yapmak önemlidir. Klonlama, belirli bir bilgisayarda bir deponun yerel bir kopyasını oluşturmayı ifade ederken, çatallama platformun kendisinde tam bir kopyadır ve başka bir kullanıcının sahipliği altında yeni bir uzak depo oluşturur.

Bu nedenle, bir depoyu çatalladığımızda, o bizim kendi depomuz haline gelir. Ayrıca MetaEditor'daki Shared Projects listesinde görünür ve doğrudan MetaEditor üzerinden klonlanabilir.


Çatal ile test çalışması

Fernando Carreiro'nun nazik yardımı sayesinde bu mekanizmayı pratikte test edebildim. FMIC deposunu çatalladım ve aynı zamanda orijinal depoyu MQL5 Algo Forge web arayüzünden İzlemeye aldım ve Yıldızladım.

Beklendiği gibi, çatal MetaEditor'da Shared Projects altında görüntülenen depolar listesinde göründü:

Bu, FMIC deposunun yeni oluşturduğum çatalını yerel bilgisayara başarıyla klonlamamı sağladı.

Ardından, Fernando'dan bazı değişiklikler yapmasını istedim, böylece güncellemelerin çatalıma nasıl yansıyacağını test edebilecektim. Heikin Ashi yayınını açıklayan örnek bir README.md dosyası ekledi ve bunu depoya commit etti.

Daha sonra, web arayüzünde gerçekten de yeni değişikliklerle ilgili bildirimler gördüm:

Ancak bu bildirimler henüz ne MQL5 Algo Forge üzerinde depolanan çatalımı ne de bilgisayarımdaki yerel klonu etkilemedi. Şimdi, Fernando'nun değişikliklerini depolarımıza çekmeye çalışalım. İlk olarak, yerel klonumuzda en son değişikliklerin gerçekten eksik olup olmadığını kontrol ediyoruz:

Yerel geçmişimizdeki son commit 27 Ağustos 2025 tarihli iken Fernando'nun değişiklikleri daha sonra yapılmıştır.

Şimdi, web arayüzünde çatalımızı ziyaret edersek, main dalımızın orijinal depodan üç commit geride olduğunu belirten bir mesaj görürüz:

Ayrıca, main klasörümüzü upstream dal ile senkronize etmesi gereken bir “Senkronize et” düğmesi de görüyoruz. Daha sonra commitlerin geçmişini kontrol ediyoruz ve daha önce bulunmayan 5 Eylül 2025 tarihli üç yeni commiti görüyoruz:

Başka bir deyişle, orijinal depoda yapılan tüm commitler önce MQL5 Algo Forge'daki çatalımıza ve ardından bu çatalın yerel klonumuza başarıyla aktarıldı.

Bu mekanizmayı daha ayrıntılı olarak keşfetmek isteyenler için aşağıdaki GitHub dokümantasyon bölümlerine başvurmanızı öneririm: 

Bu dokümantasyon özellikle MQL5 Algo Forge için yazılmamış olsa da, web arayüzünün çoğu benzer şekilde davranır ve konsol Git komutları platformdan bağımsız şekilde evrensel olarak uygulanabilir. Tabii ki platformun Git tabanlı olması şartıyla.

Örneğin, upstream yapılandırma yönergelerini izleyerek senkronizasyonu ayarlayabiliriz, böylece her Pull/Push işlemi çatal klonumuzu orijinal depoya göre günceller:

Ancak, MetaEditor ve MQL5 Algo Forge web arayüzü üzerinden çalışırken, bu ekstra yapılandırma adımı mutlaka gerekli değildir.


SmartATR deposunu çatallama

Şimdi başlangıçta kullanmayı planladığımız depoya geri dönelim. Aynı adımları - MQL5 Algo Forge web arayüzü üzerinden bir çatal oluşturma ve bunu yerel olarak klonlama - SmartATR deposu için de tekrarlayacağız.

Keşfet bölümünde orijinal deponun adını girerek arama yaparak başlıyoruz:

Depo zaten diğer kullanıcılar tarafından oluşturulmuş birkaç çatala sahip olduğundan, arama sonuçları bu çatalları da görüntüler. Gerçek orijinali çatallamak için sonuçları daha da aşağı kaydırıyor ve steverosenstock/SmartATR sayfasını açıyoruz.

Buradan Çatalla düğmesine tıklıyoruz:

Tıkladıktan sonra çatal oluşturma ayarları sayfasına yönlendiriliyoruz. Burada, çatallanmış depoyu yeniden adlandırabilir (depolar listemizde görüneceği gibi), orijinalden hangi dalların dahil edilmesi gerektiğini belirtebilir ve istersek depo açıklamasını düzenleyebiliriz:

Varsayılan olarak, çatal orijinal deponun tam bir kopyası olarak oluşturulur. Bu bizim için ideal, bu yüzden sadece “Depoyu çatalla”ya tıklıyoruz.

Çatal başarıyla oluşturuldu:

Ardından, bu depoyu yerel bilgisayarımıza klonlayacağız. Bunu yapmadan önce, önceden klonlanmış orijinal SmartATR klasörünü yerel bilgisayardan siliyoruz. MetaEditor’da, Shared Projects içerik menüsünden 'Yenile'yi seçerek klasör listesini yenilememiz gerekir. Devamında, SmartATR klasörü görünür ve içerik menüsünden 'Git Clone'u seçiyoruz: 

SmartATR projesi başarıyla klonlandı:

Artık değişiklikler yapmaya hazırız.


Değişiklikler yapma

Amacımız belirli bir hatayı çözen ya da en azından etkisiz hale getiren düzeltmeler sunmak olduğundan, adı bu amacı açıkça yansıtan yeni bir dal oluşturarak başlıyoruz; örneğin, fixes/news-impact:

Daha sonra projenin içerik menüsünden “Git Branch → fixes-news-impact” seçeneğini seçerek bu dala geçiyoruz.

Başlangıçta dal adına bir eğik çizgi (“/”) eklememize rağmen, dalın aslında bu karakter otomatik olarak bir tire (“-”) ile değiştirilerek oluşturulduğunu unutmayın. Bu, dal adlarında yalnızca Latin harflerine ve tire işaretlerine izin veren MetaEditor tarafından getirilen bir sınırlamadır. Teknik olarak, Git'in kendisi eğik çizgiye izin verir ve web arayüzü aracılığıyla eğik çizgi içeren dalları serbestçe oluşturabiliriz. 

Bu kısıtlamayı test edelim. Doğrudan MQL5 Algo Forge web arayüzünden adında eğik çizgi kullanarak başka bir dal oluşturacağız: fixes/cast-warning. Dallar sayfasından, main dalını temel olarak kullanarak yeni bir dal oluşturuyoruz:

Dal başarıyla oluşturuldu:

Ancak, MetaEditor'da bir Pull çalıştırmayı denediğimizde bir hata mesajı ile karşılaşıyoruz:

Yine de, adında eğik çizgi bulunan yeni dal MetaEditor içindeki dal listesinde görünür ve bu dala geçiş başka sorunlar olmadan çalışır:

Bu ayrıntıyı not ettikten sonra, fixes-news-impact dalına geri dönüyoruz ve derleme hatasının nedenini ortadan kaldıran geçici düzeltmeyi uyguluyoruz:

Gösterge hatasız bir şekilde derlendikten sonra, ‘Git Commit’ içerik menüsü seçeneği aracılığıyla değişikliklerimizi commit ediyoruz: 

Commit iletişim kutusunda, değiştirilen dosyaların listesini kontrol ederiz. Sadece bir dosyayı değiştirdiğimiz için bu durumda kontrol basittir. Düzeltmenin niteliğini belirten açıklayıcı bir yorum eklemeniz şiddetle tavsiye edilir. Her şeyin doğru olduğunu onayladıktan sonra Tamama tıklıyoruz.

Değişikliklerimiz şimdi MQL5 Algo Forge'daki SmartATR deposunun çatalına commit ve push edildi. Bu aşamada, göstergenin düzeltilmiş versiyonu yerel olarak kullanılabilir ve güvenli bir kopyası da depoda saklanır. İsteğe bağlı olarak, deponun web arayüzünden 'Yeni pull talebi'ne tıklayarak orijinal proje yazarına bir “Pull talebi” gönderebiliriz:

Ancak, henüz çok erken, çünkü yaptığımız değişiklik kodu iyileştirmekten ziyade işlevselliğin bir kısmını devre dışı bırakıyor. Şimdilik bir “Pull talebi” oluşturmuyoruz.

SmartATR göstergesi Simple Candles projemize entegre edilmeye hazır.


Göstergeyi entegre etme

Belirlediğimiz kurallara uyarak, Simple Candles proje deposunda develop dalını temel alan yeni bir dal oluşturuyoruz: article-19436-forge3. Yaklaşımımızı çeşitlendirmek için, bu dalı MQL5 Algo Forge web arayüzünü kullanarak oluşturuyoruz.

Dalın yerel olarak görünmesini sağlamak için MetaEditor'da ‘Git Pull’ çalıştırıyoruz ve ardından yeni article-19436-forge3 dalına geçiyoruz.

Amacımız göstergeyi alım-satım stratejisi içinde uygulamak olduğundan, onu doğrudan SimpleCandlesStrategy.mqh'deki strateji sınıfı koduna ekliyoruz. Özellikle, gösterge tanıtıcısını saklamak için bir sınıf alanı ekliyoruz:

//+------------------------------------------------------------------+
//| Trading strategy using unidirectional candlesticks               |
//+------------------------------------------------------------------+
class CSimpleCandlesStrategy : public CVirtualStrategy {
protected:
   //...

   int               m_iATRHandle;        // SmartATR indicator handle

   //...
};

Ardından, sınıf yapıcısında gerekli sembolü, zaman dilimini, gösterge dosyasının yolunu ve parametrelerini ileterek iCustom() fonksiyonunu çağırıyoruz:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSimpleCandlesStrategy::CSimpleCandlesStrategy(string p_params) {
// Read the parameters from the initialization string
   // ...

   if(IsValid()) {
      // Load the SmartATR indicator
      m_iATRHandle = iCustom(
                        m_symbol, m_timeframe,
                        "Shared Projects/SmartATR/SmartATR.ex5",
                        // Indicator parameters
                        m_periodATR,   // Initial ATR period (used for first calculation, adaptively changes)
                        false,         // Enable adaptive period (dynamic lookback)
                        7,             // Minimum ATR period (adaptive mode)
                        28,            // Maximum ATR period (adaptive mode)
                        false,         // Weight True Range by volume
                        false,         // Weight True Range by economic news events (MT5 Calendar)
                        2.0,           // Multiplier: alert if ATR exceeds this factor of average
                        false          // Enable pop-up & sound alerts on high volatility
                     );

      // ...
   }
}

Gösterge için belirtilen yola dikkat edin. Shared Projects ile başlıyor, devamında SmartATR proje klasörü adı ve ardından SmartATR.ex5 gösterge dosyası adı geliyor. .ex5 uzantısını eklemek isteğe bağlıdır, ancak onu koymak karışıklığı önlemeye yardımcı olur.

Shared Projects klasöründe çalışırken dikkate alınması gereken önemli bir nüans daha vardır. Bu hem kendi projeleriniz hem de çatallanmış projeler için geçerlidir. Derlenen tüm yürütülebilir dosyalar doğrudan depo klasörüne yerleştirilmez. Bunun nedeni Shared Projects klasörünün terminal veri kök klasöründe yer almasıdır: MQL5/Shared Projects. Bir yandan, sürüm kontrol sistemi yürütülebilir dosyaların indekslenmesini önermeye çalışmayacağı için bu iyi bir şeydir. Öte yandan, ilk başta biraz kafa karıştırıcı olabilir: Derlenmiş Uzman Danışman ve gösterge dosyalarını nerede bulabiliriz?

Bunlar aslında Uzman Danışmanlar için MQL5/Experts veya göstergeler için MQL5/Indicators gibi kendi standart klasörlerinde oluşturulur. Bunların içinde otomatik olarak bir Shared Projects alt dizini oluşturulur. Böylece, derlenen dosyalar doğrudan bu alt klasörlere gider. Bu, MQL5/Shared Projects/SmartATR.mq5 dosyasının derlenmesinin MQL5/Indicators/Shared Projects/SmartATR/SmartATR.ex5 adresinde çalıştırılabilir dosya üreteceği anlamına gelir.

Buna göre, iCustom() çağrısı MQL5/Indicators'a göre gösterge yolunu referans almalıdır.

Son olarak, SimpleCandles.mq5 Uzman Danışman dosyasını derliyoruz ve Strateji Sınayıcıda çalıştırıyoruz. Günlükte aşağıdakiler görünüyor:

Böylece SmartATR göstergesi başarıyla yüklendi, başlatıldı ve kullanıma hazır hale geldi. Burada sadece entegrasyonunu gösteriyoruz. Strateji mantığı içinde gerçek kullanım kısmını daha sonra ekleyebiliriz. Bu değişiklikleri commit ediyor ve MQL5 Algo Forge deposuna gönderiyoruz.


Sonuç

Bu makale, MQL5 Algo Forge'un benimsenmesinin geliştiriciler için temelde nasıl daha esnek bir iş akışı sağladığını göstermektedir. Daha önce yalnızca kendi kendine yeten depoları incelemiştik, ancak burada üçüncü taraf bir depodan harici bir kütüphaneyi projemize başarıyla entegre ettik.

Kilit nokta, çatallamaya dayalı doğru iş akışıydı - upstream projeyle senkronize kalırken tam modifikasyona izin veren harici bir deponun kişisel bir kopyasını oluşturduk. SmartATR'ın Simple Candles'a başarılı bir şekilde entegre edilmesi, deponun bulunmasından ve çatallanmasından kodunun değiştirilmesine ve bir alım-satım stratejisinde uygulanmasına kadar bu yaklaşımı desteklemektedir.

Daha da önemlisi, bu süreç gelecekteki güncellemeleri beklemeden tamamen mevcut MetaEditor yetenekleriyle gerçekleştirildi. MetaEditor'ın sınırlamaları (üçüncü taraf depolara doğrudan erişim eksikliği ve kısıtlı dal adlandırma gibi), MQL5 Algo Forge web arayüzü ve gerekirse standart Git konsol komutları ile tamamlanarak kolayca aşılabilir. Kısacası, sistem halihazırda pratik kullanım için uygundur ve geri kalan arayüz eksiklikleri engelleyici olmaktan ziyade rahatsızlık vericidir.

Ancak, burada durmayalım. Projeleri ayırmak için depoları kullanmaya ve yol boyunca edindiğimiz deneyimleri paylaşmaya devam edeceğiz.

İlginiz için teşekkür ederim! Yakında görüşmek üzere.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/19436

MQL5’te Nesne Yönelimli Programlama (Object-Oriented Programming, OOP) MQL5’te Nesne Yönelimli Programlama (Object-Oriented Programming, OOP)
Geliştiriciler olarak, özellikle farklı davranışlara sahip farklı nesnelerimiz varsa, kod tekrarları yapmadan yeniden kullanılabilir ve esnek yazılımları nasıl tasarlayacağımızı ve geliştireceğimizi öğrenmemiz gerekir. Bu, Nesne Yönelimli Programlama teknikleri ve ilkeleri kullanılarak kolayca yapılabilir. Bu makalede, MQL5'te Nesne Yönelimli Programlamanın temellerini sunacağız.
MQL5’i kullanarak özel bir Donchian Channel göstergesi nasıl oluşturulur? MQL5’i kullanarak özel bir Donchian Channel göstergesi nasıl oluşturulur?
Fiyatları çevreleyen bir kanalı görselleştirmek için kullanılabilecek birçok teknik araç vardır. Bu araçlardan biri Donchian Channel göstergesidir. Bu makalede, Donchian Channel göstergesinin nasıl oluşturulacağını ve bir Uzman Danışmanda özel gösterge olarak nasıl kullanılacağını öğreneceğiz.
İşte Karışınızda Yeni MetaTrader 5 ve MQL5 İşte Karışınızda Yeni MetaTrader 5 ve MQL5
Bu MetaTrader 5 ile ilgili sadece kısa bir inceleme. Sistemin tüm yeni özelliklerini bu kadar kısa sürede açıklayamam, test süreci 09.09.2009’da başladı. Bu sembolik bir tarihtir ve şanslı sayı olacağına eminim. MetaTrader 5 terminalinin ve MQL5’in beta sürümünü beş gün önce aldım. Tüm özelliklerini deneme şansım olmadı ama şimdiden etkilendim.
MQL5 Algo Forge'a Geçiş (Bölüm 2): Birden Fazla Depo ile Çalışma MQL5 Algo Forge'a Geçiş (Bölüm 2): Birden Fazla Depo ile Çalışma
Bu makalede, projenin kaynak kodunun herkese açık bir depoda saklanmasını organize etmek için olası yaklaşımlardan birini ele alıyoruz. Proje geliştirme için net ve uygun kurallar oluşturmak amacıyla kodu farklı dallara dağıtacağız.