"MQL5'e Giriş: Basit Uzman Danışman (EA) ve Özel Gösterge nasıl yazılır" makalesi için tartışma

 

Yeni makale MQL5'e Giriş: Basit Uzman Danışman (EA) ve Özel Gösterge nasıl yazılır yayınlandı:

MetaTrader 5 İstemci Terminaline dahil edilen MetaQuotes Programlama Dili 5 (MQL5), MQL4'e kıyasla birçok yeni imkana ve daha yüksek performansa sahiptir. Bu makale, bu yeni programlama dili hakkında bilgi edinmenize yardımcı olacaktır. Uzman Danışman ve Özel Göstergenin nasıl yazılacağına dair basit örnekler bu makalede sunulmuştur. Bu örnekleri anlamak için gerekli olan MQL5 dilinin bazı ayrıntılarını da ele alacağız.

Yazar: Denis Zyatkevich

 
Örneğin MACD veya Özel Hareketli Ortalama gibi bir gösterge için hata ayıklayıcıyı başlatamıyorum. F5 tuşuna basıldığında, "Derle" düğmesi "İptal" düğmesine dönüşüyor, bir saniyeden kısa bir süre sonra ekran yanıp sönüyor ve her şey başlangıç durumuna dönüyor. "Hata Ayıklama" sekmesi görünmez. "AccountInfo" betiğinde hata ayıklama yapılması durumunda hata ayıklayıcı normal şekilde çalışır, Derleme 257.
 
Göstergelerin hata ayıklaması şu anda uygulanmamaktadır.
 

Zafer Gününüz kutlu olsun!

Lütfen bana tavsiyede bulunabilir misiniz?

Uzman Danışman, tüm açık pozisyonların alternatif bir arama döngüsünü içerir. Döngüde PositionGetDouble(POSITION_SL) işlevi kullanılır. POSITION_SL parametresinin açıklamasından, açık bir pozisyon için Zararı Durdur seviyesini elde etmek için kullanılabileceği anlaşılmaktadır.

Soru 1: Farklı Zarar Durdurma seviyelerine sahip birkaç bekleyen emrin tetiklenmesi sonucunda bir açık pozisyon oluşmuşsa PositionGetDouble(POSITION_SL) fonksiyonu hangi değeri gösterecektir?

Soru 2: Farklı stop-loss seviyelerine sahip birkaç bekleyen emrin tetiklenmesi sonucunda bir açık pozisyon oluşmuşsa, bu stop-loss seviyeleri hakkında veri almanın en iyi yolu nedir?

Bu konu daha önce tartışıldıysa, lütfen bir bağlantı sağlayın.

Документация по MQL5: Торговые функции / PositionGetDouble
Документация по MQL5: Торговые функции / PositionGetDouble
  • www.mql5.com
Торговые функции / PositionGetDouble - Документация по MQL5
 
Yedelkin:

Zafer Gününüz Kutlu Olsun!

Soru 1: Farklı stop-loss seviyelerine sahip birkaç bekleyen emrin tetiklenmesi sonucunda bir açık pozisyon oluşmuşsa PositionGetDouble(POSITION_SL) fonksiyonu hangi değeri gösterecektir?
fonksiyonun ne döndürdüğünü kontrol ettiniz mi?
 
sergeev:
fonksiyonun ne döndürdüğünü kontrol ettiniz mi?

Hayır, etmedim. Çünkü belirli bir fonksiyonu kontrol ederken (test ederken) gözlemlenmesi gereken tüm önemli başlangıç koşullarını bilmiyorum. Ve ayrıca benim için yeni olan bir programlama dilini öğrenirken bilimsel dürtme yöntemini kullanma olasılığına karşı olumsuz tutumum nedeniyle.

Açıklama. Uzman Danışmanlara adanmış çok az sayıda makale ve MQL5 üzerine bir ders kitabının olmaması, ortalama bir kullanıcıyı kendi ticaret stratejisini uygularken bu (ve çok faydalı) makale de dahil olmak üzere web'de bulunan materyallere güvenmeye zorlamaktadır.

Çok iyi anladığınız gibi, sorularım MQL5 Referans Kılavuzunun mevcut sürümünde ve MQL5 Uzman Danışmanları hakkındaki mevcut makalelerde yansıtılmayan teorik ve uygulamalı yönlerle ilgilidir.

Bu şartlar altında, deneyler yapmak, belirli koşullar altında "bir fonksiyonun ne döndürdüğünü kontrol etmek" ve benzeri amatörlükler yerine, bilgili kişilere (dil geliştiricileri ve makale yazarları) MQL5 fonksiyonlarının belirli teorik-uygulamalı yönleri hakkında sorular sormanın çok daha makul olduğunu düşünüyorum.

"Ne olması gerektiği" konusunda bilgili kişilerden gelen bir yanıtın, "fonksiyonun ne döndürdüğünü kontrol ettiniz mi" gibi bir karşı sorudan daha uygun göründüğüne katılıyorum (işleyişinin özelliklerini anlamadığım için).

 

Cevabı buldum. İstemci Terminali Kullanıcı Kılavuzu'nda:

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

Garip. Her finansal araç için yalnızca bir açık pozisyon mümkün olduğundan, bir pozisyonun stop-loss ile kısmi olarak kapatılması senaryolarının prensipte uygulanamayacağı ortaya çıkıyor?

Not: MT5'in doğasında olan bu özelliği bulduktan sonra, farklı stop-loss seviyelerine sahip birkaç bekleyen emrin tetiklenmesi sonucunda bir açık pozisyon oluşmuşsa PositionGetDouble(POSITION_SL) fonksiyonu tarafından döndürülen değeri kontrol etmeye gerek yoktur.

 
Yedelkin:

Cevabı buldum. İstemci terminalinin Kullanım Kılavuzunda:

Garip. Her bir finansal araç için yalnızca bir açık pozisyon mümkün olduğundan, bir pozisyonun zararı durdurma yoluyla kısmen kapatılması senaryolarının prensipte uygulanamayacağı ortaya çıkmaktadır?

Not: MT5'in doğasında olan bu özelliği bulduktan sonra, farklı stop-loss seviyelerine sahip birkaç bekleyen emrin tetiklenmesi sonucunda bir açık pozisyon oluşmuşsa, PositionGetDouble(POSITION_SL) fonksiyonunun hangi değeri döndürdüğünü kontrol etmeye gerek yoktur.

"izpodvypodvert vypert vypert podvypert" fonksiyonu şeklinde, verilen enstrümandaki işlem hacmine göre kar almayı seviyelere göre bekleyen emirlere bölecek bir fonksiyon yapmak mümkündür.

Ancak kişisel olarak, kilitlemenin olmadığı resmi ticaret terminallerine aşina olduğum için bu işlevi gereksiz görüyorum.

 
CoreWinTT:

"from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" fonksiyonu olarak yapılabilir ...

Evet, bu konuda kafamı çoktan karıştırdım. Üç seçenek var :)

- ya MT5 özellikleri için mevcut senaryoları yaratıcı bir şekilde yeniden işlemek;

- ya da bir alt-alt-alt-alt-alt-alt-alt-alt-alt-alt-alt-alt-alt fonksiyonlar sınıfı oluşturmak;

- veya emirlerde stop-loss ve take-profits kullanmaktan kaçının, bunun yerine başlangıçta ters yöndeki emir demetleriyle çalışın.

Boş verin, üstesinden geleceğiz! :)

 

Uzman Danışman'da ArraySetAsSeries işlevlerinin yerleştirilmesi hakkında soru.

ArraySetAsSeries işlevleri, CopyTime, CopyHigh ve CopyLow işlevlerinden hemen sonra OnTick () işlevine yerleştirilir.

ArraySetAsSeries işlevlerini OnInit() işlevine yerleştirmenin önünde herhangi bir engel var mı, yoksa diziler her zaman yalnızca kopyalandıktan sonra mı indekslenmelidir?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

ArraySetAsSeries fonksiyonlarının EA'daki yerleşimi ile ilgili soru.

ArraySetAsSeries fonksiyonları OnTick() fonksiyonuna CopyTime, CopyHigh ve CopyLow fonksiyonlarından hemen sonra yerleştirilir.

ArraySetAsSeries işlevlerini OnInit() işlevine yerleştirmenin önünde herhangi bir engel var mı, yoksa diziler her zaman yalnızca kopyalandıktan sonra mı indekslenmelidir?

Gösterge tamponları için SetIndexBuffer yazar:

Not

Bağlandıktan sonra, dinamik dizi tamponu[], bağlanan dizi zaman dizilerinde olduğu gibi dizinlenecek şekilde önceden ayarlanmış olsa bile, normal dizilerde olduğu gibi dizinlenecektir. Gösterge dizisinin öğelerine erişim sırasını değiştirmek gerekirse, diziyi SetIndexBuffer() işleviyle bağladıktan sonra ArraySetAsSeries( ) işlevini uygulamak gerekir.

Uzman Danışmanlar için benzer olmalıdır, kontrol edin