"MQL5 Nesne Yönelimli Programlama Yaklaşımını Kullanarak Expert Advisor Yazma" makalesi için tartışma
Genel olarak fena değil, ancak adında kullanılan OOP sloganını takip etmede biraz yetersiz. Örneğin, stoploss, take ve price neden sınıfın dışında yer alıyor? STP ve TKP üye olmalı, setSLTP metoduna ihtiyacımız var; latest_price ve seviyeler openBuy/openSell içinde düşünülmeli. Kendileri çok mantıksız bir şekilde yazılmıştır - MarginOK çağrısı ile sadece bir if bırakmak ve içine if(Chk_Margin == 0) return(true) kontrolünün ilk satırını eklemek arzu edilir;
Ve küçük bir şey daha. Chk_Margin sadece bir bool olarak kullanılmasına rağmen neden int- olarak bildirilmiştir? En azından yeterli bir türle tanımlamak daha iyi olurdu, aksi takdirde kaynak kodu okurken Chk_Margin == 2, 3, vb. ise ne olacağı konusunda sorular oluşur.
Varsayılan giriş parametreleri ile belirtilen dönemde belirtilen çift ile bu kadar güzel bir denge grafiği elde edemezsiniz. Yazarın başka alıntıları var mıydı? Böyle bir grafiğin elde edildiği girdi parametrelerini ekleyebilir misiniz?
Sonuçların çok farklı olması için yazarla aranızdaki fiyat teklifleri ne kadar farklı olmalıdır))))))) Neredeyse aynısını elde ettim ve nihai sonuç biraz daha iyi:
tasarım şaşırtıcı
if(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) { return(true); } else { return(false); }
tasarım şaşırtıcı
Tam olarak neyi bu kadar beğenmediniz? Elbette, bunu kod bağlamında görmedim.....
bu tür durumlarda genellikle böyle yazılmaz mı?
return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
Bu tür durumlarda genellikle bu şekilde yazılmıyor mu?
Kodun aşağıdaki kısmını anlamıyorum:
// Önceki çubuğun (çubuk 1) kapanış fiyatını ilgili Expert Advisor değişkenine kopyalayın Cexpert.setCloseprice(mrate[1].close); // bar 1 kapanış fiyatı //--- Alış pozisyonu olup olmadığını kontrol edin if (Cexpert.checkBuy()==true) { if (Buy_opened) { Alert("Zaten satın almak için bir pozisyonumuz var!!!"); return; // Uzun pozisyona ekleme yapmayın } double aprice = NormalizeDouble(latest_price.ask,_Digits); double stl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); double tkp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); int mdev = 100; // siparişi ver Cexpert.openBuy(ORDER_TYPE_BUY,Lot,aprice,stl,tkp,mdev); }Eğer bir alış pozisyonu açacaksak, latest_price.ask fiyatına odaklanmalıyız, ancak böyle bir pozisyon için Zararı Durdur ve Kar Al ayarlarken - latest_price.bid fiyatına. Bu doğru mudur? Zararı Durdur ve Kâr Al neden kod metnindeki satış fiyatına göre belirleniyor? Bu bir baskı hatası mı yoksa belirli bir stratejinin özelliği mi (kod, bir Satış pozisyonu açmak için benzer bir yapıya sahiptir)?
Kodun aşağıdaki kısmını anlamıyorum:
Eğer bir alış pozisyonu açacaksak, latest_price.ask fiyatına odaklanmalıyız, ancak böyle bir pozisyon için Zararı Durdur ve Kar Al ayarlarken - latest_price.bid fiyatına. Bu doğru mu? O zaman neden Zararı Durdur ve Kâr Al, kod metnindeki satış fiyatına göre belirleniyor? Bu bir baskı hatası mı yoksa belirli bir stratejinin özelliği mi (kod, bir Satış pozisyonu açmak için benzer bir yapıya sahiptir)?İşte mantık (muhtemelen, ben de genellikle bunu kullanıyorum):
1. Alış için açılış fiyatı Ask olarak kabul edilir (ve doğrudur);
Diyelim ki EURUSD'de 1,27'den açıyoruz.
2. Bir pozisyon açarken spread'e eşit bir fark alırız, Alış için bu Ask-Bid'dir (mevcut fiyattan kapatırsak potansiyel kayıp);
Spred'in 5 pip'e eşit olduğunu varsayalım. Böylece açılışta Teklif 1,2695'te olacaktır (değil mi?).
3. Uzun pozisyonlar Alış fiyatından kapatılır (ve bu oldukça mantıklıdır).
Yani Alış 1,27'ye gittiğinde pozisyonda bir BU elde ederiz (değil mi?).
4. Ancak aynı zamanda bir kar elde etmemiz gerekir (standart fiyat teklifinde 100 pip).
Yani TP, Açılış'tan 100 pip daha yüksek olmalıdır. Bizim durumumuzda bu 1,28'dir (değil mi?).
Aynı zamanda TP, Teklif (Ask değil) bu 1.28'e ulaşırsa tetiklenecektir....
5. SL'nin de ayarlanması gerekir (diyelim ki 50 pip). Yani örneğimizde 1,2650'de (Açılış'ın 50 pip altında) yer alacaktır.
SL hangi koşullar altında çalışacak?
Mantıksal olarak, fiyat bu 50 pip'i bize karşı geçtiğinde çalışmalıdır (yani SL'deki kapanış paralarındaki Ask mantıksal olarak bu 1.2650'de olmalıdır).
Bu durumda Teklif nerede olmalıdır? Ve şu anda 1.2645'te yer alacak (çünkü 5 pipimiz var koşuluna göre Spred).
Uzunların sabit olduğunu hatırlamak.
6. Şimdi gerçekte neler olduğuna bakalım (örnek olarak MQL4'te uzun bir piyasa açılışını ele alalım).
//Взято из справки по OrderSend ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point);
Burada ne görüyoruz
Açılış fiyatı Ask olarak kabul edilir, SL Bid olarak kabul edilir ve TP Ask olarak kabul edilir.
Bizim durumumuzda bu modeli elde edeceğiz.
OrderSend(Symbol(),OP_BUY,1,Open = Ask,3,SL = Bid-50*Point,TP Ask+100*Point);
Verilerimizi burada değiştirelim:
OrderSend(Symbol(),OP_BUY,1,1.2700,3,1.2695-50*Point,TP 1.2700+100*Point);
Sonunda elde ettiğimiz şey - Açılış = 1.2700 SL= 1.2645 TP 1.28
PS
Orijinal verilerle karşılaştıralım:
Emir - Aç = 1,2700 SL= 1,2645 TP 1,28
Model - Açılış = 1,2700 SL= 1,2645 TP 1,28
Burada şöyle bir mantık var (büyük olasılıkla ben de bunu kullanma eğilimindeyim):
1. Alış için açılış fiyatı Ask olarak kabul edilir (ve doğrudur);
Diyelim ki EURUSD'de 1,27'den açıldık
2. Bir pozisyon açarken spread'e eşit bir fark alırız, Alış için bu Ask-Bid'dir (mevcut fiyattan kapatırsak potansiyel kayıp);
Spred'in 5 pip'e eşit olduğunu varsayalım. Böylece açılışta teklif 1,2695'te olacaktır (değil mi?).
5. SL de ayarlanmalıdır (diyelim ki 50 pip). Yani örneğimizde 1,2650'de (Açılışın 50 pip altında) bulunacaktır
SL hangi koşullar altında tetiklenecektir?
Mantıksal olarak, fiyat bize karşı bu 50 pipi geçtiğinde çalışmalıdır (yani SL'deki kapanış paralarında sor mantıksal olarak bu 1.2650'de olmalıdır).
Bu durumda Teklif nerede olmalıdır? Ve şu anda 1,2645'te bulunacak (çünkü 5 pipimiz var koşuluna göre Spred).
Uzunların sabit olduğunu hatırlamak.
- Ü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

Yeni makale MQL5 Nesne Yönelimli Programlama Yaklaşımını Kullanarak Expert Advisor Yazma yayınlandı:
Bu makalede, "Yeni Başlayanlar için MQL5'te Expert Advisor yazmak için Adım Adım Kılavuz" adlı makalede yaptığımız şeyi yapmak için (Basit bir Expert Advisor oluşturma) nesne yönelimli yaklaşıma odaklanılmaktadır. Birçok kişi bunun zor olduğunu düşünüyor, ancak bu makaleyi okumayı bitirdiğinizde, nesne yönelimi temelinde kendi Expert Advisor'ınızı yazabileceğinizi garanti ediyorum.
Peki sırada ne var?
Hata ayıklama dediğinizi duyar gibiyim. Haklı olabilirsiniz. Kodunuzda hata olup olmadığını test etmek ve görmek her zaman iyidir; aksi takdirde kodu herkese açık olarak serbest bıraktığınızda hayal kırıklığına uğrayacaksınız. Buradaki sorun, bunun yalnızca bir içerme dosyası olması, grafiğe eklenebilecek bir expert adviser kodu veya script dosyası veya gösterge kodu olmamasıdır. Bu noktada iki seçeneğiniz var (deneyimlerime göre);,
Yazar: Samuel Olowoyo