![Pozisyon odaklı MetaTrader 5 ortamındaki talimatları takip etmek için Sanal Talimat Yöneticisi](https://c.mql5.com/i/articles/overlay.png)
Pozisyon odaklı MetaTrader 5 ortamındaki talimatları takip etmek için Sanal Talimat Yöneticisi
1. Giriş
MetaTrader 4'ten MetaTrader 5'e geçişteki muhtemelen en büyük değişiklik, pozisyonlar olarak açık alım satım işlemlerinin yönetimidir. Herhangi bir zamanda, her sembol için yalnızca bir pozisyon açık olabilir ve bu pozisyonun boyutu, aracı tarafından talimatlar her işlendiğinde yukarı ve aşağı ayarlanır. Bu, ABD'de tanıtılan NFA 2-43(b) FIFO kuralı ve aynı zamanda vadeli işlemler, emtialar ve CFD'ler gibi diğer birçok varlıktaki alım satım moduna da uygundur.
Farkın net bir örneği, aynı sembole karşı çalışan iki EA'nın zıt yönlerde talimat vermesi olabilir. Bu, scalper ve trend takipçisi gibi farklı zaman dilimlerinde çalışan iki EA ile yaygın bir durum olabilir. MetaTrader 4'te açık alım satım listesi, sıfır marj kullanılan açık alım ve satım talimatlarını gösterecektir. MetaTrader 5'te hiçbir pozisyon açık olmazdı.
EA kodunun kendisine bakıldığında, aşağıda yaygın olarak kullanılan MQL4 OpenOrders() veya benzer varyant gibi işlevler MQL5'e geçirildiğinde beklendiği gibi çalışmayacaktır.
int OpenOrders() // MetaTrader 4 code to count total open orders for this EA { int nOpenOrders=0; for (int i=OrdersTotal()-1; i>=0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber()==magic) if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (OrderSymbol()==Symbol()) nOpenOrders++; } return(nOpenOrders); }
Bu nedenle, MetaTrader 5 pozisyon odaklı ortamı, MetaTrader 4'te kullanılan talimat işleme yaklaşımına alışkın olan programcı için alışılmadık zorluklar sunar. MetaTrader 4'teki basit talimat yönetimi işlevleri, birden fazla talimat tek bir pozisyonda birleştirilebildiğinde, (örneğin bir sembolde birden fazla EA alım satım işlemi veya bir sembolde tek bir EA'dan gelen birden fazla talimat gibi) MetaTrader 5'te daha karmaşık hale gelir.
2. MetaTrader 5 'te pozisyonlarla çalışma yolları
Alım satım stratejilerinin karmaşıklığına bağlı olarak, MetaTrader 5'te bu pozisyon odaklı ortamı yönetmenin birkaç yolu vardır.
İlk olarak, MetaTrader 5'in bekleyen talimatları işlemesinin MetaTrader 4'e benzer olduğunu, dolayısıyla yalnızca bekleyen talimatlar için yazılan MQL5 kodunun MQL4 kodundan nispeten basit bir geçiş olabileceğini unutmayın.
2.1 Basit EA; hesap başına her bir sembol için bir EA
En basit yaklaşım, bir hesapta alım satımı sembol başına basit bir EA ile sınırlamaktır. Bu durumda "Basit EA", tek seferde yalnızca tek bir talimat veren, yaygın bir yöntem olan ancak piramit ve grid alım satımı gibi stratejileri hariç tutan EA anlamına gelir. Basit EA'lar MQL5'te MQL4'e benzer şekilde yazılabilir; belki de include\trade\trade.mqh içinde sağlanan CTrade kitaplık uyarlaması kullanılarak.
2.2 Karmaşık EA; hesap başına her bir sembol için bir EA
Bir sembol için birden fazla açık talimat gerektirebilecek piramit veya grid alım satımı gibi bir stratejisi olan karmaşık EA'lar için, EA'ya eklenen bazı nispeten basit talimat izleme kodu, stratejiyi yönetmek için gerekli olan tek şey olabilir. Bu, yalnızca EA, aynı sembolün alım satımını yapan başka bir EA ile pozisyonları asla paylaşmayacaksa mümkün olacaktır.
2.3 Hesap başına her sembol için herhangi bir türden birden fazla EA
Bu, en karmaşık alım satım ve kodlama gerekliliğini sunar ve Sanal Talimat Yöneticisi (VOM) kitaplığının geliştirilme nedenidir. Bu kitaplık, diğer EA'larla tamamen iletişim halinde olan sağlam EA kodunun geliştirilmesini büyük ölçüde basitleştirmek üzere tasarlanmıştır.
Bu makalenin geri kalanında Sanal Talimat Yöneticisi kitaplığı ayrıntılı olarak açıklanmaktadır.
3. Sanal Talimat Yöneticisi'nin tasarım hedefleri, avantajları ve dezavantajları
VOM'nin dört ana tasarım hedefi vardır:
- Sosyallik: VOM alım satım işlevleri kullanılarak doğru şekilde yazılan EA'ların davranışı, diğer EA etkinliklerinden izole edilecektir.
- Sağlamlık: Hatalar, istemci-sunucu iletişimindeki kesintiler ve eksik talimat doldurma gibi anormal olayların iyi bir şekilde ele alınması.
- Kullanım kolaylığı: Detaylı olarak belgelenmiş ve basit alım satım işlevlerinin sağlanması
- Strateji Test Cihazında kullanılabilirlik
Bu hedefler şu şekilde uygulanmaktadır:
- Sanal açık talimatların, bekleyen talimatların, zararı durdurma ve kar alma işlemlerinin kullanımı. Bu bağlamda "Sanal", durumlarının sunucudaki pozisyonlardan bağımsız olarak istemci terminalinde muhafaza edildiği anlamına gelir. Bu talimatlar, terminalde pozisyonlara benzer şekilde çizilen yatay çizgiler içerir.
- Koruyucu bir sunucu tabanlı durdurma, bilgisayar veya internet bağlantısı arızası durumunda olağanüstü durum koruması için sanal durdurmalardan uzak bir mesafede tutulur
VOM yaklaşımı, bir MQL5 EA programcısının:
- EA'ları "talimat odaklı" bir şekilde kodlamasına (yani MetaTrader 4 yaklaşımına benzer)
- Metatrader topluluğundaki birçok kişinin "hedge işlemi" veya daha doğrusu, tek bir sembole karşı zıt yönde eşzamanlı alım satım işlemleri olarak adlandırdığı şeyi uygulamasına
- Grid alım satımı, piramit ve para yönetimi yaklaşımları gibi diğer gelişmiş alım satım stratejilerini nispeten kolay kodlamasına
- Durdurmaları ve bekleyen talimatları minimum durdurma düzeyinden daha tutarlı bir şekilde vermesine olanak tanır.
Ayrıca, VOM yaklaşımının bir yan etkisinin, sanal zararı durdurma ve kar alma işlemlerinin ve bekleyen talimatlarının özü itibariyle "gizli" davranışlara sahip olması, yani aracı sunucusunda görülememeleri olduğuna dikkat edilmelidir. Bazıları tarafından stoploss düzeylerinin gizlenmesi, brokerin stop-avcılığına girmesini önlemek için gerekli görülüyor.
VOM'un dezavantajları da vardır. Genişletilmiş bir bilgisayar veya internet bağlantısı arızası sırasında daha uzak koruyucu sunucu durdurmasına güvenme olasılığı nedeniyle hisse senedi riski artar. Ayrıca, bekleyen sanal bir talimat, stoploss veya takeprofit sırasındaki kayma, haber olayları gibi yüksek volatilite zamanlarında sunucu tabanlı eşdeğerinden çok daha yüksek olabilir. VOM EA'lar, kısa bir ping süresine sahip yüksek güvenilirlikli bir sanal masaüstünden aracının sunucusuna takas edilirse, bu dezavantajların etkisi minimize edilebilir.
4. Pratikte VOM – basit bir EA
Daha ileri gitmeden önce, bir VOM EA'nın nasıl yazılabileceğini göstermenin zamanı geldi. Dağıtım paketinde sağlanan EA şablonundan başlayarak basit bir MA çapraz EA yazacağız. MA çapraz stratejilerinde kötü şöhretli bir sorun olan, yatay piyasalarda anlamsız alım satım işlemlerini azaltma potansiyeline sahip Fraktal Hareketli Ortalama'yı kullanacağız. Bu EA'nın basit bir örnek olarak sağlandığı ve canlı alım satım işlemleri için tavsiye edilmediği vurgulanmalıdır - Griye dönük test karlıdır ancak alım satım işlemleri sayısının düşük olması sonucun istatistiksel olarak anlamlı olmadığı anlamına gelir.
EA, experts\Virtual Order Manager\VOM EA'larında saklanır.
//+------------------------------------------------------------------+ //| FraMA Cross EA VOM.mq5 | //+------------------------------------------------------------------+ #property copyright "Paul Hampton-Smith" #property link "http://paulsfxrandomwalk.blogspot.com" #property version "1.00" // this is the only include required. It points to the parent folder #include "..\VirtualOrderManager.mqh" input double Lots=0.1; input int Fast_MA_Period=2; input int Slow_MA_Period=58; /* Because the broker is 3/5 digit, stoplosses and takeprofits should be x10. It seems likely that all brokers offering MetaTrader 5 will be 3/5 digit brokers, but if this turns out to be incorrect it will not be a major task to add digit size detection. */ input int Stop_Loss=5000; input int Take_Profit=0; /* We can also change the level of logging. LOG_VERBOSE is the most prolific log level. Once an EA has been fully debugged the level can be reduced to LOG_MAJOR. Log files are written under the files\EAlogs folder and are automatically deleted after 30 days. */ input ENUM_LOG_LEVEL Log_Level=LOG_VERBOSE; // The following global variables will store the handles and values for the MAs double g_FastFrAMA[]; double g_SlowFrAMA[]; int g_hFastFrAMA; int g_hSlowFrAMA; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { LogFile.LogLevel(Log_Level); // Need to include this line in all EAs using CVirtualOrderManager VOM.Initialise(); Comment(VOM.m_OpenOrders.SummaryList()); g_hFastFrAMA = iFrAMA(_Symbol,_Period,Fast_MA_Period,0,PRICE_CLOSE); g_hSlowFrAMA = iFrAMA(_Symbol,_Period,Slow_MA_Period,0,PRICE_CLOSE); ArraySetAsSeries(g_FastFrAMA,true); ArraySetAsSeries(g_SlowFrAMA,true); return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Need to include this line in all EAs using CVirtualOrderManager VOM.OnTick(); Comment(VOM.m_OpenOrders.SummaryList()); // We now obtain copies of the most recent two FrAMA values in the // g_FastFrAMA and g_SlowFrAMA arrays. if(CopyBuffer(g_hFastFrAMA,0,Shift,2,g_FastFrAMA)!=2) || CopyBuffer(g_hSlowFrAMA,0,Shift,2,g_SlowFrAMA)!=2) { Print("Not enough history loaded"); return; } // And now we detect a cross of the fast FrAMA over the slow FrAMA, // close any opposite orders and Buy a single new one if(g_FastFrAMA[0]>g_SlowFrAMA[0] && g_FastFrAMA[1]<=g_SlowFrAMA[1]) { VOM.CloseAllOrders(_Symbol,VIRTUAL_ORDER_TYPE_SELL); if(VOM.OpenedOrdersInSameBar()<1 && VOM.OpenOrders()==0) { VOM.Buy(_Symbol,Lots,Stop_Loss,Take_Profit); } } // Opposite for Sell if(g_FastFrAMA[0]<g_SlowFrAMA[0] && g_FastFrAMA[1]>=g_SlowFrAMA[1]) { VOM.CloseAllOrders(_Symbol,VIRTUAL_ORDER_TYPE_BUY); if(VOM.OpenedOrdersInSameBar()<1 && VOM.OpenOrders()==0) { VOM.Sell(_Symbol,Lots,Stop_Loss,Take_Profit); } } } //+------------------------------------------------------------------+
Ve şimdi Strateji Test Cihazının piyasaya sürülmesiyle bu, geriye dönük test edilebilir; aşağıdaki Şekil 1'e bakınız:
Şekil 1. FrAMA Çapraz EA geriye dönük testi
Günlüğe kaydetme bölümü Şekil 2'de gösterilmiştir:
Şekil 2. Strateji testi günlüğü
5. VOM yapısı
Aşağıdaki Şekil 4'te, çoklu VOM EA'ların nasıl yapılandırıldığı gösterilmiştir:
Şekil 3. Çoklu VOM EA'ları
VOM'un içine bakıldığında, ana bileşenler aşağıdaki Şekil 4'te gösterilmiştir:
Şekil 4. VOM'nin iç yapısı
Şekil 4'teki öğeler açıklanmıştır:
- Yapılandırma - VOM, tüm ana yapılandırma öğelerini bir genel nesne Yapılandırmasında tek bir yerde saklamak için CConfig'i kullanır. Erişimi kolaylaştırmak için üye değişkenler geneldir ve hiçbir get/set işlevi sağlanmaz.
- Genel değişkenler - Bunlar, GlobalVariableGet() gibi işlevler tarafından MQL5'te erişilen değişkenlerdir. VOM, CGlobalVariable kullanarak son Sanal
- Talimat bileti numarasını kaydetmek ve artırmak için genel değişkenleri kullanır.
- Olağanüstü durum koruma sunucusu durdurmalarının sürdürülebilmesi için tüm sanal stoploss'ların bir listesini tutun
- Açık alım satım işlemleri ve geçmiş dosyaları - Bunlar, yeniden başlatma sırasında talimat durumunun yeniden oluşturulabilmesini sağlamak için CVirtualOrderArrays tarafından depolanan kalıcı disk dosyalarıdır. VOM'yi kullanan her EA için bu dosyalardan bir çift oluşturulur ve Files\\VOM içinde saklanır. CVirtualOrder, VOM.m_OpenOrders dizisinde hayata başlar ve kapatıldığında veya silindiğinde VOM.m_OrderHistory dizisine aktarılır.
- Etkinlik ve hata ayıklama günlüğü - Herhangi bir karmaşıklığın çoğu kodu, etkinliğin günlüğe kaydedilebilmesini gerektirir ve bu işlev CLog sınıfı tarafından kapsüllenir. Bu, günlük kaydının dört farklı ayrıntı ve önem düzeyinde kaydedilmesine olanak tanır ve disk alanının yönetilmesini sağlamak için eski günlük dosyalarının otomatik olarak temizlenmesini içerir.
VOM'u kullanan Expert Advisor'lar, aşağıdaki Şekil 5'te gösterildiği gibi kitaplıkla etkileşime girer:
Şekil 5. EA'nın VOM kitaplığı ile etkileşimi
6. Olağanüstü durum koruması stoploss hakkında daha fazla bilgi
Sanal durdurmalar, MetaTrader 4 EA'ları arasında oldukça yaygındır. Yalnızca istemci tarafında bir stoploss korunursa, bir alım satım işleminin çıkış düzeyi aracı için görünmezdir, strateji genellikle bazı brokerlerin stop avcılığına girdiği inancıyla uygulanır. Durdurmanın uygulanabilmesi için bir aracı-istemci bağlantısının her zaman yerinde olması gerektiği için, sanal durdurmalar alım satım riskini büyük ölçüde artırır.
VOM, en dar sanal durdurmadan yapılandırılabilir bir mesafede sunucu tabanlı bir durdurma sağlayarak bu riski kontrol eder. Buna, olağanüstü durum koruması stoploss (DPSL) adı verilir; zira normalde yalnızca aracı-istemci bağlantısı bir internet bağlantısının kesilmesi veya bir bilgisayar arızası durumunda olduğu gibi bir süreliğine kesintiye uğrarsa eyleme geçecektir. Sanal talimatlar açılıp kapatıldığı ve sunucuda bir pozisyona dönüştürüldüğü için DPSL'nin doğru düzeyde bakımı, aşağıdaki sırada gösterildiği gibi biraz karmaşık olabilir.
Sanal talimat eylemi | Açılış fiyatı | Sunucuda | Sanal SL pozisyonu | Sunucuda pozisyonu | Açıklama |
---|---|---|---|---|---|
0,1 lot AL #1 | 2.00000 | 1.99000 | 0,1 lot AL | 1.98500 | DPSL, sanal SL #1'in 50 pip altındadır |
0,1 lot AL #2 | 2.00000 | 1.99500 | 0,2 lot AL | 1.99000 | Sanal talimat #2, daha sıkı bir SL'ye sahiptir; bu nedenle DPSL sanal SL #2'nin 50 pip altına sıkıştırılır |
Kapanış #2 | 0,1 lot AL | 1.98500 | Daha gevşek DPSL'ye dön | ||
0,1 lot SAT #3 | 2.00000 | 2.00500 | hiçbiri | hiçbiri | Sanal talimat #1 ve #3 sunucuda her birini iptal etti |
Kapanış #1 | 0,1 lot SAT | 2.01000 | Sanal Talimat #3 açık kalır - DPSL, şimdi sanal SL #3'ün 50 pip üzerindedir |
7. Sanal Talimat Yöneticisini Test Etme
Bu boyuttaki bir projenin kapsamlı bir şekilde test edilmesi zaman alır; bu nedenle sanal talimatların grafik üzerindeki komut düğmeleriyle kolayca oluşturulmasını, değiştirilmesini, silinmesini ve kapatılmasını sağlamak için EA VirtualOrderManaerTester.mq5'i yazdım.
Aşağıdaki Şekil 6'da, satın alınan 0,2 lotluk bir pozisyonu doğru bir şekilde gösteren sunucu durumu ile M5 penceresinde 0,1 lotluk bir sanal satın alma talimatı ve H4 penceresinde EURUSD karşısında açık olan başka bir 0,1 lotluk sanal satın alma talimatı gösterilmiştir (açıklama satırlarına bakınız). Genel pozisyon uzun olduğu için, Olağanüstü Durum Koruması Stoploss, daha sıkı 20,0 pip'lik durdurmanın altında görülebilir.
Şekil 6. Aynı yönlü iki EA
Şekil 7'de aracıda karşıt sanal talimatları olan ve hiçbir pozisyonu açık olmayan iki EA gösterilmiştir:
Şekil 7. Aracıda karşıt sanal talimatları olan ve hiçbir pozisyonu açık olmayan iki EA
8. Tüm VOM açık talimatlarının çok basit bir görüntüsü
Her VOM EA yalnızca kendi talimatlarını görebilir; bu nedenle tüm VOM'lardan gelen açık talimatları harmanlayan çok basit bir EA yazdım. Görüntü çok basittir; zamanla çok daha iyi bir sürüm yazılabilir; belki de her talimatta gerektiği gibi değiştirme, silme veya kapatma işlemlerini gerçekleştirmek için komut düğmeleri kullanılarak... EA, dağıtım paketine VOM_OrderDisplay.mq5 olarak dahil edilmiştir.
9. Sonuç
Bu makaleyi yazarken, VOM kodu, MetaTrader 5'in kendisi gibi Beta'da idi; VOM kavramının popüler hale gelip gelmeyeceğini veya yalnızca MQL5 programlamasının ilginç bir parçası olarak kabul edilip edilmeyeceğini zaman gösterecek.
Bölüm 3'teki tasarım hedeflerine geri dönelim ve hangi noktaya geldiğimizi görelim.
- Sosyallik: VOM alım satım işlevleri kullanılarak doğru şekilde yazılan EA'ların davranışı, diğer EA etkinliklerinden izole edilecektir.
- Sonuç - Evet, VOM yaklaşımı bu hedefe ulaştı
- Sağlamlık: Hatalar, istemci-sunucu iletişimindeki kesintiler ve eksik talimat doldurma gibi anormal olayların iyi bir şekilde ele alınması.
- Sonuç - Bir miktar sağlamlık olduğu aşikar ancak gerçek alım satım durumları meydana geldiği ve analiz edilebildiği için iyileşme olabilir
- Kullanım kolaylığı: Detaylı olarak belgelenmiş ve basit alım satım işlevlerinin sağlanması
- Sonuç - Dosyaların dağıtım paketinde görüleceği gibi, bir .chm yardım dosyası dahil edilmiştir
- Strateji Test Cihazında kullanılabilirlik
- Sonuç - Yakın zamanda yayınlanan strateji test cihazındaki ilk testler, VOM yaklaşımı testi önemli ölçüde yavaşlatsa da, VOM'nin geriye dönük testi doğru şekilde gerçekleştirdiğini göstermektedir. Verimliliği artırmak için muhtemelen bazı çalışmalar yapılması gerekir.
Gelecekte bir dizi değişiklik istenebilir
- Herhangi bir karmaşık yazılım geliştirmede olduğu gibi, kodda kalan hatalar olması muhtemeldir.
- Her MetaTrader 5 Beta derleme sürümü ile uyumluluğu korumak için gerekli VOM değişiklikleri olabilir.
- VomGetLastError() ve VomErrorDescription() işlevleri
- Bir dosyadan yapılandırma okuma yeteneği
- Çeşitli türlerde takip eden zarar durdurucular
10. Sıkıştırılmış dağıtım paketindeki dosyalar
VOM paketi, Experts\\Virtual Order Manager klasörüne yüklenmesi gereken bir dizi .mqh dosyası olarak gelir.
- ChartObjectsTradeLines.mqh - CEntryPriceLine, CStopLossLine, CTakeProfitLine
- StringUtilities.mqh - ErrorDescription() gibi genel numaralandırma tanımlayıcıları
- Log.mqh - CLog
- GlobalVirtualStopList.mqh - CGlobalVirtualStopList
- SimpleChartObject.mqh - CButton, CLabel ve CEdit
- VirtualOrder.mqh - CVirtualOrder
- GlobalVariable.mqh - CGlobalVariable
- VirtualOrderArray.mqh - CVirtualOrderArray
- VirtualOrderManager.mqh - CVirtualOrderManager
- VirtualOrderManagerConfig.mqh - CConfig
- VirtualOrderManagerEnums.mqh - VOM için tanımlanan çeşitli numaralandırmalar
- VOM_manual.mqh - Kılavuza ait bu sayfa
- VOM_doc.chm***
Ayrıca Experts\Virtual Order Manager\VOM EAs altında beş EA mq5 dosyası bulunur:
- VOM_template_EA.mq5 - Kendi EA'larınızı yapmak için bunu kopyalayın ve bunları Experts\Virtual Order Manage\VOM EAs içinde saklayın
- VirtualOrderManagerTester.mq5
- Support_Resistance_EA_VOM.mq5
- FrAMA_Cross_EA_VOM.mq5
- VOM_OrderDisplay.mq5
***VOM_doc.chm dosyasının kilidinin açılması gerekebileceğini unutmayın:
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/88
![Heiken-Ashi Göstergesine Dayalı Bir Alım Satım Sistemi Örneği](https://c.mql5.com/2/0/Heikin_Ashi_MQL5.png)
![Birkaç Ara Gösterge Arabelleği Kullanarak Çok Para Birimli Gösterge Oluşturma](https://c.mql5.com/2/0/Multicurrency_Indicator_MQL5.png)
![Delphi'de MQL5 için DLL yazma kılavuzu](https://c.mql5.com/2/0/delphi_DLL_MQL5__1.png)
![MQL4'ten MQL5'e geçiş](https://c.mql5.com/2/0/logo__4.png)
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret 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