"Expert Advisor yazarken MQL5 Standard Alım Satım Sınıfı kitaplıklarının kullanımı" makalesi için tartışma
Benim için çok faydalı bir makale. Kütüphaneleri kullanırsanız her şey çok daha kolay olur!
Geliştiricilere istek: High[i] , Low[i] ile çalışmak için bir sınıf yazın. Open[i], Close[i]. Bu sınıfın herkes için faydalı olacağını düşünüyorum! Bu sorunu kendim için çözdüm, ancak doğru olduğundan emin değilim, çünkü test etmek çok zaman alıyor....
#include <Indicators\Series.mqh> double High[]; CiHigh z;
bu kod neden hata veriyor
'1.mq5' 1.mq5 1 1
'Series.mqh' Series.mqh 1 1
'ArrayObj.mqh' ArrayObj.mqh 1 1
'Array.mqh' Array.mqh 1 1
'Object.mqh' Object.mqh 1 1
'StdLibErr.mqh' StdLibErr.mqh 1 1
'ArrayDouble.mqh' ArrayDouble.mqh 1 1
'CiHigh' - türü olmayan bildirim 1.mq5 12 2
1 hata(lar), 0 uyarı(lar) 2 1
nasıl elde edileceğini yazmak zor değilse
Örneğin, Yüksek[2] yazdırın.
bu kod neden hata veriyor
eğer zor değilse, lütfen nasıl elde edileceğini yazın
Örneğin, Yüksek[2] yazdırın.
dokümantasyonda bir baskı hatası var. Bu sınıf TimeSeries.mqh dosyasında bulunur.
Kullanım örneği (kod, geçerli grafiğin son üç Yüksek değerini yazdırır):
#include <Indicators\TimeSeries.mqh> //+------------------------------------------------------------------+ //| Komut dosyası programı başlatma işlevi| //+------------------------------------------------------------------+ void OnStart() { //--- double High[]; CiHigh z; int count=3; if(z.Create(_Symbol,_Period)==true) { if(z.GetData(0,count,High)==count) { for(int i=0; i<count; i++) Print(i,"=",High[i]); } else Print("Alınamadı",count," zaman serisi verileri."); } else Print("Zaman serisi oluşturulurken hata oluştu."); } //+------------------------------------------------------------------+
belgelerde bir yanlış basım var. Bu sınıf TimeSeries.mqh dosyasındadır.
Kullanım örneği (kod, mevcut grafiğin son üç Yüksek değerini verir):
Herkesin kendisi ve ihtiyaçları için programladığını anlıyorum, ancak temelde zaman serisi sınıfları grubunu sevmiyorum, çünkü temelde hepsi bir yöntemden ve işlevsellikten daha fazla açıklayıcı kısımdan oluşuyor ve genellikle belirli bir enstrüman için tüm zaman serilerine sahip olmak gerekiyor, gerekli enstrüman için tüm zaman serilerinin bulunduğu bir sınıf yaptım, yöntemlerde geçmiş yaklaşık olarak bu şekilde pompalanır:
struct str_bars{ datetime time[]; // Geçerli grafiğin her çubuğunun açılış zamanını içeren zaman serisi dizisi double open[]; // Geçerli grafiğin her çubuğunun açılış fiyatlarını içeren zaman serisi dizisi. double close[]; // Geçerli grafiğin her çubuğunun kapanış fiyatlarını içeren zaman serisi dizisi. double high[]; // Geçerli grafiğin her çubuğunun maksimum fiyatlarını içeren zaman serisi dizisi. double low[]; // Geçerli grafiğin her çubuğunun minimum fiyatlarını içeren zaman serisi dizisi. }; struct str_info{ double point; // Teklif para biriminde geçerli enstrüman puan boyutu int spread; // Güncel yayılma }; //____________________________________________________________________ class currency { public: //---- данные MqlTick TICK; // tik verileri str_bars BAR; // zaman serisi verileri str_info INFO; // araç bilgileri int error; //---- методы int create(string sym,ENUM_TIMEFRAMES period, int numbars); int refresh(void); private: string symbol; ENUM_TIMEFRAMES per; int num; datetime lastbar_time; int tmpint1,tmpint2; int ch_load(void); }; //____________________________________________________________________
Sınıfımla yalnızca önceden hazırlanmış veriler kısmında çalışıyorum ve tabii ki sınıfın kendisi refresh() yöntemini çağırarak veri alıyor
Makalede bir yanlışlık var.
double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // lot fiyatı/ gerekli marj sayısı
olmalı
double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price); //--- lot fiyatı/ gerekli marj sayısı
Harika bir makale. Yazara çok teşekkürler. Ayrıca bir sipariş vermeden önce Stop_Level'in bir kontrolünü ve spread değerinin bir kontrolünü yazmak istiyorum. Mesele şu ki, eğer spread dalgalanıyorsa, o zaman yüksek değerlerde piyasaya giremezsiniz, çünkü karlı değildir. Bu, Uzman Danışmanın haberler sırasında ticaret yapmamasına yardımcı olacaktır. Ayrıca sapmayı da kontrol etmek istiyorum - mantık benzer. Ayrıca kütüphane hakkında da bir soru var: fonksiyon nedir (ne tür bir süreci ifade eder ve tanımlar)?
FreezeLevel
Ticaret işlemlerinin dondurulma mesafesini nokta cinsinden döndürür.
| int FreezeLevel() const |
basit bir dille - eğer biliyorsanız lütfen açıklayın.
Ve bir soru daha. Sınırları, örneğin şu andaki Stop_Level'i öğrenebiliriz (diyelim ki 10 puan). SL=10 puan ile bekleyen bir emir veriyoruz. Örneğin bir saat sonra fiyat emirde belirtilen fiyata ulaşır, ancak şu anda Stop_Level örneğin 15 pip'e eşittir. Ne olacak - bekleyen emir çalışacak mı yoksa reddedilecek mi? Ayrıca, fiyat emirde belirtilen fiyata ulaştığında, ancak spread değiştiğinde - bu, emrin açıldığı sırada beklenen fiyata göre daha kötü bir fiyattan giriş veya çıkışın mümkün olduğu veya emrin hiç çalışmayacağı anlamına mı gelir?
Neyi yanlış yapıyorum? Teklif neden yazdırılmıyor?
İşte çalışma kaydı
2011.01.31 20:20:18 00(EURUSD,M1) EURUSD 0
İşte kod
#include <Trade\SymbolInfo.mqh> //--- CSymbolInfo sınıfı CSymbolInfo my_symbol; //--- CSymbolInfo sınıfının nesnesi //+------------------------------------------------------------------+ //| Uzman başlatma işlevi| //+------------------------------------------------------------------+ int OnInit() { return(0); } //+------------------------------------------------------------------+ //| Uzman başlangıçtan kaldırma işlevi| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Uzman tik fonksiyonu| //+------------------------------------------------------------------+ void OnTick() { my_symbol.Name(_Symbol); my_symbol.Refresh(); Print(_Symbol," ",my_symbol.Bid()); } //+------------------------------------------------------------------+
- Ü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 Expert Advisor yazarken MQL5 Standard Alım Satım Sınıfı kitaplıklarının kullanımı yayınlandı:
Bu makalede, bir alım satım işlemi yapmadan önce pozisyon kapatma ve değiştirme, bekleyen talimat verme ve Marjın silinmesi ve doğrulanmasını uygulayan Expert Advisor'ları yazarken MQL5 Standart Kitaplık Alım Satım Sınıflarının başlıca işlevlerinin nasıl kullanılacağı açıklanmaktadır. Ayrıca, talimat ve yatırım ayrıntılarını elde etmek için Alım Satım sınıflarının nasıl kullanılabileceğini de gösterdik.
Şimdiye kadar bir Expert Advisor yazarken Alım Satım sınıfı kitaplıklarını nasıl kullanabileceğimizi gözden geçirdik. Sonraki adım , Expert Advisor'ımızı strateji test cihazı ile test etmek ve performansını görmek.
EA kodunu derleyin ve ardından Strateji Test Cihazına yükleyin.
Şekil 3. Expert Advisor rapor derleme
Şu varsayılan ayarları kullanarak GBPUSD Günlük grafiğinde: Kar Al - 270, Zararı Durdur - 100 ve Takip Noktası (TP/SL) - 32, şu sonuçları elde ederiz:
Şekil 4. Expert Advisor test raporu - GBPUSD günlük grafiği
Yazar: Samuel Olowoyo