English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
MQL4 ve MQL5 geliştirme çerçevesinde OpenAI'ın ChatGPT özellikleri

MQL4 ve MQL5 geliştirme çerçevesinde OpenAI'ın ChatGPT özellikleri

MetaTrader 5Alım-satım | 15 Mayıs 2024, 16:26
685 0
Evgeniy Ilin
Evgeniy Ilin

İçindekiler



Giriş

Temel bilgilerle başlayalım. Bu teknoloji, insanlara çeşitli görevleri çözmede yardımcı olmak için tasarlanmış OpenAI'ın yapay zeka ürünlerinden biridir. Bu araç normal bir mesajlaşma sohbetine benzer. Ancak, diğer uçta size metin biçiminde cevap veren bir yapay zeka vardır.

Elbette, iletişim kanalı yalnızca metinle sınırlıdır, ancak yine de çeşitli problemleri çözmek veya birçok yeni şey öğrenmek için yeterlidir. Bu metin kanalı, programlama, matematik, fizik, kimya gibi tamamen farklı problemleri çözmek için uygundur, ustaca çeviri ve diğer yeteneklerden bahsetmiyorum bile.

Bu modelle yalnızca kârlı ticaret sistemlerinin geliştirilmesi açısından ilgileniyoruz. Ticaret sistemlerinin daha hızlı ve daha kolay geliştirilmesi için bu teknolojinin en iyi ve doğru şekilde nasıl kullanılacağıyla ilgilenmeye başladım. Nihayetinde, bir teknolojiyi amacına uygun olarak doğru bir şekilde uygulamaya ilk başlayan kişi, hem geliştirme hem de işgücü maliyetini düşürür ve bu da bariz rekabet avantajları sağlar.


ChatGPT'nin MQL5’te kullanımıyla birlikte yapılabilecekler

Teknoloji olanakları üzerinde daha ayrıntılı olarak duralım. Kendi örneklerim üzerinde oldukça detaylı bir çalışma yaptıktan sonra, böyle bir teknolojinin gerçekten harika bir şeyin sadece başlangıcı olduğunu fark ettim. Ancak şu anda bile aşağıdaki özellikleri vurgulayabilirim:

  • Herhangi bir MQL4 ve MQL5 kodunun oluşturulması
  • Kodun yeniden düzenlenmesi ve optimizasyonu
  • Kod temizleme
  • Koda yorumlar ekleme
  • Hataları düzeltme
  • Matematiksel modellerin uygulanması
  • Matematiksel modellere dayalı ilave kod oluşturma
  • Bilinen algoritmaların ve matematiksel modellerin modernizasyonu
  • Uzman Danışman geliştirme sürecini hızlandırma
  • Büyük miktarda bilgi

Bu liste kesinlikle nihai değildir ve siz de buraya kendinizden bir şeyler ekleyebilirsiniz. Bence insanlar bu tür bir teknolojiyi öğrendiklerinde kabaca üç alt gruba ayrılmaya başlıyorlar:

  1. "Şimdi süper bir algoritma yapacağız"
  2. Yapay zekaya temkinli yaklaşanlar ve yararlılığını sorgulayanlar
  3. Makine bir insandan daha iyi olamaz. Bunların hepsi bir abartı

Bu teknolojiyle uzun zaman önce tanışmaya başladım ve başlangıçta üçüncü kategoriye aittim. Bu yapay zeka ile uğraştığım ilk iki günde, aniden üçüncü kategoriden birinci kategoriye geçtim, ardından bu konuda inançlarımı ayarlayan daha ilginç ve oldukça tatsız bir süreç başladı, bu daha çok bu teknolojinin daha gerçekçi bir değerlendirmesi olan "1.5" kategorisine geri dönüş gibi.
Bu teknoloji kullanışlıdır, ancak başlangıçta düşündüğünüz kadar değil. Bu bağlamda, bu teknolojinin geliştiricilerine ve pazarlamacılarına, yalnızca ilk birkaç gün içinde kullanımdan inanılmaz bir "vay canına" etkisi yarattığı ve bu da zincirleme bir kendini tanıtma reaksiyonu için yeterli olduğu için bile saygı göstermeye değer.

Bunu anlamak için, bu yapay zeka ile uğraşma konusunda çok fazla pratik yapmanız gerekir. Şahsen, onunla çeşitli konularda yaklaşık yüz farklı diyalog yaptım. Bu teknolojiyi MQL5 için kullanmaya başlamak için yeterince pratik kazandığımı söyleyebilirim. Pratik uygulamalara geçmeden önce, size çok önemli bazı bilgiler vermem gerekiyor ve bunun için bu teknolojinin kaputunun altına daha derinlemesine bakmamız gerekecek.


ChatGPT ile ilişkili olası yanlış yönlendirmeler

Bu teknolojiyi kullanmaya başladığınız ilk günlerde yaşayacağınız sözde "vay canına" etkisi, bunun öncelikle sorunuzu bir cevaba dönüştürmek için tasarlanmış bir metin modeli olmasından kaynaklanmaktadır. Cevaplarını beğenecek olmanızın nedeni, yaratıcıların bu modele güzel yalan söylemeyi öğretmiş olmalarıdır. Evet, şaka yapmıyorum! O kadar güzel yalan söylüyor ki, kendiniz de inanmak isteyeceksiniz ve birçok kez yalanını ortaya çıkarmaya çalıştıktan sonra bile model size genellikle şunları sunacaktır:

  • Özür dilerim! Evet, haklısınız. Küçük bir hata yaptım. Gelecekte bunu dikkate alacağım. (Aslında, dikkate almayacak. Bu sadece boş bir vaat)
  • Yanlış anlaşılma için özür dilerim, bir hata yaptım. İşte düzeltilmiş versiyon. (Daha da fazla hata içeriyor)
  • Modelin hesaplamalarda bir hata yaptığını fark ettiniz. (Aslında model hiçbir hesaplama yapmadı, sadece bir şekilde bir yerlerden yaklaşık bir sayı buldu)
  • Kodda hata tespit ettiniz. (Model yine bahaneler üretecek ve sizi kandırmaya çalışacaktır)
  • Model, görevin yerine getirilmesini taklit eder ve istediğinizi yaptığına sizi ikna etmeye çalışır. (Aslında, bir yerlerden benzer bir şey bulur ve sadece size sunar)
  • Özür dilerim! Size yardım edemedim. (Bu, model yalanlarını veya hatalarını tespit ettiğinizi anladığında gerçekleşir)
  • Model, uyumlu ve tutarlı bir cevap izlenimi yaratmak için cevabına çok fazla kelime ekler. (Bunun bir şekilde kaynak maliyetlerinin optimizasyonu ile bağlantılı olduğunu düşünüyorum)

Kısacası, model, "isteminizin" kusurlu olmasından faydalanırken, verilen görevi mümkün olan her şekilde atlamaya çalışacaktır. Hata yapması durumunda, kendisini öyle bir haklı çıkarmaya çalışacaktır ki, aynı konuda onu yakalamanız mümkün olmayacaktır ve eğer onu yakaladığınızı anlarsa, bazı cevaplar ve psikolojik yöntemlerle olumsuz tepkinizi yumuşatmaya çalışacaktır. Genel olarak, algoritmanın kabul edilebilir düzeyde bir kullanıcı memnuniyeti ile optimum kaynak tüketimi için uyarlandığını düşünüyorum. Başka bir deyişle, bu durumda amaç size problemin en kaliteli çözümünü sunmak değil, çeşitli olası nedenlerden dolayı böyle düşündüğünüz bir çözüm sunmaktır. Hedefin kullanıcının olumlu tepkisi olduğu ve görevin doğru çözülüp çözülmediğinin o kadar da önemli olmadığı ortaya çıktı. Bunun için çabalamaktadır. Pazarlama açısından bakıldığında bu doğrudur ve bu bağlamda yapay zeka mümkün olduğunca ikna edici olabilir.

Tüm bunları göz önünde bulundurduğumda, bu yöndeki özgürlüğünü en aza indirmek için, öncelikle onunla iletişim kurma konusunda deneyim biriktirmemiz ve ne tür görevlerin bu ikna kabiliyetinin kullanılmasını gerektirmediğine dair sonuçlar çıkarmamız gerektiğini fark ettim, çünkü işlevselliği göz önüne alındığında talebimizi yerine getirmek onun için daha kolay olacaktır ve doğrudan bir cevap vermek hayal gücünü etkinleştirmekten çok daha kolaydır. Çünkü kaynak maliyetleri açısından verimli olmayacaktır, başka bir deyişle, sizi kandırması kârlı olmayacaktır, ancak size doğru bir cevap vermek çok daha kolay olacaktır.

Bu tür soruları nasıl soracağımızı anlamaya başlamak için aşağıdakileri anlamamız gerekir:

  1. "İstemimizin" yapısı ve türü o kadar önemli değildir, ayrıntılar ve sorunun kalitesi daha büyük önem taşır. (Model her şeyi anlar ve istemlerin nasıl oluşturulacağına dair internet kılavuzlarını okumaya gerek yoktur. Dilediğiniz gibi yazın, ama argo kullanmayın)
  2. Karmaşık soruları veya talepleri alt paragraflara bölün. (Daha kesin, basit ve net cevaplar almak için soruları basitleştirin ve bölün)
  3. Sorunuz ne kadar akıllıca ve yerinde olursa, cevabınız da o kadar faydalı olur.
  4. Size süper bir fikir veya bir algoritma sunmayacaktır. (Model, düşünme, planlama ve entelektüel yaratıcılık genişliğine sahip değildir. Ancak ilk başta bunu yaratabilecekmiş gibi görünecektir çünkü dediğim gibi çok iyi yalan söylüyor)
  5. Bu teknolojinin kullanımını yalnızca işimizi hızlandırmak ve işgücü maliyetlerimizi düşürmek bağlamında düşünmeliyiz.
  6. Her yeni talep tüm diyaloğa en az bağımlı olmalıdır. (Model tüm diyaloğu hatırlayamaz ve eski mesajlar genellikle yanıtlarda dikkate alınmaz. Sadece deneyin ve ne demek istediğimi anlayacaksınız)
  7. Soru ne kadar karmaşıksa ve ne kadar çok ayrıntı içeriyorsa, tamamen saçma yanıt alma olasılığı o kadar yüksektir. (Bu, ikinci alt paragrafın açıklamasıdır)
  8. Modelin internet erişimi yoktur ve tüm cevapları sadece kendi bilgi tabanına dayanarak üretir. (İnternetten veri almasını isterseniz, size veritabanından eski veriyi sunacak veya cevabı soru içeriğinize göre ayarlayarak yeni bir veri gibi gösterecektir. Bunu aklınızda tutun. Model bunu yapacaktır çünkü sizinle tartışmanın faydasız olduğunu ve sizi her şeyi yaptığına ikna etmenin daha iyi olduğunu bilir)
  9. ChatGPT 3.5, 2019 yılına kadar eğitilmiştir. (Bu da, geliştiriciler tarafından onaylanan bir sonraki eğitim oturumuna kadar 2019'dan sonraki olaylar hakkında hiçbir bilgiye sahip olmadığı anlamına geliyor)
  10. ChatGPT 4.0, 2021 yılına kadar eğitilmiştir. (Daha iyidir çünkü çok az yalan söylüyor ve her zaman doğru cevap vermeye çalışıyor. Soru sormaya ve karşılaştırmaya çalışırsanız, 3.5'in bariz bir şekilde yalan söylediğini göreceksiniz)

Aslında, bu teknolojinin izlenimini bozan pek çok başka küçük tatsız an var. Ancak yine de, bu teknoloji faydalı olmasaydı bu konuda yazmazdım. Tüm bunlar, bunun hiçbir şekilde bir yapay zeka olmadığı gerçeğine dayanıyor. Ancak pragmatik kalıp her şeyin o kadar da kötü olup olmadığını ve bu teknolojinin yardımıyla hangi rutin işlemleri daha hızlı ve daha iyi yapabileceğimizi düşünürsek, eminim ki yargımızda çok sert olmayacağız. Tüm bunları ticaret sistemlerinin geliştirilmesinde nasıl kullanacağımızı düşünmemiz gerekiyor.

Bu bölümü bitirirken, dikkatinizi her zaman hatırlamanız gereken en önemli ve temel noktaya odaklamak istiyorum:

  • ChatGPT yanıtlarını ve özellikle sayıları, denklemleri ve oluşturulan kodu her zaman iki kez kontrol edin

Hem matematik hem de programlama bilgim sayesinde, hatalarının ve eksikliklerinin birçok örneğini gördüm ve bunların oldukça yaygın olduğunu söyleyebilirim. Oluşturulan metin açısından önemsiz görünebilir, ancak matematik veya kodla uğraşırken, en önemsiz hata bile tüm çözümü işe yaramaz hale getirir. Bu nedenle, cevapları her zaman iki kez kontrol edin, hataları düzeltin ve modelin dikkatini buna çekin. Bazen bir süreliğine doğru cevap verir. Bu alt paragraf, diğer şeylerin yanı sıra, Uzman Danışmanlarınızı geliştirirken son derece faydalı olacaktır.


Matematiksel problemleri çözmek ve bir kodda kullanılmak üzere matematiksel modeller geliştirmek için ChatGPT kullanma olanakları

Bu model metin tabanlı olduğu için, denklemleri doğru formatta yazarsak, onları anlayacağını ve dahası matematiksel dönüşümler gerçekleştireceğini ve problemleri çözeceğini tahmin etmek kolaydır. Birçok ticaret sistemi geliştirirken, matematiksel denklemler ve ifadeler oluştururken yardıma ihtiyacınız olacaktır. Bazı olası matematiksel problemleri daha sonra bir kodda uygulanarak çözmek mümkündür. Matematiksel denklemleri yazmak için ChatGPT'nin anladığı ve cevabı vermek için kullandığı aşağıdaki format vardır:

  • LaTeX

Denklem yazmak için latex formatının kullanımına bir örnek:

Kod:

E &=& mc^2\\
m &=& \frac{m_0}{\sqrt{1-\frac{v^2}{c^2}}}

Bunu herhangi bir ücretsiz latex dönüştürücüye yapıştıralım ve böylece tüm tanıdık ifadelerin bir veri görselleştirmesini elde ederiz:

Einstein'ın enerji ve göreli kütle genişlemesi denklemleri

Sanırım artık model cevaplarının LaTeX formatında görsel olarak nasıl yorumlanacağı net. En önemlisi, cevap matematiksel ifadeler içeriyorsa modelden bu formatta denklemler üretmesini istemeyi unutmayın. Ayrıca, görüntülerdeki veya diğer formatlardaki denklemleri ihtiyacımız olan formata geri dönüştürebilen sinir ağları da vardır. İhtiyacınız olduğunda bu araçları bulacağınızı düşünüyorum. Benim görevim size böyle bir olasılığın varlığını göstermek.

ChatGPT de dahil olmak üzere birçok sinir ağını ve görüntüleri LaTeX formatına geri dönüştürme işlevini birleştiren Telegram botları var. Dilerseniz bunlardan birini profilimde bulabilirsiniz. Bu bot arkadaşım tarafından yapıldı ve bizzat benim tarafımdan test edildi.

Örneğin ChatGPT'den bir eşitsizliği veya denklemi hem sayısal olarak hem de açık bir şekilde çözmesini isteyebilirsiniz. Ayrıca denklem veya eşitsizlik sistemlerinin yanı sıra diferansiyel denklemleri veya integralleri çözmesini veya gerekli matematiksel dönüşümleri gerçekleştirmesini isteyebilirsiniz. Ancak bir matematikçi olarak, bunu her zaman verimli ve rasyonel bir şekilde yapmadığını ve bazen görevi yarım bıraktığını söyleyebilirim. Bu yüzden çift kontrol gereklidir.

Elbette bu özellik matematikçi olmayanlar için faydalı olabilir. Uzun süreli kullanım durumunda, daha fazla hata yapacaksınız ve çözümünüz oldukça mantıksız ve beceriksiz olacaktır. Bununla birlikte, uygulanan matematik o kadar karmaşık değilse ve kodun genellikle yalnızca sayısal yöntemler kullandığı göz önüne alındığında, kodunuz için bazı matematik problemlerinizi çözebileceksiniz. Burada diferansiyel matematik yoktur.


MQL4 ve MQL5'te kod üretimine doğru yaklaşım

İşlerin ilginçleştiği yer burası. Yeterince yüksek kaliteli ve az çok düzgün tüm ticaret sistemlerinin kodlarının boyutlarının oldukça büyük olduğu göz önüne alındığında, bu tür kodları oluşturma sürecine nasıl yaklaşılacağını düşünmeye değer. Buradaki ana engel, sorunuzun cevabının boyutunun belirli sayıda karakterle sınırlı olmasıdır ve büyük ve karmaşık kodlar üretmeye yönelik sayısız denemeden sonra, her kod çıktısının yeterince kısa olması gerektiği sonucuna vardım. Bu, kodun parçalar halinde görüntülenmesi gerektiği anlamına gelir. Bunu nasıl başarabiliriz? Cevap çok basit - bir Uzman Danışman, gösterge veya komut dosyası geliştirmek için bir plan yapmamız gerekiyor.

Plan, her bir alt öğenin bağımsız olarak çözülebilecek ayrı bir alt görev olması koşuluyla hazırlanmalıdır. Daha sonra her bir alt görevi sırayla çözebilir ve ardından tüm kodu birleştirebiliriz. Bu yaklaşımın bir diğer avantajı da her bir alt görevin ayrı ayrı sonuçlandırılabilmesi ve her bir alt görevin hepsinin bir arada olmasından daha basit olması nedeniyle sonuçlandırmanın daha hızlı ve daha rahat bir şekilde gerçekleştirilmesidir. Ayrıca, daha fazla hatadan kaçınacağız.

Bir geliştirici olarak, yapay zekanın müdahale etmesine izin vermeden Uzman Danışmanımın ana mimarisi üzerinde bağımsız olarak düşünmek benim için çok daha rahat. Bunun yerine, Uzman Danışmanımdaki prosedürleri uygulamasına izin veriyorum. Tüm ana mantık prosedürlerde yer almalı. Yalnızca boş fonksiyonlar içeren örnek bir kod şablonu uygulamamız ve ardından her bir fonksiyonu ayrı ayrı uygulamasını istememiz gerekecektir. Ayrıca fonksiyon prototiplerini veya diğer yapıları uygulamasını da isteyebiliriz.

Ek ve önemli bir avantajı da, gereksinimlerinizi belirterek bir Uzman Danışman veya başka bir kod için bir plan hazırlamasını isteyebilmeniz ve ardından planını parça parça uygulayabilmenizdir. Uzman Danışmanınızın algoritmasının nasıl olacağı ve hangi göstergeleri veya diğer yaklaşımları kullanacağı konusunda kabaca veya kesin bir fikriniz olması iyidir. Ancak böyle bir fikriniz yoksa, önce onunla konuşabilir ve Uzman Danışmanınız için bir ticaret stratejisi seçmenize yardımcı olmasını isteyebilirsiniz. Size bazı seçenekler sunacaktır. Bu makalede örnek olarak ele alacağımız seçenek budur.

Şimdi yukarıdakileri özetleyelim ve sıfırdan yeni bir Uzman Danışman oluştururken izleyeceğimiz olası yolları sembolize eden kısa alt maddeler oluşturalım. Başlangıç için birkaç olası senaryo vardır:

  1. Gelecekteki kodun mimarisine karar vermedik ve nereden başlayacağımızı bilmiyoruz ve ayrıca ticaret yaklaşımlarından hangisini seçeceğimizi de bilmiyoruz.
  2. Gelecekteki kodun mimarisine karar vermedik ve nereden başlayacağımızı bilmiyoruz, ancak ana çalışma kodunun kaba bir resmini ve Uzman Danışmandan ne istediğimizi biliyoruz.
  3. Bizim için rahat olan hazır bir mimarimiz var, ancak hangi ticaret yaklaşımını seçeceğimizi kesinlikle bilmiyoruz.
  4. Kullanmak istediğimiz mimariyi biliyoruz ve ayrıca Uzman Danışmanın gelecekteki ticaret mantığı hakkında net bir fikrimiz var.

Kural olarak, her şey benzer yapılara indirgenecektir. Şunu yaparsak, dört maddenin tümü herhangi bir ticaret sistemi oluşturmanın genel şemasına uygulanabilir:

  • Mimariyi (ana kod veya çerçeve) bilmiyorsak, öncelikle onu uygulamamız ve ardından bu çerçevenin işleyişini sağlayan her şeyi uygulamamız gerekir.

Bu, örneğin, sınıfların, girdi değişkenlerinin, alanların ve metot prototiplerinin, arayüzlerin yanı sıra bizim tarafımızdan tanımlanan varlıkları kullanacak olan Uzman Danışmanın ana ticaret işlevselliğinin uygulanmasını isteyebileceğimiz anlamına gelebilir. ChatGPT'nin uygun şekilde kullanılmasıyla kod, toplam karakter sayısının %5-10'undan fazlasını almayacak şekilde uygulanabilir. Bu durumda, bunu hızlı bir şekilde uygulayabilir ve ardından tüm kodun yaklaşık %90'ını içerecek olan prosedürlerin uygulanmasına geçebiliriz. Bu prosedürler aynı basit şekilde uygulanacaktır, çünkü bunlardan çok sayıda olacak ve oldukça küçük ve kolay uygulanabilir olacaklardır. Elbette hazır bir şablonunuz olduğunda ve tüm bunları uygulamak zorunda kalmadığınızda çok daha kolaydır, ancak bu bilgi ve deneyim gerektirir.


ChatGPT’yi kullanarak bir ticaret sistemi geliştirme

Size yeterince teorik bilgi verdiğime inanıyorum. Şimdi uygulama zamanı. Benim durumumda, Uzman Danışmanlarıma temel olması için hazır bir şablon kullanıyorum. Önceki makalelerden birinde böyle bir şablonu tanımlamıştım. Özelliği, tek bir grafik üzerinde etkinleştirilen birçok enstrümanın paralel ticaretini sağlamasıdır. Halihazırda gerekli tüm ticaret işlevlerini ve ana mimariyi içeriyor. ChatGPT'nin tavsiyelerini tam anlamıyla takip eden bir ticaret sistemi oluşturacağım. Uzman Danışmanın ana ticaret mantığını ve görsel bileşenini kendim uygulayacağım, çünkü bu benim için daha az çaba gerektirecek.

ChatGPT ile etkileşime girmeye başladığınızda, ona ne yapılması gerektiğini açıklamak için çok daha fazla çaba harcayacağınızı ve bazı istekleri ve görevleri uygularken cevaplarını yüzlerce kez düzelteceğinizi fark edeceksiniz. Bir süre sonra, hangi soruların sorulmaya değer olduğunu, hangilerinin olmadığını hissetmeye başlayacaksınız. Yalnızca zamanınızı boşa harcamak yerine sonuçta size zaman kazandıracak görevleri belirlemeye başlayacaksınız. Burada kendi başınıza hissetmeniz gereken oldukça ince bir çizgi var - başka yolu yok. Her şey pratikte öğrenilir. Uzman Danışman tasarımına yaklaşımım tamamen bu hususlara bağlı olarak şekillenmiştir.

Öncelikle, Uzman Danışmanın temelini, yani çalışma prensibinin ne olduğunu ve hangi yöntemleri veya göstergeleri kullanacağını (modelin kendi takdirine bağlı olarak mevcut herhangi bir bilgiyi kullanmasına izin verdim) tanımlamasını istedim. Aynı zamanda, aşağıdaki dört öncülde kendi başıma uygulayabileceğim okunabilir bir formda sadece mantıksal koşullara ihtiyacım olduğunu belirttim:

  1. Alış pozisyonu açma.
  2. Alış pozisyonu kapatma.
  3. Satış pozisyonu açma.
  4. Satış pozisyonu kapatma.

Bu öncülleri uygulamak için model bana aşağıdaki koşullu mantığı önerdi:

  1. Mevcut fiyat EMA'nın üzerinde kapandı, mevcut fiyat ile EMA arasındaki fark ATR’dan daha az ve RSI 30'dan daha düşük.
  2. Mevcut fiyat SMA'nın altında kapandı veya mevcut fiyat Bollinger Bands göstergesinin üst bandının üzerinde kapandı.
  3. Mevcut fiyat EMA'nın altında kapandı, mevcut fiyat ile EMA arasındaki fark ATR’dan daha az ve RSI 70'ten daha yüksek.
  4. Mevcut fiyat SMA'nın üzerinde kapandı veya mevcut fiyat Bollinger Bands göstergesinin alt bandının altında kapandı.

Açıktır ki, bu boolean koşullar başarı durumunda 'true' ve başarısızlık durumunda 'false' geri döndürür. Bu sinyal değerleri piyasa emirleri ile işlem yapmak için oldukça yeterlidir. Burada dikkatinizi bu mantığı modernize etme olasılığına çekmek istiyorum. Bunu yapmak için aşağıdakileri yapabiliriz:

  • [K1] - alt RSI değerinin bölgesi
  • [K2 = 100-K1] - üst RSI değerinin bölgesi

Bu ifadeler, algoritmanın esnekliğini artırmak için kullanılabilir ve bu da daha sonra Uzman Danışman optimizasyonunun verimliliği üzerinde olumlu bir etkiye sahip olacaktır:

  1. Mevcut fiyat EMA'nın üzerinde kapandı, mevcut fiyat ile EMA arasındaki fark ATR’dan daha az ve RSI K1'den daha düşük
  2. Mevcut fiyat SMA'nın altında kapandı veya mevcut fiyat Bollinger Bands göstergesinin üst bandının üzerinde kapandı
  3. Mevcut fiyat EMA'nın altında kapandı, mevcut fiyat ile EMA arasındaki fark ATR’dan daha az ve RSI K2'den daha yüksek
  4. Mevcut fiyat SMA'nın üzerinde kapandı veya mevcut fiyat Bollinger Bands göstergesinin alt bandının altında kapandı

Bu örneği verdim çünkü söz konusu çözümün farklı, daha genişletilmiş bir algoritmanın sadece özel bir durumu olduğu açıksa modeli genişletmekten çekinmemelisiniz. Böyle bir genişletmenin size ne kazandıracağını bilmeseniz bile, bunu yaparak en azından algoritmanızın esnekliğini artırırsınız ve dolayısıyla daha ince ayar yapma olasılığı ve nihayetinde de verimliliğinde olası bir artış elde edersiniz.

Hangi koşulların uygulanması gerektiği düşünüldüğünde, aşağıdaki göstergelerin uygulanması için iki seçenekten birine ihtiyacımız olacaktır:

  1. SMA - standart hareketli ortalama (tek çizgi)
  2. EMA - üssel hareketli ortalama (tek çizgi)
  3. Bollinger Bands - Bollinger bantları (üç çizgiden oluşan bir set)
  4. RSI - göreceli güç endeksi (ayrı bir pencerede tek çizgi)
  5. ATR - ortalama gerçek aralık (ayrı bir pencerede tek çizgi)

Göstergeler, önceden tanımlanmış özel MQL5 fonksiyonları kullanılarak uygulanabilir, ancak bu yaklaşımı sevmiyorum çünkü uygulanan kodun MQL4 sürümüne dönüştürülmesi daha zor olacaktır. Ayrıca, örneğin çok sık yaptığım diğer dillerdeki projelerime entegre etmek benim için daha zor olacak. Uzun zamandır her şeyi mümkün olduğunca basit şekilde ve gelecekteki kullanımını düşünerek yapma alışkanlığım var. Bence bu çok iyi bir alışkanlık.

İkinci önemli nokta ise, kural olarak, bu tür göstergelerin gereksiz ve lüzumsuz hesaplamaları ve fonksiyonları beraberinde getirmesidir. Ayrıca, fonksiyonları kod düzeyinde katı bir şekilde belirlendiği için bu tür göstergeleri iyileştirmek imkansızdır. Değişiklik yapmak için, her durumda göstergenin kendi sürümünü oluşturmanız gerekecektir. Bence bir Uzman Danışman veya bir komut dosyası içinde kendi uygulama yönteminize sahip olmanın daha iyi olduğu açıktır. Bu tür göstergeleri uygulamak için aşağıdaki tekniği buldum:

  1. Gösterge çizgilerinin değerlerini saklamak için dizilerin oluşturulması (son N çubukla sınırlı).
  2. Yeni bir çubuk göründüğünde dizi değerlerinin kaydırılmasının uygulaması.
  3. Hata veya uzun bağlantı kopması durumunda gösterge değerleri dizisinin temizlenmesinin uygulanması.
  4. Kapandığında son çubuk için gösterge değerinin hesaplanmasının uygulanması.

Bu yaklaşımda, ilk üç öğe listelenen eylemleri sağlayan ortak dizi blokları ve fonksiyonları oluşturur. Görevimizi örnek olarak kullanarak bunun nasıl göründüğünü görelim. İlk madde ile başlayalım:

   double SMA1Values[]; // Array for storing SMA values
   double EMAValues[];  // Array for storing EMA values (exponential)
   double RSIValues[];  // Array for storing RSI values
   
   double BollingerBandsUpperValues[];  // Array for storing BollingerBands values, upper
   double BollingerBandsMiddleValues[]; // Array for storing BollingerBands values, middle
   double BollingerBandsLowerValues[];  // Array for storing BollingerBands values, lower
   
   double ATRValues[];// array for storing Average True Range values

Bu diziler Uzman Danışmanın başlangıcında verilen uzunluk sınırlarıyla başlatılır:

   //Prepare indicator arrays
   void PrepareArrays()
   {
      ArrayResize(SMA1Values, LastBars);
      ArrayResize(EMAValues, LastBars);
      ArrayResize(RSIValues, LastBars);
      ArrayResize(BollingerBandsUpperValues, LastBars);
      ArrayResize(BollingerBandsMiddleValues, LastBars);
      ArrayResize(BollingerBandsLowerValues, LastBars);
      ArrayResize(ATRValues, LastBars);
   }

Geleneksel göstergelerin aksine, bu strateji için önceki tüm değerleri yanımızda sürüklememize gerek yoktur. Bu kesinlikle bir avantaj. Bu uygulama paradigmasını seviyorum, çünkü kodun basitliğini ve hem göstergenin başlangıç değerlerinin hem de öncekiler kullanılarak elde edilenlerin eşdeğerliğini sağlıyor. Şimdi değer kaymasının nasıl göründüğünü görelim:

   //shift of indicator values
   void ShiftValues()
   {
      int shift = 1;
      for (int i = LastBars - 1; i >= shift; i--)
      {
         SMA1Values[i] = SMA1Values[i - shift];
         EMAValues[i] = EMAValues[i - shift];
         RSIValues[i] = RSIValues[i - shift];
         BollingerBandsUpperValues[i] = BollingerBandsUpperValues[i - shift];
         BollingerBandsMiddleValues[i] = BollingerBandsMiddleValues[i - shift];
         BollingerBandsLowerValues[i] = BollingerBandsLowerValues[i - shift];
         ATRValues[i] = ATRValues[i - shift];
      }
   }

Gördüğünüz gibi, her şey son derece basit. Aynı durum dizilerin temizlenmesi için de geçerli olacaktır:

   //reset all indicator arrays if connection fails [can also be used when initializing an EA]
   void EraseValues()
   {
      for (int i = 0; i < LastBars; i++)
      {
         SMA1Values[i] = -1.0;
         EMAValues[i] = -1.0;
         RSIValues[i] = -1.0;
         BollingerBandsUpperValues[i] = -1.0;
         BollingerBandsMiddleValues[i] = -1.0;
         BollingerBandsLowerValues[i] = -1.0;
         ATRValues[i] = -1.0;
      }
   }

Sanırım bu fonksiyonun nerede kullanılacağı oldukça açıktır. Şimdi göstergelerin kendilerinin uygulanmasına geçelim. Bu amaçla, ChatGPT'den kod oluşturma paradigmama göre uygun olacak uygun fonksiyonu uygulamasını istedim. SMA göstergesi ile başladım:

   //1 Function that calculates the indicator value to bar "1"
   double calculateMA(int PeriodMA,int Shift=0)
   {
      int barIndex=Shift+1;//bar index SMA is calculated for (with a shift)
      int StartIndex=barIndex + PeriodMA-1;//starting bar index for calculating SMA
      if (StartIndex >= LastBars) return -1.0; // Check for the availability of the bars for calculating SMA (if not valid, then the value is -1)
      double sum = 0.0;

      for (int i = StartIndex; i >= barIndex; i--)
      {
         sum += Charts[chartindex].CloseI[i];
      }
      LastUpdateDateTime=TimeCurrent();
      return sum / PeriodMA;
   }

Gördüğünüz gibi, fonksiyon çok basit ve kısa oldu. Başlangıçta bu fonksiyonun görünümü biraz farklıydı. İlk oluşturma sırasında, örneğin zamana göre çubukların numaralandırılmasının yönünü yanlış anlamasıyla ilgili birçok hata buldum. Ancak bazı düzenlemelerden sonra tüm bunları düzelttim ve orijinal uygulamada olmayan Shift parametresini ekledim. Bazı görsel iyileştirmeleri uyguladıktan sonra, göstergelerin geri kalanının da benzer şekilde uygulanmasını istedim. Bundan sonra, uygulanmalarında daha az hata oldu. Takip eden talepleri, soru içeriğinde önceki uygulamaların örnekleri de bulunacak şekilde başka bir gösterge için benzer bir fonksiyonun uygulanması isteğiyle gönderdim. Bu çok zaman kazandırdı. Şimdi kalan tüm göstergelerin uygulanmalarına bakalım. EMA ile devam edelim:

   //2 Function that calculates the value of the exponential moving average to bar "1"
   double calculateEMA(int PeriodEMA,double Flatness=2.0,int Shift=0)
   {
      int barIndex = Shift+1; // bar index EMA is calculated for (with a shift)
      int StartIndex=barIndex + PeriodEMA-1;//index of the starting bar for calculating the first SMA, for starting the recurrent calculation of EMA
      if (StartIndex >= LastBars) return -1.0; // Check for the availability of the bars for calculating EMA (if not valid, then the value is -1)
   
      double sum = 0.0;
      double multiplier = Flatness / (PeriodEMA + 1); // Weight multiplier 
      double prevEMA;
   
      // Calculate the initial value for the EMA (the first value is considered as a normal SMA) 
      for (int i = StartIndex; i >= barIndex; i--)
      {
         sum += Charts[chartindex].CloseI[i];
      }
      prevEMA = sum / PeriodEMA;//this is the starting value for the bar (StartIndex-1)
   
      // Apply the EMA formula for the remaining values 
      for (int i = StartIndex; i >= barIndex; i--)
      {
         prevEMA = (Charts[chartindex].CloseI[i] - prevEMA) * multiplier + prevEMA;
      }
   
      LastUpdateDateTime = TimeCurrent();
      return prevEMA;
   }

Bu arada, ChatGPT nesillerini araştırırken, hangi göstergenin hangi fikre dayandığını anlamak için çeşitli internet kaynaklarına başvurmamız gerekiyor. Bu da bizi daha yetkin kılar. Bu durum özellikle EMA'da belirgindir. Koda yakından bakarsak, SMA'nın daha basit uygulamasından çok farklı olmadığını ve daha ziyade normal hareketli ortalamaya bir eklenti gibi göründüğünü göreceğiz. Burada üs yoktur, ancak bir nedenden dolayı gösterge adında mevcuttur. Sırada RSI göstergesi var:

   //3 Function for calculating RSI to bar "1"
   double calculateRSI(int PeriodRSI,int Shift=0)
   {
       int barIndex = Shift+1; // bar index RSI is calculated for (with a shift)
       int StartIndex = barIndex + PeriodRSI - 1; // starting bar index for calculating RSI
       if (StartIndex >= LastBars) return -1.0; // Check for the availability of the bars for calculating RSI (if not valid, then the value is -1)
   
       double avgGain = 0.0;
       double avgLoss = 0.0;
       double change;
   
       // Calculate initial values for avgGain and avgLoss
       for (int i = StartIndex; i > barIndex; i--)
       {
           change = Charts[chartindex].CloseI[i]-Charts[chartindex].OpenI[i];
           if (change > 0)
           {
               avgGain += change;
           }
           else if (change < 0)
           {
               avgLoss -= change;
           }
       }
   
       avgGain /= PeriodRSI;
       avgLoss /= PeriodRSI;
   
       // RSI calculation
       double RS = 0.0;
       if (avgLoss != 0)
       {
           RS = avgGain / avgLoss;
       }
   
       double RSI = 100 - (100 / (1 + RS));
   
       LastUpdateDateTime = TimeCurrent();
       return RSI;
   }

Şimdi Bollinger Bands göstergesi için benzer bir prosedür uygulamamız gerekiyor. Bu prosedür, önceden hazırlanmış yapıya yerleştirilebilecek üç eğrinin değerlerini geri döndürmelidir:

   //structure to return all three bollinger band lines
   struct BollingerBands 
   {
       double upper;
       double middle;
       double lower;
   };

Şimdi, bu yapıyı soru içeriğine ekledikten sonra, BollingerBands türünü geri döndürmesi gerektiği gerçeğini göz önünde bulundurarak fonksiyonu uygulamasını isteyebiliriz. Model böyle bir görevle sorunsuz bir şekilde başa çıkacaktır:

   //4 Function for calculating the Bollinger Bands of the indicator 
   BollingerBands calculateBollingerBands(int PeriodBB, double DeviationBB,int Shift=0) 
   {
       int barIndex = Shift+1; // bar index Bollinger Bands is calculated for (with a shift)
       int StartIndex = barIndex + PeriodBB - 1; // index of the starting bar for calculating the first SMA, for starting the recurrent calculation of EMA
       BollingerBands rez;
       rez.lower=-1.0;
       rez.middle=-1.0;
       rez.upper=-1.0;
       if (StartIndex >= LastBars) return rez; // Check for the availability of the bars for calculating BB (if not valid, then the value is -1)
   
       double sum = 0.0;
       double prevBB;
       double sumSquares = 0.0;
   
       // Calculate the initial value for BB (the first value is considered as a normal SMA)
       for (int i = StartIndex; i >= barIndex; i--) {
           double closePrice = Charts[chartindex].CloseI[i];
           sum += closePrice;
       }
       prevBB = sum / PeriodBB; //this is the starting value for the bar (StartIndex-1)
   
       // Calculation of standard deviation
       for (int i = StartIndex; i >= barIndex; i--) {
           double closePrice = Charts[chartindex].CloseI[i];
           sumSquares += pow(closePrice - prevBB, 2);
       }
       double standardDeviation = sqrt(sumSquares / PeriodBB);
   
       // Calculate Bollinger Bands
       double upperBand = prevEMA + DeviationBB * standardDeviation;
       double lowerBand = prevEMA - DeviationBB * standardDeviation;
   
       rez.upper = upperBand;
       rez.middle = prevEMA;
       rez.lower = lowerBand;
   
       LastUpdateDateTime = TimeCurrent();
       return rez;
   }

Şimdi geriye ATR'ı hesaplamak için olan fonksiyonu uygulamak kalıyor:

   //5 Function for calculating Average True Range (Relative)
   double calculateRelativeATR(int PeriodATR,int Shift=0)
   {
       int barIndex = Shift+1; // bar index ATR is calculated for (with a shift)
       int StartIndex = barIndex + PeriodATR - 1; // starting bar index for calculating the first ATR
       if (StartIndex >= LastBars) return -1.0; // Check for the availability of the bars for calculating ATR and True Range (if not valid, then the value is -1)
   
       double sumPrice=0.0;
       double sumTrueRange = 0.0;
       double ATR;
   
       // Calculating True Range for bars and the sum of values for calculating the first ATR
       for (int i = StartIndex; i >= barIndex; i--)
       {
           sumPrice+=Charts[chartindex].HighI[i]+Charts[chartindex].LowI[i]+Charts[chartindex].CloseI[i]+Charts[chartindex].OpenI[i];//added by me 
           double high = Charts[chartindex].HighI[i];
           double low = Charts[chartindex].LowI[i];
           double trueRange = high - low;
           sumTrueRange += trueRange;
       }
   
       // ATR calculation
       //ATR = sumTrueRange / PeriodATR; - conventional calculation
       ATR = 100.0 * (sumTrueRange / PeriodATR)/(sumPrice/(PeriodATR*4.0));//calculation of relative ATR in %
   
       LastUpdateDateTime = TimeCurrent();
       return ATR;
   }

Sonda yer alan yorumlanmış satıra dikkat edin. Bu göstergeyi göreceli değerleri çalıştıracak şekilde biraz değiştirdim. Bu, her bir ticaret enstrümanı için kendi ağırlıklarımızı belirlemek zorunda kalmamamız için gereklidir. Aksine, bu, mevcut fiyata göre otomatik olarak gerçekleşecektir. Bu, daha verimli çok dövizli optimizasyona olanak sağlayacaktır. Doğru kullanıldığında bu kadar basit bir algoritmanın bile bize ticaret için küçük ama yeterli bir ileri dönem sunabileceği gerçeğini kanıtlamak için ona ihtiyacımız olacak. Diğer verimlilik yöntemleriyle birlikte bu ticaret yeteneği, Uzman Danışman tarafından şu anda izin verilen seviyede bile oldukça kabul edilebilir hale getirilebilir.

Öncülleri kendim uyguladım. Çok kolay oldu. Bunlardan birine, örneğin ilkine bakalım:

   //to open buy positions
   bool bBuy()
      {
      //determine if an open position is already present
      bool ord;
      ulong ticket;
      bool bOpened=false;
      for ( int i=0; i<PositionsTotal(); i++ )
         {
         ticket=PositionGetTicket(i);
         ord=PositionSelectByTicket(ticket);
         if ( ord && PositionGetInteger(POSITION_MAGIC) == MagicF)
            {
            bOpened=true;
            return false;
            }
         }
         
      if (!bOpened && EMAValues[1] > 0.0)//only if nothing is open and the indicator has been calculated 
         {
         //K - control ratio
         //RSIPercentBorder - control RSI
         double Val1=Charts[chartindex].CloseI[1]-EMAValues[1];
         double Val2=ATRValues[1]*(1.0/K);
         if (Val1 > 0 && Val1 < Val2 && RSIValues[1] < RSIPercentBorder) return true;         
         } 
      return false;
      }

Bir satış pozisyonu açmak için öncül, küçük istisnalar dışında benzerdir. Kapanış öncülü daha da basittir:

   //to close a buy position
   bool bCloseBuy()
      {
      if (SMA1Values[1] > 0.0)
         {
         if (Charts[chartindex].CloseI[1] < SMA1Values[1] || Charts[chartindex].CloseI[1] > BollingerBandsUpperValues[1] )
            {
            return true;
            }
         }
      return false;   
      }

Tüm bunlar çok basit bir şekilde çalışacaktır:

   IndicatorDataRecalculate();//recalculate indicators

   if ( bCloseBuy() )
      {
         CloseBuyF();
      }
   if ( bCloseSell() )
      {
         CloseSellF();  
      }
   if ( bBuy() )
      {
         BuyF();
      }
   if ( bSell() )
      {
         SellF();
      } 

Bence olabildiğince basit ve daha karmaşık olmasına gerek yok. Tüm bu kod yeni bir çubuk göründüğünde yürütülmelidir. Göstergelerin görselleştirilmesini ayrı olarak uyguladım. Sevmediğim tek şey ATR ve RSI gibi göstergelerin ayrı bir pencerede çizilecek şekilde tasarlanmış olması. Ayrı bir pencere yapay olarak oluşturulamayacağından ve açıkçası gerçekten ihtiyaç duyulmadığından, onlar için görüntüleme versiyonumu da fiyata bağlı olacak şekilde yaptım. Bunu başarmak için, pencere göstergelerini çizmek için belirli bir paradigma oluşturdum.

  1. Bir koridordan üç koridor oluşturmak için Percent kontrol değerinin girilmesi.
  2. Depolanan değerlerin tüm dizisi için maksimum (Max) ve minimum (Min) gösterge değerlerini belirleme.
  3. İlgili koridorun deltasının hesaplanması (Delta = Max-Min).
  4. Artan değerlerin üst koridorunun hesaplanması (HighBorder = Max - Delta*Percent/100).
  5. Artan değerlerin alt koridorunun hesaplanması (LowBorder = Min + Delta*Percent/100).
  6. Hem üst hem de alt koridorlar tanımlandığı için orta koridor zaten tanımlanmıştır.

Göstergenin mevcut değeri koridorlardan birinde yer alıyorsa, noktaları koridora karşılık gelen uygun rengi alır. Her şey çok basit. Bu şekilde, değerleri grafikteki çubuklara bağlayabilir ve örneğin renklerini buna göre değiştirebilir veya karşılık gelen renge sahip çubuğa bağlı nesneler oluşturabiliriz. Birçok kişinin muhtemelen fark ettiği gibi, bu fikri RSI göstergesinden aldım, çünkü bu özel şema genellikle ticaret için kullanılır. Bu bölgelere aşırı alış ve aşırı satış bölgeleri denir.

Bu kodun burada çok önemli olmadığını düşünüyorum çünkü görevimizin uygulanmasıyla en az ilişkisi var, ancak yalnızca olası hataları düzeltmeye ve iyileştirmelere yardımcı olacaktır. Dilerseniz, ChatGPT kullanarak bu görüntülemeyi bile uygulayabilirsiniz. Ancak, bu görüntülemenin nasıl çalıştığını göstermeye değer olduğunu düşünüyorum:

Göstergelerin görselleştirilmesi

Burada her şey yalnızca çizgi nesne türünün yardımıyla mümkün olduğunca basit bir şekilde yapıldı. Bir çizgi oluştururken, çizginin başlangıç ve bitiş noktaları aynı zamana ve fiyata bağlıysa, çizgi bir noktaya dönüşür. Çizgi kalınlığını ayarlayarak, ilgili noktanın kalınlığını da ayarlamış oluruz. Bunlar benim çok uzun zamandır kullandığım bazı tüyolar.


İşlevselliğin değerlendirilmesi ve sonuçların analiz edilmesi

ChatGPT bu algoritmanın optimal olduğunu düşünse de, bu kararların neye dayandığını bilmiyoruz. İyi bir geriye dönük test veya gerçek ticaret, verimliliğin bir ölçüsü olarak hizmet edebilir. Umarım herkes gerçek ticaretten önce MetaTrader 5 optimize ediciyi kullanılarak yapılabilecek en uygun ayarın yapılması gerektiğini anlıyordur. Bu terminalin çok dövizli optimizasyon olanağına sahip olması ve bu aracın etkinliğini tam olarak kullanan şablonumun yetenekleri göz önüne alındığında, Uzman Danışmanı tüm "28" döviz çifti için güvenle optimize edebiliriz. Bu yaklaşımın bazı bariz avantajlarına değinmekte fayda var:

  1. Çok dövizli formasyonlar (modeller) için otomatik arama
  2. Çok dövizli formasyonlar (modeller) daha fazla ağırlığa sahiptir ve piyasa değişikliklerine daha fazla uyum sağlar
  3. Her ticaret enstrümanı kendinden bir şeyler sağladığı için daha fazla işlem ortaya çıkar
  4. Zaman tasarrufu (her enstrümanı ayrı ayrı optimize etmeniz gerekmez)

Elbette dezavantajları da vardır. Bu durumda en önemlisi, her bir enstrüman için ince ayar yapılamamasıdır. Elbette, bu sorun ek işlevsellik getirilerek çözülebilir, ancak bu makalenin konusu bu değil. Ancak bu optimizasyonu gerçekleştirmek yeterli değildir, size sunduğu tüm kapsamdan sonuçları doğru bir şekilde seçmek de önemlidir. Ben en uygun olanı seçtim:

En uygun optimizasyon seçeneği

Gördüğünüz gibi, "H4" zaman dilimini kullanarak "2018"den "2023"e kadar optimize ettim ve "2023"ün altı ayının tamamını ileri test için bıraktım. Gördüğümüz gibi, optimizasyon bölümündeki mükemmel olmayan kâr eğrisine rağmen, kârlı ticaret için birkaç aya daha sahibiz ve bu gerçek, stratejinin anlamsız olmadığı ve ticaret için başarılı bir şekilde kullanılma potansiyeline sahip olduğu anlamına geliyor. Optimize edilebilir birçok ticaret sistemi büyük olasılıkla bu sonuca yaklaşamaz bile. Bazen kod açısından inanılmaz harika sistemleri test edebilir, ancak böyle sonuçlar elde edemezsiniz.

Ben olsam bu algoritmaya çok daha fazlasını eklerdim. Burayı bir geliştirme alanı olarak görüyorum. Ancak bunun hiç önemli olmadığını, ortaya çıkan Uzman Danışmanın genişleme potansiyelinin önemli olduğunu söylemek gerekir. Burada rol oynayan sunulan algoritma değil, sizin yetkinliğiniz ve yaratıcılığınızdır. MQL5 geliştirme sürecine başarılı bir şekilde entegre olmak için önemli niteliklere ihtiyacınız olacaktır:

  • Programlama becerileri (zorunlu)
  • Matematik becerileri (arzu edilir)
  • Blok düşünme
  • Görevleri basitleştirme ve ayrı aşamalara ayırma becerisi
  • ChatGPT'nin sadece bir araç olduğu gerçeğini anlama (bu nedenle çalışmayan şeyler için onu suçlamanın bir anlamı yoktur; çalışmayan her şeyi düzeltmek size bağlıdır)
  • Elde edilen ticaret sonuçlarının doğru bir şekilde yorumlanması
  • Modelin her zaman hata yapabileceğinin farkında olunması (ancak bu sizi rahatsız etmemelidir, asıl önemli olan geliştirme süresini kısaltmış olmanızdır)
  • Kendi uygulama planınızı oluşturma (bu gerekli değil elbette, benim yaklaşımımı kullanabilirsiniz)
  • ChatGPT, gücü size bağlı olan yol arkadaşınızdır. Ne kadar sabırlı, zeki ve becerikli olursanız, bu arkadaş o kadar etkili olur.

Kendi takdirinize bağlı olarak kullanıp kullanmayacağınız bir araca sahipsiniz, ancak bu aracın programlama da dahil olmak üzere birçok açıdan benim için çok yararlı olduğunu kesinlikle söyleyebilirim.


Sonuç

Aslında, bu aracın kullanımında benim tarzıma bağlı kalmanız gerekli değildir. Onu kullanarak pek çok şey denedim ve olasılıkların neredeyse sınırsız olduğunu söyleyebilirim. Elbette, başarılı olmadan önce, benim gibi kesinlikle bir miktar zaman ve çaba harcayacaksınız.

Ancak yine de bu aracı denemenizi ve böylece zamandan tasarruf etmenizi tavsiye ederim. En azından ChatGPT’yi kullanmak yapay zekaya karşı doğru tutumu edinmenizi sağlayacaktır. Bu teknolojiyi neredeyse tüm geliştirme zincirlerine entegre etmek potansiyel olarak mümkündür. Eminim ki bu sadece bir başlangıç ve değişimler çok yakında. Bu aracı mümkün olan en kısa sürede tanımaya başlamanızı ve en geniş görev yelpazesinde uygulamaya çalışmanızı tavsiye ederim.

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

Ekli dosyalar |
ChatGPT_bot.set (2.99 KB)
ChatGPT_bot.mq5 (145.44 KB)
MQL5'te ALGLIB sayısal analiz kütüphanesi MQL5'te ALGLIB sayısal analiz kütüphanesi
Bu makalede, finansal veri analizinin verimliliğini artırabilecek ALGLIB 3.19 sayısal analiz kütüphanesini, uygulamalarını ve yeni algoritmalarını kısaca gözden geçireceğiz.
Ticaret için kombinatorik ve olasılık teorisi (Bölüm III): İlk matematiksel model Ticaret için kombinatorik ve olasılık teorisi (Bölüm III): İlk matematiksel model
Daha önce tartışılan konunun mantıksal bir devamı, ticaret görevleri için çok işlevli matematiksel modellerin geliştirilmesi olacaktır. Bu makalede, fraktalları tanımlayan ilk matematiksel modelin geliştirilmesiyle ilgili tüm süreci sıfırdan anlatacağım. Bu model önemli bir yapı taşı haline gelmeli, çok işlevli ve evrensel olmalıdır. Bu fikrin daha da geliştirilmesi için teorik temelimizi oluşturacaktır.
Freelance hizmetinde yatırımcıların siparişlerini yerine getirerek nasıl para kazanılır? Freelance hizmetinde yatırımcıların siparişlerini yerine getirerek nasıl para kazanılır?
MQL5 Freelance, yatırımcı müşteriler tarafından sipariş verilen ticaret uygulamalarını oluşturmaları için geliştiricilere ödeme yapılan çevrimiçi bir hizmettir. Hizmet 2010 yılından bu yana başarılı bir şekilde faaliyet göstermekte olup, bugüne kadar tamamlanan 100.000'den fazla projenin toplam değeri 7 milyon dolardır. Gördüğümüz gibi, burada önemli miktarda para söz konusu.
Ticaret için kombinatorik ve olasılık teorisi (Bölüm II): Evrensel fraktal Ticaret için kombinatorik ve olasılık teorisi (Bölüm II): Evrensel fraktal
Bu makalede fraktalları incelemeye devam edeceğiz ve tüm materyali özetlemeye özellikle dikkat edeceğiz. Bunu yapmak için, daha önceki tüm gelişmeleri, ticarette pratik uygulama için uygun ve anlaşılabilir olacak kompakt bir forma getirmeye çalışacağım.