English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MetaTrader 5'te HedgeTerminal Panelini Kullanarak İki Yönlü Alım Satım ve Pozisyonların Korunması, Bölüm 1

MetaTrader 5'te HedgeTerminal Panelini Kullanarak İki Yönlü Alım Satım ve Pozisyonların Korunması, Bölüm 1

MetaTrader 5Ticaret | 14 Ocak 2022, 13:31
1 730 0
Vasiliy Sokolov
Vasiliy Sokolov

İçerik Tablosu


Giriş

MetaQuotes son 18 ay içinde, MetaTrader 4 ve MetaTrader 5 platformlarını birleşik bir alım satım ekosisteminde birleştirmek için kapsamlı çalışmalar yaptı. Artık her iki platform da ortak bir program çözümleri piyasası paylaşıyor - Market, harici geliştiricilerden farklı ürünler sunuyor. Her iki platform derleyicileri de birleştirildi. Sonuç olarak, her iki platformun da MQL5'e dayalı ortak bir derleyicisi ve kullanılan platforma bağlı olarak farklı işlev kümesi olan bir programlama dili - MQL vardır. Ayrıca Kod Tabanında bulunan bütün herkese açık kaynak kodları revize edildi ve bazıları yeni derleyici ile uyumlu olacak şekilde ayarlandı.

Platformların bu büyük birleşmesi, alım satım bölümlerinin birleşmesini bir kenara bıraktı. MetaTrader 4 ve MetaTrader 5 alım satım modelleri, alım satım ortamının büyük bölümünü ortak olmasına rağmen hala temelde uyumsuzdur. MetaTrader 4, talimat sistemi aracılığıyla alım satım pozisyonlarının bireysel yönetimini kolaylaştırır - talimat sistemi, bu terminalde çift yönlü alım satımı basit ve kolay hale getiren özel program varlıklarıdır. MetaTrader 5, bir yatırımcının yükümlülüklerinin ana temsilinin toplam net pozisyon olduğu borsa işlemi için tasarlanmıştır. MetaTrader 5'teki talimatlar, sadece bir finansal enstrümanı almak veya satmak için verilen talimatlardır.

Bu iki platformun alım satım performansı arasındaki fark, çok sayıda hararetli tartışmaya ve fikir çatışmasına neden oldu. Ancak tartışmalar olduğu gibi kaldı. Ne yazık ki, MetaTrader 5'in piyasaya sürülmesinden bu yana, bir yatırımcının yükümlülüklerini MetaTrader 4'teki gibi iki yönlü pozisyonlar olarak sunabilecek tek bir çalışma çözümü yayınlanmadı. Yine de yayınlanmış çok sayıda makale çeşitli çözümler önermekle birlikte, büyük ölçekte rahatlıkla kullanılabilecek kadar esnek değildir. Ayrıca, bu kararların hiçbiri dikkate alınması gereken birçok nüansı içeren döviz alım satım işlemleri için uygun değildir.

Bu makale, MetaTrader platformunun dördüncü ve beşinci sürümlerinin hayranları arasındaki uyuşmazlığı çözmelidir. Bu, kapsamlı program özellikleri ve bu özellikler ile uygulanan hatasız program çözümü biçiminde evrensel bir çözüm sağlayacaktır. Bu makalede, MetaTrader 4'teki gibi yatırımcının yükümlülüğünü iki yönlü pozisyonlar olarak sunmayı sağlayan görsel panel ve sanallaştırma kitaplığı HedgeTerminal tartışılmaktadır. Aynı zamanda, HedgeTerminal'in temelini oluşturan model, alım satım talimatlarının yürütülme karakterini hesaba katmaktadır. Bu, hem borsa dışı piyasa FOREX'te hem de örneğin Moskova Borsası adresindeki türevler bölümündeki türev menkul kıymet işlemleri gibi merkezi borsalarda da başarılı bir şekilde uygulanabileceği anlamına gelir.

HedgeTerminal, MetaTrader 5 terminali içinde tam özellikli bir alım satım terminalidir. sanallaştırma mekaniği aracılığıyla, yatırımcının veya alım satım robotunun kendi bireysel işlem pozisyonlarını yönetebilmesi için mevcut pozisyonların temsilini değiştirir. Ne pozisyon sayısı ne de yönü önemlidir. Sanallaştırma hakkında konuştuğumuz gerçeğine vurgu yapmak istiyorum - bir yatırımcının yükümlülüklerinin sunumunu dönüştüren ancak niteliksel özelliklerini dönüştürmeyen belirli bir mekanizma.

Bu, yatırımcının finansal faaliyetinin sonuçlarını çarpıtmakla değil, bu faaliyetin temsilini dönüştürmekle ilgilidir. HedgeTerminal, MetaTrader 5 alım satım ortamına ve MQL5 programlama diline dayanmaktadır. Terminale yeni alım satım bilgileri getirmez, sadece mevcut alım satım ortamının farklı bir açıdan görülmesini sağlar. Bu, HedgeTerminal'in esasen MetaTrader 5 olduğu ve ona ait yerel bir uygulaması olduğu anlamına gelir. Aralarına bir kimlik işareti koyabilsek de, HedgeTerminal sadece küçük ve birçok MetaTrader 5 uygulamasından biri olduğu için bir dahil etme işareti daha uygundur.

Sanallaştırma olasılığı ve HedgeTerminal varlığı üç paradigmaya dayanmaktadır:

  1. Kavramsal olarak, pozisyon net temsilinin bireysel çift yönlü alım satım işlemlerine tam ve garantili dönüştürülebilirliği mümkündür. Bu ifade, borsa işlemi için tasarlanmış olanlar da dahil olmak üzere bazı harici alım satım platformlarında çift yönlü pozisyonları yönetmenin bir yolu olduğunu kanıtlamaktadır;
  2. MetaTrader 5'in kullanıcı seviyesindeki işlem modeli, birbirine tek yönlü talimat bağlantıları oluşturmasına izin verir. Hesaplamalar, belirli bir şekilde tasarlanan bağlantıların çarpışmalara karşı dayanıklı olacağını göstermiştir. Daha da fazlası, geçmişin bozulması veya herhangi bir kaçınılmaz sebep durumunda dahi, çift yönlü işlemler geriye dönük olarak düzeltilerek net temsil üzerinden hesaplanan bir finansal sonuca indirilebilir;
  3. MQL5'teki Gelişmiş API, kimlik işaretinin MQL5 ile MetaTrader 5 terminali arasına yerleştirilmesine olanak tanır. Başka bir deyişle, MetaTrader 5'teki hemen hemen her şeye program arayüzü ve MQL5 programlama dili aracılığıyla erişilebilir. Mesela, kendi terminal sürümünüz HedgeTerminal gibi MetaTrader 5 terminalinin içine yazılabilir.

Bu makalede, temel algoritmalar ve HedgeTerminal'in nasıl çalıştığı tartışılmaktadır. Tutarlı çift yönlü alım satım sağlayan özellikler ve algoritmalar bu makalede ayrıntılı olarak tartışılmaktadır. Bu makalede ve devamında ,HedgeTerminal'i kullanmaya veya kendi alım satım algoritmalarınızı yönetmek için kendi kitaplığınızı oluşturmaya karar vermenizden bağımsız olarak faydalı bilgiler bulacaksınız.

Bu makale özellikle programcıları hedeflememektedir. Programlama konusunda herhangi bir deneyiminiz yoksa, yine de anlayacaksınız. MQL kaynak kodu bu makaleye kasti olarak dahil edilmemiştir. Tüm kaynak kodları, çalışma prensibini ve veri organizasyonunu şematik olarak temsil eden daha açıklayıcı diyagramlar, tablolar ve resimlerle değiştirildi. Deneyimlerime dayanarak söyleyebilirim ki, programlama ilkelerini iyi kavramış olsam bile, kodun ortak bir formasyonunu görmenin onu analiz etmekten çok daha kolay olduğunu söyleyebilirim.

Bu makalenin ikinci bölümünde, Expert Advisors'ın HedgeTerminalAPI görselleştirme kütüphanesi ile entegrasyonundan bahsedeceğiz ve ardından programlamaya dahil olacağız. Ancak bu durumda bile özellikle acemi programcılar için, kodun algılanmasını kolaylaştırmak için her şey yapıldı. Mesela, HedgeTerminal nesne yönelimli bir uygulama olmasına rağmen sınıflar gibi nesne yönelimli yapılar kullanılmaz.


Bu Makale Nasıl Okunur

Bu makale oldukça uzun. Bir yandan, bu konuyla ilgili hemen hemen her sorunun cevabı burada bulunabileceği için uzun olması iyidir. Diğer bir taraftan, birçok kullanıcı ihtiyaç duyulduğunda ilgili bölüme dönerek yalnızca en önemli bilgileri okumayı tercih eder. Bu makale, materyalin tutarlı bir sunumunu tam olarak kapsamaktadır. Kitaplarda olduğu gibi, okumanız gerekip gerekmediğini görebilmeniz için her bölümün kısa bir özetini vereceğiz.

  • Parti 1, Bölüm 1. Çift yönlü alım satım işlemi düzenleme teorisi. Bu bölüm HedgeTerminal'in ana fikirlerini içerir. Çift yönlü alım satım işlemi düzenleme hakkında derinlemesine bilgi istemiyorsanız, bu bölüm HedgeTerminal işleminin genel prensipleri hakkında bir fikir edinmek için yeterlidir. Bu bölüm tüm okuyucular için önerilir.

  • Parti 1, Bölüm 2. HedgeTerminal kurulumu, ilk başlatma. Bu bölümde, HedgeTerminal'in görsel panelinin başlatılması ve ayarlanması açıklanmaktadır. HedgeTerminal'in görsel panelini kullanmayacaksanız bu bölümü atlayabilirsiniz. Ancak HedgeTerminalAPI kitaplığını kullanacaksanız, bu bölümün 2.1 ve 2.2 numaralı kısımlarını incelemeniz gerekecektir. HedgeTerminal yükleyicisine ayrılmaşlardır. Yükleyici, tüm HedgeTerminal ürünleri için ortak bileşendir.

  • Parti 1, Bölüm 3. HedgeTerminal'in kaputunun altında. İşlemlerin özellikleri ve prensipleri Bu bölüm, HedgeTerminal'in dahili düzenlemesini, algoritmasını ve dahili veri organizasyonunu vurgular. Çift yönlü alım satım işlemleriyle ilgilenenler bu bölümü bilgilendirici bulabilirler. Kendi sanallaştırma kitaplıklarını geliştiren ve aynı anda birçok robot kullanan profesyonel algoritmik yatırımcılar da bu bölümü faydalı bulabilirler.

  • Parti 2, Bölüm 1. Expert Advisors'ın HedgeTerminal ve paneliyle iletişimi. Bu bölüm, sadece bu yönü keşfedenler ve algoritmik alım satım konusunda profesyonel olanlar tarafından kavranabilecektir. HedgeTerminal kitaplığıyla ortak çalışma ilkelerini ve alım satım robotunun mimarisini açıklar.

  • Parti 2, Bölüm 2. API HedgeTerminal'e yönelik belgeler. HedgeTerminalAPI kitaplığının işlevlerinin kullanımına ilişkin belgeleri içerir. Bu bölüm, zaman zaman başvurulabilecek bir belge listesi olarak düşünülerek yazılmıştır. İçinde gereksiz tartışmalar ve aşırı büyük metinler yoktur. Bu bölüm yalnızca işlev, yapı ve numaralandırmaların prototiplerini ve bunların kullanımlarının kısa örneklerini içerir.

  • Parti 2, Bölüm 3. Asenkron alım satım operasyonlarının temelleri. HedgeTerminal çalışmalarında asenkron operasyonlar kullanır. Bu bölüm, bunların kullanım deneyimini içermektedir. Bu bölüm, herhangi bir okuyucunun işlerinde HedgeTerminal'i kullanma planlarından bağımsız olarak bazı yararlı bilgiler bulabilmesi için makaleye dahil edilmiştir.

  • Parti 2, Bölüm 4. MetaTrader ortamında çok kanallı programlamanın temelleri. Bu bölüm, çoklu iş parçacığının ne olduğunu, nasıl düzenleneceğini ve hangi veri düzenleme formasyonlarının kullanılabileceğini açıklamaktadır. Bölüm 3 gibi, çok kanallı uygulama geliştirme deneyimini tüm MetaTrader kullanıcıları ile paylaşır.

Umarım bu makale yeterince ilginçtir ki, böylece sonuna kadar okursunuz.


Bölüm 1. İki yönlü alım satım işlemi organizasyon teorisi

1.1. MetaTrader 5 Çift Yönlü Alım Satım Düzenlemede Fırsatlar

"Moskova Borsası Vadeli İşlemler Piyasası Örneği Üzerinden Döviz Fiyatlandırmasının Prensipleri" makalesi, döviz fiyatı oluşumunun nüanslarını ve piyasa oyuncularının finansal sonuçları hesaplama yöntemlerini dikkatlice açıklamaktadır. Moskova Borsasındaki fiyatlandırma ve hesaplamanın, FOREX işlemlerinde kabul edilen kavram ve hesaplama yöntemlerinden önemli ölçüde farklı olduğunu ana hatlarıyla belirtir.

Genel olarak, döviz fiyatının oluşumu daha karmaşıktır ve Forex işlemi yaparken ve MetaTrader 4 terminalinde gizlenmiş birçok önemli ayrıntı içerir.

Örneğin, MetaTrader 4'te yatırımcının talimatıyla yürütülen yatırımlar gizlenirken MetaTrader 5'te bu tür bilgiler mevcuttur. Diğer bir taraftan MetaTrader 5'teki ayrıntılı işlem bilgileri her zaman gerekli değildir. Deneyimsiz bir kullanıcı veya acemi bir programcı için çalışmayı zorlaştırabilir ve yanlış anlamalara neden olabilir. Örneğin, MetaTrader 4'te yürütülen talimatın fiyatını bulmak için, "Fiyat" sütununda karşılık gelen değeri aramanız yeterlidir. MQL4 programlama dilinde OrderOpenPrice() işlevini çağırmak yeterlidir. MetaTrader 5'te, talimatı gerçekleştiren bütün yatırımları bulmak ve ardından bunların üzerinden geçmek ve ağırlıklı ortalama fiyatlarını hesaplamak gereklidir. Bu fiyat, talimatı yürütme fiyatıdır.

MetaTrader 5'te alım satım ortamının genişletilmiş temsilinin bu bilgileri analiz etmek için ek çaba gerektirdiği başka durumlar da vardır. Bu mantıklı sorulara yol açar:

MetaTrader 5'teki alım satım sürecini MetaTrader 4'teki kadar basit ve anlaşılır hale getirmenin ve tüm gerekli işlem ayrıntılarına kolay erişim sağlamanın bir yolu var mıdır? MetaTrader 5 kullanarak MetaTrader 4 ile aynı basit yolla çift yönlü borsa işlemi düzenlemenin bir yolu varsa bu nedir? - Bu soruların cevabı şudur: "Evet, var"!

Bunun nasıl mümkün olduğunu anlamak için MetaTrader 4 ve MetaTrader 5 terminalleri imkan diyagramına başvuralım:

Şek. 1 MetaTrader 4 ve MetaTrader 5 İmkanları

MetaTrader 4 ve MetaTrader 5 İmkanları

Gördüğümüz gibi "MetaTrader 5" kümesi, "MetaTrader 4" alt kümesini içermektedir. Bu, MetaTrader 4'te mümkün olan her şeyin MetaTrader 5'te de yapılabileceği anlamına gelir ancak tersi yanlıştır. MetaTrader 5'in yeni imkanları, kaçınılmaz olarak işlem bilgileri tanıtım miktarını ve karmaşıklığını arttırmaktadır. Bu zorluk MetaTrader 5 ortamında çalışan özel yardımcı programlara devredilebilir. Bu programlar, terminal imkanlarını aynı seviyede bırakarak karmaşıklığı işleyebilir. Bu gibi programlardan biri olan HedgeTerminal bu bölümün odak noktasıdır.

HedgeTerminal, MetaTrader 5 terminali içinde tam teşekküllü bir alım satım terminalidir. Bu - panel HedgeTerminalUltimate ve özel arayüz HedgeTerminalAPI - bağımsız algoritmalarla etkileşim için (Expert Advisors, script dosyaları ve göstergeler) MetaTrader 5 alım satım ortamını kullanır, MQL5 dili ile dönüştürür ve uygun bir grafik arayüzü olarak temsil eder.

MetaTrader 4, çift yönlü pozisyonlar veya kilitleme ttalimatları kullanma olanağı sunar. MetaTrader 5'te de böyle bir imkan vardır ama açık değildir. Bu, HedgeTerminal'in esas olduğu belirli bir eklenti programı kullanılarak etkinleştirilebilir. HedgeTerminal MetaTrader 5'te yerleşiktir ve onun ortamını kullanır, yatırımlar ve talimatlar yoluyla bilgileri, MetaTrader 4'teki talimatlara çok benzeyen ve MetaTrader 5'in tüm özelliklerine sahip olan entegre pozisyonlarda toplar.

Bu gibi pozisyonlar tam veya kısmi kilitleme talimatı olabilir (aynı anda aktif uzun ve kısa pozisyonlar mevcut olduğunda). Bu gibi pozisyonları koruma fırsatı, HedgeTerminal için bir hedef değildir. Temel amacı işlem bilgilerini analiz edilmesi, yönetilmesi ve erişilmesi kolay olan birleşik gruplarda (pozisyonlarda) birleştirmektir. HedgeTerminal'de iki yönlü pozisyonlar yalnızca bu çok uygun olduğu için bulunabilir. Bir hesapta birden fazla yatırımcının işlem yapması veya birden fazla stratejinin kullanılması durumunda, bölünen işlem eylemleri düzenlenmelidir.

Ayrıca, kısmi talimat yürütme, pozisyon yenileme, varyasyon marjı hesaplama, istatistikler ve diğerleri gibi borsa işlemlerinde bir takım nüansların dikkate alınması gereklidir. HedgeTerminal, bu zorlukların üstesinden gelmek için geliştirilmiştir. Kullanıcıya veya Expert Advisor'a, MetaTrader 4'e benzeyen ve aynı zamanda borsa ortamında düzgün çalışan normal bir üst seviye arayüz sağlar.


1.2. Eşleştirme talimatları - Riskten Korunma ve İstatistik Temelleri

Alım satım tekniklerini ve algoritmalarını tutarlı bir şekilde yönetebilmek için, hangi alım satım işleminin hangi algoritmaya ait olduğunu kesinlikle bilmek gereklidir.  "Kesinlikle" kelimelerinin altını çizdim çünkü en küçük başarısızlık olasılığı bile olsa, er ya da geç pozisyon yönetiminin çökmesi kaçınılmazdır. Buna karşılık, istatistiklerin zarar görmesine ve farklı algoritmaları tek bir hesapta yönetme fikrini baltalamasına neden olacaktır.

Alım satım faaliyetlerinin güvenilir bir şekilde ayrılması, iki temel olasılığa dayanmaktadır:

  1. İki alım satım talimatını birleştirme veya "eşleştirme" olasılığı ile iki talimattan hangisinin bireysel (sanal) açılış pozisyonu ve hangisi kapanış pozisyonu olduğu daima tanımlanabilir;
  2. Eşleşmeleri için talimatları analiz algoritma tamamen deterministik olmalı ve tüm program modülleri için birleşik olmalıdır.

Algoritma determinizmi için ikinci gereklilik aşağıda ayrıntılı olarak ele alınacaktır. Şimdi ilkine odaklanacağız.

Talimat, satma veya satın alma talimatıdır. Talimat, sihirli sayı ve talimat numarası, gereken Beğenfiyat ve açılış koşulları gibi ana bilgilere ek olarak daha birçok bilgi "alanı" içeren tanımlı bir varlıktır.

MetaTrader 5'teki bu tür alanlardan birine "Talimat Sihri" adı verilir. Bu, bir alım satım robotunun veya bir Expert Advisor'ın bu talimatı, "sihirli sayı" olarak da adlandırılan kendine özgü benzersiz numarasıyla işaretleyebilmesi için kullanılan belirli bir alandır. Bu alan manuel işlemlerde kullanılmaz, ancak alım satım algoritmaları için çok önemlidir, çünkü bir alım satım algoritması bu alanın değerlerini analiz ettiğinde, söz konusu talimatın kendisi tarafından mı yoksa başka bir algoritma tarafından mı verildiğini her zaman görebilir.

Bir örneğe göz atalım. Klasik bir uzun pozisyon açmamız gerektiğini ve ardından bir süre sonra kapatmamız gerektiğini varsayalım. Bunun için iki talimat vermemiz gereklidir. İlk talimat bu pozisyonu açacak ve ikinci talimat onu kapatacaktır:

Şek. 2 Geçmişe dönük net pozisyon oluşturan talimatlar

Şek. 2. Geçmişe dönük net pozisyon oluşturan talimatlar

İkinci talimatın "Talimat Sihri" alanına ilk talimatın sihirli numarasını piyasaya gönderme anında yazarsak ne olur?

Daha sonra bu talimat alanı okunabilir ve eğer değer birinci talimatın sayısına eşitse, o zaman ikinci talimatın birinciye bağlı olduğunu ve ona karşıt olduğunu, yani bir kapanış talimatı olduğunu kesin olarak söyleyebiliriz.

Diyagramda bu eşleştirme şöyle görünürdü:

Şek. 3 Eşleştirme talimatları

Şek. 3. Eşleştirme talimatları

Nominal olarak bu tür talimatlar eşleştirilmiş olarak adlandırılabilir, çünkü ikinci talimat birincisine bir bağlantı içerir. Yeni pozisyon açan ilk talimat, başlatıcı veya açılış talimatı olarak adlandırılabilir. İkinci talimat kapanış olarak adlandırılabilir.

Bu gibi bir talimat çifti pozisyon olarak adlandırılabilir. MetaTrader 5'teki "pozisyon" kavramıyla karışıklığı önlemek için, bu tür eşli pozisyonları çift yönlü, korunma veya HedgeTerminal pozisyonları olarak adlandırabiliriz. MetaTrader 5'teki pozisyonlar, net pozisyonlar veya MetaTrader 5 klasik pozisyonlar olarak adlandırılacaktır.

Görünüşe göre, klasik olanlardan farklı olarak HedgeTerminal pozisyonlarının sayısı ve yönleri herhangi biri olabilir. Ya başka bir talimat tarafından atıfta bulunulmayan, yerine getirilmiş bir emir varsa? Bu gibi bir talimat, etkin çift yönlü pozisyon olarak sunulabilir. Hatta bu talimata bağlantı içeren karşıt talimat verilirse, ilk talimatı kapatan bir talimat haline gelecektir. Bu tür talimatlar eşleşecek ve iki talimatın hacmi eşit olacağı ve yönleri zıt olacağı için çift yönlü kapalı pozisyon yapacaktır.

Öyleyse, HedgeTerminal'de ne anlama geldiğini pozisyona göre tanımlayalım:

Yürütülen bir talimat başka bir talimat tarafından yönlendirilmiyorsa, HedgeTerminal böyle bir talimatı etkin bir çift yönlü pozisyon olarak değerlendirir.

Uygulanan bir talimat, başka bir yürütülen talimat tarafından yönlendirilirse, bu tür iki talimat bir çift oluşturur ve HedgeTerminal tarafından bir birleşik geçmiş veya kapalı iki yönlü pozisyon olarak değerlendirilir.

Gerçekte, HedgeTerminal'deki eşleştirme talimatları daha karmaşıktır, çünkü her talimat en az bir yatırım oluşturur ve borsa işlemlerinde bunun gibi birçok yatırım olabilir. Genel olarak, alım satım süreci şu şekilde sunulabilir: yatırımcı MetaTrader 5 terminali aracılığıyla yeni bir pozisyon açmak için talimat verir. Borsa bu talimatı bir veya birkaç yatırım yoluyla yürütür.

Yatırımlar, talimatlara benzer şekilde ek bilgiledirme için alanlar içerir. Bu alanlardan biri, yatırımın yürütüldüğü esasa göre olan talimat kimliğini içerir. Bu alan, belirli bir yatırımın ait olduğu talimatla ilgili bilgileri içerir. Zıttı yanlıştır. Talimatın kendisi, hangi yatırımların kendisine ait olduğunu bilmez. Bunun nedeni, talimatın verildiği sırada talimatı hangi yatırımların gerçekleştireceği ve talimatın gerçekleştirilip gerçekleştirilmeyeceği net değildir.

Bu şekilde, eylemlerin nedenselliği veya determinizmi gözlemlenir. Yatırımlar talimatları, talimatlar da birbirini yönlendirir. Bunun gib bir yapı tek bağlantılı liste olarak sunulabilir.

MetaTrader 5'te açılış talimatının gerçekleştirilen yatırımları klasik bir pozisyon oluşturur ve bir kapanış talimatına ait olan yatırımlar, tam tersine doğru pozisyonu kapatır. Bu çiftler aşağıdaki şekilde sunulmuştur:

Şek. 4. Talimatlar, yatırımlar ve takas arasındaki ilişkinin diyagramı

Şek. 4. Talimatlar, yatırımlar ve takas arasındaki ilişkinin diyagramı

Bu diyagramın ayrıntılı analizine geri döneceğiz, çünkü ilişkilerin yönü, HedgeTerminal olan, yatırımcının hareketlerini kaydetmek için kesin olarak belirlenmiş bir sistem oluşturmak için çok önemlidir.


1.3. MetaTrader 5 Net Pozisyonları ve HedgeTerminal Pozisyonlarının İlişkisi

HedgeTerminal noktasından bakarsak, aynı hacimlere sahip iki zıt talimat iki farklı pozisyon olabilir. Bu durumda net pozisyonları sıfır olacaktır. Bu nedenle HedgeTerminal, MetaTrader 5'te açılan fiili net pozisyonlar hakkındaki bilgileri kullanmaz. Bu nedenle HedgeTerminal'deki pozisyonlar, MetaTrader'deki pozisyonlarla bağlantılı değildir 5. Mevcut net pozisyonların doğrulandığı tek zaman, HedgeTerminal'in piyasaya sürüldüğü andır. Karşıt aktif pozisyonların toplam hacimleri, fiili net pozisyonların değerleriyle aynı olmalıdır.

Durum böyle değilse, HedgeTerminal'de çerçeve içinde HedgeTerminal'deki pozisyonların ve MetaTrader 5'teki pozisyonların eşit olmadığını gösteren Pozisyonlar eşit değildir şeklinde bir uyarı ünlem işareti görüntülenir. Bu asimetri HedgeTerminal'in verimliliğini etkilemez ancak daha doğru çalışması için ortadan kaldırılması gerekir.

Çoğu durumda bu, kullanıcılar hariç tutulan talimatların ExcludeOrders.xml dosyalarını düzenlerken hata yaptığında ortaya çıkabilir ancak talimatın bozulması ve sunucudaki yatırım geçmişi de bu işaretin meydana gelmesine neden olabilir. Her durumda bu tutarsızlıklar, ExcludeOrders.xml dosyası aracılığıyla uygulanan dışlama mekanizması ile kaldırılabilir.


1.4. Çift Yönlü Alım Satım İşlemi Gerçekleştiren Algoritmaların Gereklilikleri

Çift yönlü alım satım işlemi uygulayan algoritmalara oldukça katı gereklilikler uygulanmaktadır. HedgeTerminal geliştirilirken karşılanmaları gereklidir. Aksi takdirde, HedgeTerminal hızla stokastik çalışan bir programa dönüşecektir. Program "aynı olasılıkla çalışabilecek veya başarısız olabilecek başka bir çözüm" taslağı olacaktır.

Aşağıda, geliştirilmesi için belirtilen bazı gereklilikler verilmiştir:

  1. Yatırımcıların çift yönlü pozisyonlarının temsili güvenilir olmalıdır. HedgeTerminal'de uygulanan herhangi bir fikir, iş mantığında belirsizliğe veya olası hatalara yol açmamalıdır. Bazı mülk veya fırsatlar bu gereklilikleri karşılamıyorsa, bu fikir, uygunluğuna ve talebine rağmen kullanılmayacaktır;
  2. Tüm algoritmalar mümkün olduğunca MetaTrader 5 alım satım ortamını temel almalıdır. Kesinlikle gerekli olduğu durumlarda, ek bilgilerin dosyalarda saklanmasına izin verilir. Sanallaştırma algoritmaları, bilgilerin büyük bir kısmını alım satım ortamından almalıdır. Bu özellik, değişikliklerin çoğu sunucu aracılığıyla iletildiği ve bu nedenle dünyanın herhangi bir noktasından erişilebilir olduğu için, toplam güvenilirlik seviyesini artırır;
  3. Alım satım ortamının dönüşümüne ilişkin tüm eylemler perde arkasında gerçekleştirilmelidir. API HedgeTerminal kitaplığının karmaşık yapılandırması ve başlatılması gerekli olmamalıdır. Bir kullanıcı, uygulamayı "kutudan çıktığı haliyle" başlatabilmeli ve beklenen sonucu alabilmelidir;
  4. HedgeTerminal görsel paneli, tüm MetaTrader 4 ve 5 kullanıcılarının aşina olduğu çift yönlü pozisyonlarla çalışmak için basit ve anlaşılır görsel araçlar sağlayarak, genel MetaTrader 5 arayüzüne mümkün olduğunca sorunsuz bir şekilde uyumlu olmalıdır. Diğer bir deyişle, görsel panel tüm kullanıcılar için sezgisel olarak açık ve basit olmalıdır;
  5. HedgeTerminal'in görsel paneli, algoritmik yatırımcıların yüksek gereksinimleri dikkate alınarak tasarlanmalıdır. Örneğin, panel yapılandırılabilir olmalı, kullanıcı görünümünü değiştirebilmeli ve hatta özel modüller ekleyebilmelidir;
  6. Harici Experts ile etkileşimlerin Sezgisel ve basit program arayüzünü (API) sağlamalıdır. Harici Experts ve HedgeTerminal algoritmaları arasındaki etkileşimlerin program kısmı, özel Experts MetaTrader 4/5 sistem işlevleriyle program etkileşiminin mevcut standardına sorunsuz bir şekilde uymalıdır. Aslında HedgeTerminal API, MetaTrader 4 ve MetaTrader 5 API'lerinin bir melezi gibi görünmektedir;
  7. HedgeTerminal borsa talimatlarının yürütülmesindeki tüm nüanslarını dikkate alarak, borsada güvenilir çalışma ortamı sağlamalıdır. HedgeTerminal, Moskova Borsası Vadeli İşlemler Piyasası Örneği Üzerinden Değişim Fiyatlandırma Prensipleri" adlı kanonik makaleye dayalı olarak yazılmıştır. Başlangıçta, bu makale HedgeTerminal hakkındaki uzun bir makalenin parçasıydı ve daha sonra hacim nedeniyle birkaç bağımsız makaleye bölündü. HedgeTerminal'in, bu makalede tartışılan fikirlerin program uygulaması olduğu söylenebilir.

Bu fikirlerin çoğu birbiriyle pek bağlantılı değildir. Mesela, borsa işlemine yansıtılacak borsa bilgilerinin bolluğu, bu bilgi gösteriminin basitliği ile bağlantı kurmak zordur.

Diğer bir zorluk ise, acemi yatırımcılar için kullanımı kolay olabilecek ve aynı zamanda profesyonel algoritmik yatırımcılar için kapsamlı fırsatlar sağlayan bir panel oluşturmaktı. Hal böyleyken sonuç değerlendirildiğinde, bu karşılıklı özel mülklerin HedgeTerminal'de başarıyla uygulandığı açıktır.


Bölüm 2. HedgeTerminal Kurulumu, İlk Başlatma

2.1. HedgeTerminal Kurulumu

HedgeTerminal'de yürütülen tüm talimatlarınpozisyon olarak kabul edildiğini bilmekteyiz. Pozisyonlar, kapalı bir geçmişe dönük pozisyon oluşturan eşleştirilmiş iki talimattan veya açık veya etkin bir pozisyon oluşturan sınırsız bir talimattan oluşabilir.

HedgeTerminal kurulmadan önce, işlem hesabında bazı eylemler varsa ve işlem geçmişi çok sayıda yürütülen talimat içeriyorsa, HedgeTerminal açısından bakıldığında tüm bu talimatlar, aralarındaki bağlantılar oluşturulmadığı için açık pozisyonlar olacaktır. Hesap geçmişinin 2-3 yürütülen talimat içermesi önemli değildir. Binlerce varsa, HedgeTerminal binlerce açık pozisyon üretecektir. Onlarla ne yapılabilir? Bu talimatlar, HedgeTerminal aracılığıyla başlatılan talimatlara bağlantılar içeren karşıt talimatlar vererek "kapatılabilir". Yine de dezavantajı da vardır. HedgeTerminal'in kurulumu sırasında çok fazla sayıda varsa, aracılık ücreti ve kayma masrafları ödeneceği için yatırımcıyı mahvedebilir.

HedgeTerminal bunu önlemek için, kurulumunun başında bu soruna farklı çözümlerin önerildiği özel bir kurulum sihirbazı başlatır. HedgeTerminal'i başlatalım, bu sihirbazı çağıralım ve nasıl çalıştığını ayrıntılı olarak anlatalım. Bunun için MetaTrader 5 Market'ten HedgeTerminalDemo indirip yükleyin.

HedgeTerminalUltimate'e benzer şekilde, Expert Advisor biçimine sahiptir ve onu başlatmak için tek gereken, "Gezgin" klasöründe bulunan simgesini ücretsiz bir tabloya sürüklemektir.

Simgeyi sürüklemek, grafikte Expert Advisor'ı başlatmanızı öneren standart bir pencere açar:


Şek. 5. Başlatmadan önceki HedgeTerminal penceresi

Bu aşamada, EA'nın alım satım eylemlerini gerçekleştirmesine izin vererek "Otomatik Alım Satıma İzin Ver" bayrağını ayarlamak yeterlidir. HedgeTerminal kendi işlem mantığına sahip olmadığı için talimatlarınızı takip edecektir, ancak işlemleri gerçekleştirmek için yine de izninize ihtiyacı olacaktır.

Herhangi bir Expert Advisor'ın alım satım işlemine başlamasında, MetaTrader 5'te alım satım yapmak için kişisel izne ek olarak Paneldeki genel Expert Advisor aracılığıyla alım satım yapma izni etkinleştirilmelidir.

Şek. 6. Otomatik alım satım işlemlerinin etkinleştirilmesi

Şek. 6. Otomatik alım satım işlemlerinin etkinleştirilmesi

HedgeTerminal, kullanıcının uzun ve karmaşık yapılandırmalardan kaçınabilmesi için tasarlanmıştır.

Bu nedenle, mevcut tüm ayarlar özel XML metin dosyasına dahil edilmiştir. HedgeTerminal için tek belirgin parametre, bu ayarlar dosyasının gerçek adıdır:

Şek. 7 HedgeTerminal panelinin ayarlar penceresi

Şek. 7. HedgeTerminal panelinin ayarlar penceresi

Bu ayarların doğası ve bunları değiştirmenin yolu daha sonra tartışılacaktır.

"Tamam" düğmesine bastıktan sonra HedgeTerminal kurulum sihirbazı, kurulum sürecini başlatmayı önererek başlar. Kurulum işlemi MetaTrader 4 ve MetaTrader 5 terminalleri için paylaşılan dizinde birkaç dosya oluşturmaya kadar uzanır.

HedgeTerminal, bu tür dosyaları yüklemek için izin ister:


Şek. 8. Kurulumun başlatıldığı diyalog

Bilgisayarınıza bazı dosyaların yüklenmesini istemiyorsanız "İptal"e basın. Bu durumda HedgeTerminal işi bitirecektir. Kuruluma devam etmek için "Tamam"a basın.

Aşağıdaki diyalog kutusunun görünümü, HedgeTerminal'i birlikte başlattığınız hesaba bağlı olacaktır. Alım satım hesabında işlem yapılmadıysa, HedgeTerminal işini tamamlayacaktır.

Bazı işlemler zaten gerçekleştirilmediyse, HedgeTerminal aşağıdaki diyalog kutusunu görüntüler:


Şek. 9. HedgeTerminal'in ilk başlatmasını algılayan diyalog kutusu

Yukarıdaki şekilde, HedgeTerminal 5 tane etkin talimat tanımladı. Sizin durumunuzda, sayıları farklı olacaktır (büyük ve hesap ömrü boyunca yürütülen toplam talimat sayısına eşit olması muhtemeldir). HedgeTerminal açısından, bu talimatlar kapanış talimatı ile çift oluşturmaz, etkin pozisyonlardır.

HedgeTerminal birkaç seçenek önermektedir.

  1. Bu talimatları HedgeTerminal'den hariç tutun: "Onları HedgeTerminal'de gizleyebilirsiniz... Bu talimatları gizlemek için 'EVET'e tıklayın ve sonraki adıma geçin". Bu seçeneği seçerseniz ve "EVET"'e basarsanız, HedgeTerminal bunları belirli bir listeye yerleştirecek ve o andan itibaren toplam net pozisyona katkılarının yanı sıra finansal sonuçlarına da katkı sağlamayı durduracaktır. Bu talimatlar, yalnızca halihazırda açık bir net pozisyon yoksa listeye yerleştirilebilir. Bir veya daha fazla sembol üzerinde açık pozisyonunuz varsa, HedgeTerminal mevcut pozisyonları kapatmanızı öneren ek bir diyalog kutusu çağıracaktır.
  2. Talimatları olduğu gibi bırakın ve gerekirse daha sonra kapatın: "Daha sonra manuel olarak kapatabilirsiniz... Daha sonra bu talimatları manuel olarak kapatmak istiyorsanız 'Hayır'a tıklayın. Bu durumda kaşıt yönde 5 işlem yapmanız gereklidir". Bu durumda, "Hayır" tuşuna basarsanız, HedgeTerminal tüm bu talimatları başlattıktan sonra "Etkin" sekmesinde (yani etkin pozisyonlar olarak) yansıtacaktır. Daha sonra bu talimatlar HedgeTerminal paneli üzerinden diğer talimatlarla kapatılabilir. Bundan sonra kapalı pozisyonlara dönüşecekler ve "Geçmiş" sekmesine (geçmiş pozisyonlara) aktarılacaklar. Bu talimatlar sayıca fazlaysa, yürütülen tüm talimatları tekrar kapatıp aracılık ücreti ödemektense, onları gizlemek daha iyidir.
  3. Kurulumu durdurabilirsiniz: "Hazır değilseniz, İptal'e basın. Bu durumda HedgeTerminal işini tamamlar". Bu seçeneği seçer ve "İptal"e basarsanız, HedgeTerminal çalışmayı durduracaktır.

HedgeTerminal kurulduğunda etkin pozisyon yoksa, bu aşamada kurulum durdurulur.

İkinci seçeneği seçtiyseniz ve şu anda bir veya birkaç açık pozisyonunuz varsa, HedgeTerminal bunları kapatmanızı öneren ek bir diyalog kutusu çağıracaktır:


Şek. 10. Net pozisyonları otomatik olarak kapatmayı öneren diyalog kutusu

HedgeTerminal, yürütülen tüm talimatların hariç tutulan talimatlar listesine eklenmesi gerektiği için, mevcut tüm pozisyonların kapatılmasını gerektirir. Net pozisyon yoksa, takip eden herhangi bir talimat yeni bir net pozisyon başlatır. Bu durumda yön ve hacim HedgeTerminal'deki ile aynıdır ve bu, net pozisyonların HedgeTerminal'deki toplam pozisyonlarla senkronizasyonunun bozulmasını önler.

HedgeTerminal sizin için, tüm net pozisyonları otomatik olarak kapatabilir: "HedgeTerminal tüm etkin pozisyonları otomatik olarak kapatabilir". Bu sizin için kabul edilebilirse, "Tamam" tuşuna basın. Bu durumda pozisyonları kapatmaya çalışacak ve başarılı olursa işi bitirecektir. Herhangi bir nedenle pozisyonlar kapatılamazsa, manuel pozisyon kapatma diyaloğuna geçilir. Manuel pozisyon kapatmayı seçerseniz, "Bir pozisyonu manuel olarak kapatmak istiyorsanız 'İptal'e tıklayın", "İptal" tuşuna basın.

Manuel pozisyon kapatma diyaloğu, önceki diyalog penceresinde manuel kapatma tipi seçildiğinde veya otomatik pozisyon kapatmanın imkansız olduğu durumlarda çağrılır.


Şek. 11. Net pozisyonları manuel olarak kapatmayı öneren diyalog kutusu

Bu noktada tüm etkin pozisyonlar MetaTrader 5 üzerinden manuel olarak kapatılmalı veya "İptal" tuşuna basılarak kurulum iptal edilmelidir. Tüm pozisyonlar kapatıldıktan sonra "Yeniden Dene" tuşuna basın.


2.2. Üç Adımlı Kurulum. Kurulum Diyagramı ve Olası Sorunların Çözümü

Kurulum sürecini mümkün olduğunca basitleştirirsek, üç adıma kadar daraltılabilir:

  1. HedgeTerminal'i kurmadan önce, MetaTrader 5 terminalindeki mevcut tüm etkin net pozisyonları kapatın;
  2. Grafikteki HedgeTerminal'i başlatın ve kurulumu başlatmak için kurulum sihirbazının görünen penceresindeki "Evet" tuşuna basın. Bu durumda HedgeTerminal, çalışması için gerekli olan tüm dosyaları yükleyecektir;
  3. Bir sonraki pencerede bu belirirse, ikinci seçeneği seçin ve "Evet" tuşuna basın. Bu durumda HedgeTerminal başlatıldığında etkin pozisyonlar görünmeyecek ve daha önce gerçekleştirilen talimatlarla ilgili bilgiler, kapatma gerektiren etkin pozisyon olmadığı için otomatik olarak ExcludeOrders.xml dosyasına aktarılacaktır.

Bunu tanımlamanın en basit yolu şudur: Hedge Terminal'i başlatmadan önce tüm pozisyonları kapatın ve ardından HedgeTerminal kurulum sihirbazında iki kez "Evet" tuşuna basın.

Kurulum sihirbazının tam formasyonu aşağıdaki şemada gösterilmektedir. Soruları cevaplamanıza ve kurulumu doğru yapmanıza yardımcı olacaktır:


Şek. 12. Kurulum sihirbazı

Kurulum düzgün gerçekleştirilmediyse veya HedgeTerminal'in bilgisayardan silinmesi gerekiyorsa yapılacak işlem nedir? Kurulumun hatalı olması durumunda, yüklenen tüm dosyaları silmeniz yeterlidir. Bunun için, MetaTrader programlarının paylaşılan bilgileri depoladığı klasöre gidin (kural olarak bu klasör şurada bulunur: c:\Users\<your_user_name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\). HedgeTerminal kurulumu ile ilgili bilgileri tüm hesaplardan silmek istiyorsanız bu dizinde "HedgeTerminal" klasörünü bulun ve silin. HedgeTerminal kurulumuyla ilgili bilgileri yalnızca belirli bir hesap için silmek istiyorsanız, \HedgeTerminal\Brokers dizinine gidin ve aracınızın adını ve "Aracının adı - hesap numarası" gibi görünen hesap numarasını içeren klasörü seçin. Bu klasörü silin. Bir dahaki sefere, bu hesapta HedgeTerminal başlatıldığında kurulum sihirbazı yeniden başlatılacaktır.

HedgeTerminal ile çalışmakta olan hesaba bağlı terminalde kurulum. HedgeTerminal ile çalışmakta olan hesaba bağlı terminale yüklenmesi gerekebilir. Bildiğiniz gibi, kurulum süreci sistem dosyalarının oluşturulması ve yapılandırılmasından oluşur. Tüm bu dosyalar zaten başka bir bilgisayarda oluşturulmuşsa ve uygun şekilde yapılandırılmışsa, HedgeTerminal'i yüklemeye gerek yoktur. Kural olarak, bu dosyalar klasöründe c:\Users\<your_user_name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal depolanır. Bu klasörü, bilgisayarınızda aynı yere taşımanız yeterlidir. Dizini kopyaladıktan sonra HedgeTerminal'i yeniden başlatın. Tüm dosyalar mevcut ve yapılandırılmış olduğu için kurulum sihirbazı çağrılmayacaktır. Bu durumda etkin pozisyonlar, diğer terminallere ve bilgisayarlardaki ekrana benzer olacaktır.

HedgeTerminalAPI kurulumu ve kitaplığın test modunda kullanılması. HedgeTerminal, hem görsel bir panel hem de program işlevleri kitaplığı olarak uygulanır - HedgeTerminalAPI. Kitaplık, gerçek zamanlı olarak HedgeTerminalAPI'nin ilk başlatmasında çağrılan benzer bir kurulum sihirbazı içerir. Kitaplığı kullanırken dosyaları yükleme benzerdir. Herhangi bir işlevin ilk çağrısında, Expert kurulumu başlatmayı öneren ilgili bir MessageBox garamaetirecektir. Bu durumda kullanıcının da aynı şeyi yapması gereklidir - HedgeTerminalAPI'yi çağırmadan önce tüm pozisyonları kapatın ve kurulumu üç adımda gerçekleştirin.

Kitaplığı test modunda başlatırken HedgeTerminal'in kurulması gerekli değildir. Test modunda olduğu gibi, Expert her yeni sanal hesapla çalışmaya başladığında, önceden yürütülen talimatı gizlemeye ve dosyaları yüklemeye gerek yoktur. Kitaplıkta Settings.xml, dosyasında saklanan ayarlar, ilgili işlevler çağrılarak dilbilgisi açısından tanımlanabilir.


2.3. HedgeTerminal'e Başlarken, Piyasaya İlk Giriş

HedgeTerminal, çalışması için gereken tüm dosyaları yükledikten sonra, grafikte başlayacak ve panelini görüntüleyecektir:

Şek. 13 HedgeTerminal'in ilk başlatması, görünüm

Şek. 13. HedgeTerminal'in ilk başlatması, görünüm

Var olan tüm talimatlar gizlendiği için, görüntülenen etkin pozisyon yoktur. Üst panel, sol tarafta HedgeTerminal menüsünün bir düğmesini ve panelin durumunu gösteren özel simgeler içerir. Düğmeler aşağıdaki işlevlere sahiptir:

  • - Panel deneme sürümünün başlatıldığını gösterir. Bu gerçek hesaplardaki alım satım işlemlerini desteklemez ve pozisyonları yalnızca AUDCAD ve VTBR* sembolleri üzerinde görüntüler. Ayrıca bu modda, pozisyonların geçmişi son kapatılan 10 pozisyonla sınırlıdır.
  • - HedgeTerminal'deki pozisyonların MetaTrader 5'teki toplam net pozisyona eşit olmadığını gösterir. Bu kritik bir hata değildir, ancak ortadan kaldırılması gerekir. HedgeTerminal kurulumu doğruysa, bu makalenin hatanın nasıl ortadan kaldırılacağını anlatan bölümüne bakın.
  • - Simge, alım satım işleminin imkansız olduğunu belirtir. Fareyi bu simgenin üzerine getirin ve açılan ipucundan sorunun ne olduğunu öğrenin. Olası nedenler: sunucuyla bağlantı yok; Expert Advisor'ın alım satım yapması yasaktır; MetaTrader 5'te Expert Advisor ile alım satıma izin verilmez.
  • - Alım satım işlemine izin verildiğini gösteren bir simgedir; HedgeTerminal herhangi bir alım satım eylemi gerçekleştirebilir.

Şimdi, HedgeTerminal başlatıldığında ve çalışmaya hazır olduğunda, birkaç alım satım işlemi gerçekleştirin ve bunların nasıl görüntülendiğini görün. HedgeTerminal Forex üzerinden başlatılırsa, alım satım işlemleri AUDCAD sembolü üzerinden yürütülür. HedgeTerminal kurulumu ancak bu durumda başarılı olabileceği için herhangi bir açık net pozisyon olmamalıdır. Herhangi bir nedenle durum böyle değilse, tüm aktif pozisyonları kapatın.

HedgeTerminal, Moskova Borsasına bağlı bir hesapta başlatılırsa, alım satım VTBR* grubunun vadeli işlemlerinden birinde, örneğin VTBR-13.15 veya VTBR-06.15'de gerçekleştirilmelidir. Örnek olarak, standart "NewOrder" penceresinden geçerli fiyattan 0.4 lot AUDCAD satın alın. Birkaç dakika içinde, talimat ve yürütülen yatırım, terminalin talimat geçmişinde görünecektir:

Şek. 14 MetaTrader 5'te geçmişe dönük talimat ve yatırımı

Şek. 14. MetaTrader 5'te geçmişe dönük talimat ve yatırımı

Etkin pozisyonlar sekmesi, 0,4 lot karşılık gelen bir uzun pozisyon içerecektir:

Şek. 15 MetaTrader'da etkin net pozisyon 5

Şek. 15. MetaTrader 5'te etkin net pozisyon

Aynı zamanda HedgeTerminal, geçmiş talimatı aktif bir pozisyon olarak gösterecektir:

Şek. 16 HedgeTerminal'de etkin çift yönlü pozisyon ve yatırımı

Şek. 16. HedgeTerminal'de etkin çift yönlü pozisyon ve yatırımı

Gördüğümüz gibi, HedgeTerminal'deki bir pozisyon MetaTrader 5'teki 1 net pozisyona karşılık geldiği için sonuçlar aynıdır.

Lütfen talimata ek olarak, HedgeTerminal'deki pozisyonun bu pozisyonu yürüten bir yatırım içerdiğine dikkat edin (görmek için tuşlarına basarak pozisyon dizesini büyütün)

Etkin pozisyonun bir kısmı gizlenebilir. Bunun için "Vol" alanına yeni bir hacim değeri girin. (Hacim). Yeni birim mevcut olandan daha az olmalıdır. Mevcut ve yeni hacimler arasındaki fark, geçmişe dönük bir pozisyon oluşturan ve geçmiş pozisyonlara karşılık gelen sekmede görüntülenen yeni talimatı kapsayacaktır. Bu alana 0.2 değerini girin ve ardından Enter'a basın. Bir süre sonra aktif pozisyonun hacmi 0,2 olacak ve geçmiş pozisyonlar sekmesi 0,2 lot hacimli (0,4 - 0,2 = 0,2) ilk geçmiş işlemi gösterecektir:

Şek. 17 HedgeTerminal'deki çift yönlü geçmişe yönelik pozisyonlar

Şek. 17. HedgeTerminal'deki çift yönlü geçmişe yönelik pozisyonlar


Diğer bir deyişle, etkin pozisyonumuzun yarısını kapattık. Geçmiş ve etkin pozisyonun ortak finansal sonucu, terminaldeki sonuçla aynı olacaktır.

Şimdi etkin pozisyonun geri kalanını kapatacağız. Bunun için HedgeTerminal'de pozisyonu kapatma düğmesine basın:

Şek. 18 HedgeTerminal'deki çift yönlü pozisyonu kapatma düğmesi

Şek. 18. HedgeTerminal'deki çift yönlü pozisyonu kapatma düğmesi

Bu düğmeye basıldıktan sonra kalan pozisyon karşıt talimat ile kapatılarak geçmişe dönük pozisyon sekmesine aktarılmalıdır. Bu şekilde etkin pozisyonlar (hem MetaTrader 5'te hem de HedgeTerminal'de) kapatılacaktır.


2.4. Finansal İşlemlerin Korunması ve Hesaplanması

Bu bölümde, örnek olarak birkaç çift yönlü pozisyon kullanarak HedgeTerminal ile çalışma yöntemlerini açıklayacağız.

Dolayısıyla şu anda hiç etkin pozisyonumuz bulunmamaktadır. AUDCAD'de 0.2 lotluk yeni bir uzun pozisyon açın. Bunun için "yeni talimat" diyalog penceresinin açılması ve ilgili talimatın verilmesi yeterlidir. Pozisyon açıldıktan sonra, karşıt pozisyonla kilitleyin - MetaTrader 5 terminali aracılığıyla 0,2 lot satış yapın.

Bu sefer HedgeTerminal'deki ve MetaTrader 5 terminal penceresindeki işlem sonucu farklıdır. HedgeTerminal iki pozisyon görüntüler:

Şek. 19 HedgeTerminal'de (kilitli) iki yönlü karşıt pozisyonlar

Şek. 19. HedgeTerminal'de (kilitli) iki yönlü karşıt pozisyonlar

MetaTrader 5'te hiç mevcut değildir:

Şek. 20 MetaTrader 5'te etkin net pozisyon olmaması

Şek. 20. MetaTrader 5'te etkin net pozisyon olmaması

Sonucu değerlendirelim. 4 yatırım yapıldı. Aşağıdaki ekran görüntüsünde kırmızı çerçeve içindelerdir:

Şek. 21 MetaTrader 5'te yapılan yatırımların sonucu

Şek. 21. MetaTrader 5'te yapılan yatırımların sonucu

Bu yatırımları bir tabloya yerleştirin:

TürYönFiyatHacimKar, zarar
alma   içinde0,980880,2
satma   dışında0,980890,21
alma   içinde0,982070,2
satma   dışında0,982080,21

Tablo 1. Fırsatları MetaTrader 5 terminalinde görüntüleme

4 tane yatırımda 2 puan kazanıldığı açıktır. 1 lot işlem yaparken her puanın değeri yaklaşık olarak 0,887 dolardır. Yani, finansal sonuç pozisyon başına 0,18 dolar (0,887*0,2*1) veya her iki pozisyon için 34 senttir. "Kar" sütunu bu sonucun doğru olduğunu göstermektedir. Net kar 34 sent.

Şimdi HedgeTerminal'deki sonuca bakın:

 Şek. 22 HedgeTerminal'deki çift yönlü geçmişe yönelik pozisyonların sonucu

Şek. 22. HedgeTerminal'deki çift yönlü geçmişe yönelik pozisyonların sonucu

İlk başta önemli ölçüde farklı görünürler. Çift yönlü pozisyonumuzun sonucunu hesaplayalım:

YönGiriş fiyatıÇıkış fiyatıKar, zararKar, $
alma0,980880,982080.0012021,28
satma0,980890,98207-0.00118-20,92

Tablo 2. HedgeTerminal'deki pozisyonları görüntüleme

Aralarındaki fark 0.34$ (21,28$ - 20,92$)'dir, bu net alım satımda elde edilen sonuçla tamamen aynıdır.


2.5. Tek Tıkla Alım Satım

HedgeTerminal kendine özgü bir yönetim sistemi kullanır. Bu gerekli değerlerin aktif pozisyon alanına doğrudan girilmesine dayanmaktadır. Alternatif bir yönetim yoktur.

Mesela, StopLoss'u aktif bir pozisyona getirmek için StopLoss alanına gerekli değeri girmeniz ve ardından Enter tuşuna basmanız yeterlidir:

Şek. 23 Zarar Durdur seviyesinin tabloya doğrudan girilişi

Şek. 23. Zarar Durdur seviyesinin tabloya doğrudan girilişi

Benzer şekilde, bu şekilde yatırımcı hacmi değiştirebilir, TakeProfit yapabilir veya seviyesini değiştirebilir, ilk yorumu değiştirebilir.

Genel olarak HedgeTerminal'deki pozisyon çizgisi, MetaTrader 4/5'teki pozisyon görüntüsüne benzer. Pozisyonları içeren tablo sütunları, MetaTrader terminallerinde kullanılan aynı adlara ve değerlere sahiptir. Ama farklılıklar da vardır. HedgeTerminal'deki bir pozisyon iki yoruma sahipken MetaTrader'daki bir pozisyon sadece bir yoruma sahiptir. Bu, HedgeTerminal'deki bir pozisyonun iki talimattam oluştuğu ve her birinin kendi yorum alanına sahip olduğu anlamına gelir. HedgeTerminal bu yorumları teknik bilgi depolamak için kullanmadığı için açılış ve kapanış yorumu ile pozisyon oluşturmak mümkündür.

HedgeTerminal, varsayılan olarak görüntülenmeyen sütunları ekleme fırsatı sunar. Örnek olarak, pozisyonu açan Expert Advisor adını yansıtan bir sütun olabilir. Settings.xml dosyasının yapılandırmaya ayrılmış bölümü, bunu yapma yöntemini açıklamaktadır.


2.6. StopLoss ve TakeProfit yerleştirme, Takip Durdurma

HedgeTerminal, StopLoss veya TakeProfit seviyelerine göre pozisyonları kapatmaya olanak tanır.

Nasıl olduğunu görmek için, StopLoss ve TakeProfit seviyelerini aktif konuma getirin ve ardından bu seviyelerden biri tetiklenene kadar bekleyin. Bizim durumumuzda TakeProfit tetiklendi. Pozisyonu kapattı ve geçmiş işlemler listesine taşıdı:

Şek. 24 Geçmişe yönelik çift yönlü pozisyon ve StopLoss ve TakeProfit seviyeleri

Şek. 24. Geçmişe yönelik çift yönlü pozisyon ve StopLoss ve TakeProfit seviyeleri

TakeProfit seviyesindeki yeşil işaret, TakeProfit'in tetiklendiğini ve pozisyonun o seviyede kapatıldığını gösterir. TakeProfit'e ek olarak pozisyon, pozisyon aktif olduğu zaman da kullanılan StopLoss seviyesi hakkında bilgi içerir. Benzer şekilde StopLoss seviyesi tetiklenirse, StopLoss hücresi pembe olarak vurgulanır ve TakeProfit renklendirilmez.

HedgeTerminal TrailingStop'u desteklemektedir ve gelecek sürümleri StopLoss üzerinden taşıma mantığını içeren spesifik bir özel modül yazma olanağı tanıyacaktır. Şu anda HedgeTerminal'de Takip Eden Durdurma ile çalışmak, MetaTrader terminalindeki aynı Takip Eden Durdurma işleminden farklıdır. Etkinleştirmek için ilgili pozisyonun StopLoss hücresine StopLoss seviyesinin girilmesi gerekir. StopLoss talimatı verildiğinde, aşağıdaki fiyat seçeneği işaretiyle hücrede bayrak eklenebilir:

Şek. 25 HedgeTerminal'de Takip eden Durdurma Talimatı Verme

Şek. 25. HedgeTerminal'de Takip eden Durdurma Talimatı Verme

Bayrak eklemeden sonra HedgeTerminal, mevcut fiyat ile StopLoss seviyesi arasındaki mesafeyi sabitler. Eğer artarsa, StopLoss fiyatı izleyecektir ve böylece mesafe aynı kalır. Takip Eden Durdurma yalnızca HedgeTerminal çalışırken çalışır ve çıkışta temizlenir.

StopLoss HedgeTerminal'de, BuyStop ve SellStop talimatları ile uygulanmaktadır. StopLoss talimatı her verildiğinde, aktif pozisyona bağlı bir sihirli sayıya sahip karşılık gelen bir takimat da verilir. Bu beklemede olan talimat MetaTrader terminalinden silinirse, HedgeTerminal'deki StopLoss seviyesi de kaybolacaktır. Bekleyen talimatın fiyatının değiştirilmesi, HedgeTerminal'deki StopLoss değişikliğini tetikleyecektir.

TakeProfit biraz daha farklı çalışmaktadır. Bu sanaldır ve tetikleme düzeyini aracıdan gizler. Bu HedgeTerminal'in TakeProfit tarafından otonom olarak açılan pozisyonu kapattığı anlamına gelir. Bu nedenle TakeProfit talimatınızın tetiklenmesini istiyorsanız HedgeTerminal'inizi çalışır durumda tutmanız gereklidir.


2.7. Rapor Oluşturma

HedgeTerminal, çift yönlü pozisyonlar hakkındaki bilgileri, örneğin Microsoft Excel gibi üçüncü taraf istatistiksel analiz programlarına yüklenebilen belirlenmiş dosyalara kaydetme olanağı sağlar.

Şu anda HedgeTerminal'de analiz ve istatistik toplama sistemi bulunmadığı için bu özellik önemlidir. Şu anda yalnızca rapor kaydetme biçimi desteklenmektedir: CSV (Virgülle Ayrılan Değerler). Hadi bunun nasıl çalıştığını görelim. Çift yönlü pozisyonları CSV dosyasına kaydetmek için, HedgeTerminal'i başlattıktan sonra menüdeki "CSV Raporunu Kaydet" seçeneğini seçin:


Şek. 26. "CSV Raporunu Kaydet" menüsü aracılığıyla bir raporu kaydetme

Menüde bu noktaları seçtikten sonra HedgeTerminal, CSV formatında iki dosya oluşturacaktır. Bunlardan biri aktif pozisyonlar hakkında, diğeri ise geçmişe yönelik, tamamlanmış pozisyonlar hakkındaki bilgileri içerecektir. İki farklı dosyanın oluşturulmasının nedeni, her birinin farklı bir sütun kümesine sahip olmasıdır. Bi taraftan aktif pozisyon sayısı sürekli değişkenlik gösterebilir, bu nedenle bunları ayrı ayrı analiz etmek daha uygundur. Oluşturulan dosyalar .\HedgeTerminal\Aracılar\\<Aracı adı - hesap numarası> \ göreceli yolu ile kullanılabilir. Sonda iki dosya olmalıdır: History.csv ve Active.csv. İlki geçmişe yönelik pozisyonlar hakkında, ikincisi ise aktif pozisyonlar hakkında bilgi içerir.

Dosyalar analiz için istatistiksel programlara yüklenebilir. Örnek olarak Microsoft Excel kullanarak bu prosedüre bir bakalım. Bu programı başlatın ve "Veri" "Metinden" öğesini seçin. Görüntülenen veri dışa aktarma sihirbazında, ayıraç modunu seçin. Aşağıdaki pencerede, ayıraç olarak noktalı virgül seçin. "İleri" tuşuna basın. Aşağıdaki pencerede, kayan noktalı sayı gösteriminin genel biçimini değiştirin. Bunu yapmak için "Ayrıntılar" tuşuna basın. Görüntülenen pencerede, tamsayı ve kesirli bölümlerin ayıracı olarak nokta karakterini seçin:

Şek. 27 CSV raporunu Microsoft Excel'e dışa aktarın

Şek. 27. CSV raporunu Microsoft Excel'e dışa aktarın

"ОК" ve ardından "Sonlandır" düğmesine basın. Görünen tablo aktif pozisyonlar hakkında bilgilendirme içerecektir:

Şek. 28 Excel'e aktarılan aktif pozisyonlar hakkında bilgilendirme

Şek. 28. Excel'e aktarılan aktif pozisyonlar hakkında bilgilendirme

Geçmişe yönelik pozisyonlara ilişkin veriler aynı şekilde bir sonraki sayfaya yüklenebilir. Sütun sayısı, HedgeTerminal'deki gerçek sütun sayısına karşılık gelecektir. HedgeTerminal panelindeki sütunlardan biri silinirse o sütun rapora dahil edilmez. Bu, yalnızca gerekli verilere dayalı rapor oluşturmanın kolay yoludur.

Programın sonraki sürümleri, raporun XML ve HTML formatlarında kaydedilmesine olanak tanıyacaktır. Buna ek olarak, HTML'de kaydedilen bir rapor tamamlanmış çift yönlü pozisyonlardan oluşacak olsa da, MetaTrader 5'teki standart bir HTML raporuna benzer olacaktır.


2.8. Para Birimi Swap Sunumu

Döviz swap'ı, aynı toplam için farklı değerlendirme tarihlerine sahip iki tane çift yönlü dönüşüm yatırımının kombinasyonudur.

Basit bir ifadeyle, swap, net bir pozisyon oluşturan iki dövizi tutmak için ödenen faiz oranları farkının tahakkuk ettirilmesine ilişkin türev işlemidir.

MetaTrader 5'te net pozisyon geçmişi yoktur. Bunun yerine geçmişe yönelik net pozisyonları oluşturan ve kapatan geçmiş talimatlar ve yatırımlar vardır. Swap geçmiş pozisyon olmadığı için, geçmişe yönelik pozisyonu kapatan talimata atanır:

 Şek. 29 Bağımsız bir işlem olan döviz swapı

Şek. 29. Bağımsız bir işlem olan döviz swapı

Swapı net pozisyon uzaması sonucu ortaya çıkan bağımsız bir türev işlemi olarak sunmak daha doğru olacaktır.

Sonraki sürümlerde böyle bir seçenek bulunsa da, HedgeTerminal'in mevcut sürümü swap temsilini desteklemez. Geçmiş pozisyon sekmesinde geçmişe yönelik pozisyon olarak ayrı bir swap gösterilecektir. Swap tanımlayıcısı, tahakkuk ettiği net pozisyonun tanımlayıcısına karşılık gelir. Swap, döviz çiftinin adını ve finansal sonucunu içerecektir.


2.9. Alt Satır

HedgeTerminal MetaTrader'a benzer şekilde, tüm hesap için ortak özelliklere sahip olan yatırımlar tablosundaki son satırı görüntüler. Aktif ve tarihi pozisyonlar tablosu için olan bu özellikler ve bunların değerleri aşağıda listelenmiştir:

    Bakiye – Toplam bakiye. MetaTrader'da aktif pozisyonlar penceresindeki "Kar" benzer değerine eşittir. Bu, açık pozisyonlardan elde edilen dalgalı karı veya zararı hesaba katmaz.
    Dalgalı K/Z – Dalgalı kâr/zarar. Bu, şu anda aktif olan tüm pozisyonların kârının toplamına eşittir.
    Marj – Hesap bakiyesi ipotek fonlarının yüzde olarak payını içerir. %0 ile %100 arasında değişebilir. Mevduat üzerindeki yükün derecesini gösterir.
    Toplam P/L – Kapatılan pozisyonlar için tüm kar ve zararların toplamını içerir.
    Poz.:# - Geçmiş pozisyonlarını sayısını görüntüler.

Alt satırın doğru görüntülenmesi için sisteme "Arial Rounded MT Bold" yazı tipinin eklenmesi gerekmektedir.


2.10. HedgeTerminal Tablolarının Görünümünü Değiştirme

Daha önce belirtildiği gibi, HedgeTerminal'in Expert başlatma penceresinde yalnızca bir açık parametresi vardır. Bu, ayarlar dosyasının adıdır. Bunun nedeni, HedgeTerminal ayarlarının Expert ayarları penceresine yerleştirilememesidir. Bunlardan çok vardır ve bu gibi bir pencere için çok spesifiklerdir. Bu nedenle, tüm ayarlar belirlenmiş yapılandırma dosyasına Settings.xml yerleştirilir. HedgeTerminal'in başlatılan her sürümü için kendi ayarlar dosyası olabilir. Bu, HedgeTerminal'in başlatılan her sürümünü ayrı ayrı yapılandırma fırsatı verir.

Şu anda HedgeTerminal bu dosya ayarlarının görsel pencerelerinden düzenlenmesine izin vermemektedir. Bu nedenle, HedgeTerminal hareketini değiştirmenin tek yolu dosyayı manuel olarak düzenlemektir. Ayarlar dosyası varsayılan olarak en uygun şekilde yapılandırılır ve bu nedenle çoğu zaman içeriği düzenlemeye gerek yoktur. Böyle bir düzenlemenin gerekli olabileceği durumlar olabilir. Bu şekilde düzenleme, ince ayar yapma ve panel görünümünü özelleştirmek için gereklidir. Mesela, bir dosya düzenlendiğinde gereksiz sütunlar silinebilir veya tam tersine varsayılan olarak görüntülenmeyen sütunlar eklenebilir.

Hadi bu dosyanın içeriğini ve nasıl özelleştireceğimizi görelim. Bunu yapmak için, dosyayı HedgeTerminal'in dosyalarını yüklediği dizinde bulun. Bu dizin daha önce bahsedildiği gibi, c:\Users\<your user name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal adresinde bulunabilir. Settings.xml dosyası içinde bulunmalıdır. Herhangi bir metin düzenleyicinin yardımıyla açın:

<!--This settings valid for HedgeTerminal only. For settings HedgeTerminalAPI using API function and special parameters.-->
<Hedge-Terminal-Settings>
        <!--This section defines what columns will be showed on the panel.-->
        <Show-Columns>
                <!--You can change the order of columns or comment not using columns.-->
                <!--You can change the value of 'Width' for a better scaling of visual table.-->
                <!--You can change the value of 'Name' to install your column name.-->
                
                <!--This columns for tab 'Active'-->
                <Active-Position>       
                        <Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
                        <!-- Unset this comment if you want auto trading and want see name of your expert:
                        <Column ID="Magic" Name="Magic" Width="100"/>-->
                        <Column ID="Symbol" Name="Symbol" Width="70"/>
                        <Column ID="EntryID" Name="Entry ID" Width="80"/>
                        <Column ID="EntryDate" Name="Entry Date" Width="110"/>
                        <Column ID="Type" Name="Type" Width="80"/>
                        <Column ID="Volume" Name="Vol." Width="30"/>
                        <Column ID="EntryPrice" Name="EntryPrice" Width="50"/>
                        <Column ID="TralStopLoss" Name="TralSL" Width="20"/>
                        <Column ID="StopLoss" Name="S/L" Width="50"/>
                        <Column ID="TakeProfit" Name="T/P" Width="50"/>
                        <Column ID="CurrentPrice" Name="Price" Width="50"/>
                        <Column ID="Commission" Name="Comm." Width="40"/>
                        <Column ID="Profit" Name="Profit" Width="60"/>
                        <Column ID="EntryComment" Name="Entry Comment" Width="100"/>
                        <Column ID="ExitComment" Name="Exit Comment" Width="100"/>
                </Active-Position>
                <!--This columns for tab 'History'-->
                <History-Position>
                        <Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
                        <!-- Unset this comment if you want auto trading and want see name of your expert:
                        <Column ID="Magic" Name="Magic" Width="100"/>-->
                        <Column ID="Symbol" Name="Symbol" Width="70"/>
                        <Column ID="EntryID" Name="Entry ID" Width="80"/>
                        <Column ID="EntryDate" Name="Entry Date" Width="110"/>
                        <Column ID="Type" Name="Type" Width="40"/>
                        <Column ID="EntryPrice" Name="Entry Price" Width="50"/>
                        <Column ID="Volume" Name="Vol." Width="30"/>
                        <Column ID="ExitPrice" Name="Exit Price" Width="50"/>
                        <Column ID="ExitDate" Name="Exit Date" Width="110"/>
                        <Column ID="ExitID" Name="Exit ID" Width="80"/>
                        <Column ID="StopLoss" Name="S/L" Width="50"/>
                        <Column ID="TakeProfit" Name="T/P" Width="50"/>
                        <Column ID="Commission" Name="Comm." Width="40"/>
                        <Column ID="Profit" Name="Profit" Width="50"/>
                        <Column ID="EntryComment" Name="Entry Comment" Width="90"/>
                        <Column ID="ExitComment" Name="Exit Comment" Width="90"/>
                </History-Position>
        </Show-Columns>
        <Other-Settings>
                <Deviation Value="30"/>
                <Timeout Seconds="180"/>
                <!-- If your computer is not fast enough - set a value 'Milliseconds' greater than 200, such as 500 or 1000. -->
                <RefreshRates Milliseconds="200"/>
        </Other-Settings>
</Hedge-Terminal-Settings>

Bu dosya, xml işaretleme dilinde yazılmıştır, HedgeTerminal'in hareketini ve görünümünü açıklayan özel bir belge içerir.

Düzenlemeye başlamadan önce yapılacak en önemli şey, dosyanın yanlışlıkla bozulması durumuna karşın bir yedek kopya oluşturmaktır. Dosya hiyerarşik bir yapıya sahiptir ve iç içe birkaç bölümden oluşur. Ana bölümün adı <Hedge-Terminal-Settings>'dir ve iki ana alt bölüm içermektedir: <Show-Columns> ve <Other-Settings>. Adlarından da anlaşılacağı gibi, ilk bölüm görüntülenen sütunları ve koşullu genişliklerini ayarlar ve ikinci bölüm panelin kendisi ve HedgeTerminalAPI kitaplığı için gerekli olan ayarlara sahiptir.

Sütunların boyutunu ve adını değiştirme. <Sütunları Göster> bölümüne göz atalım ve yapısını ele alalım. Esasen, bu bölüm iki sütun kümesi içerir: bunlardan biri "Etkin" sekmesindeki etkin pozisyonlar tablosu için, diğeri ise "Geçmiş" sekmesindeki geçmiş pozisyonlar tablosu içindir. Kümelerden birindeki her sütun şöyle görünür:

<Column ID="Symbol" Name="Symbol" Width="70"/>

Sütun bir tanımlayıcı (ID="Sembol"), sütunun adı (Ad="Sembol") ve koşullu genişlik (Genişlik="70") içermelidir.

Tanımlayıcı, sütunun benzersiz bir dahili adını içerir. HedgeTerminal'e bu sütunun nasıl görüntüleneceğini ve içine hangi değerin yerleştirileceğini sorar. Tanımlayıcı değiştirilemez ve HedgeTerminal tarafından desteklenmesi gerekir.

Sütunun adı, sütunun tabloda hangi adla görüntüleneceğini tanımlar. Ad başka bir adla değiştirilirse örneğin: Ad="Döviz Çifti", ardından HedgeTerminal'in bir sonraki açılışında, sembolü gösteren sütunun adı değişir:


Şek. 30. HedgeTerminal panelindeki sütun adlarının değiştirilmesi

Bu özellik, her sütunun adının tercih edilen dilde, örneğin Rusça'da görüntüleneceği panelin yerelleştirilmiş bir sürümünün oluşturulmasına izin verir:

 Şek. 31. HedgeTerminal paneli yerelleştirmesi

Şek. 31. HedgeTerminal paneli yerelleştirmesi

Sonraki etiket, sütunun koşullu genişliğini içerir. Burada bir grafik motoru, tablo boyutunu otomatik olarak panelin başlatıldığı pencerenin genişliğiyle hizalar. Pencere ne kadar geniş olursa her sütun o kadar geniş olur. Sütun genişliğini tam olarak ayarlamak mümkün değildir ancak oranlar sütunun temel genişliğini ayarlayarak belirlenebilir. Temel genişlik, pencerenin genişliği 1280 piksel olduğunda sütunun piksel cinsinden genişliğidir.

Ekranınız daha genişse sütunun gerçek boyutu daha büyüktür. Tek tip ölçeklemenin nasıl çalıştığını görmek için Sembol sütununun genişliğini 240 koşullu piksel olarak ayarlayın: Genişlik="240". Ardından dosyayı kaydedin ve paneli sıfırlayın:

Şek. 32. Symbol sütununun genişliği, 240 piksel için ayarlanmıştır.

Şek. 32. Sembol sütununun genişliği, 240 piksel için ayarlanmıştır.

Semboller içeren sütunun genişliği önemli ölçüde arttı. Bununla birlikte, sütun genişliğinin diğer sütunların genişliği pahasına kazanıldığına dikkat edilmelidir. ("Giriş Kimliği"  ve "Giriş Tarihi").

Diğer sütunlar artık daha kötü görünüyor, son değerler izin verilen genişliğe sığmıyor. Sütunların boyutu, her biri için en iyi boyutu bularak dikkatlice değiştirilmelidir. Standart ayarlar, ekranların çoğunluğu için kesin değerlere sahiptir ve normalde boyutlarının değiştirilmesi gerekir.

Sütunları silme. Sütun boyutlarını ve başlıklarını değiştirmeye ek olarak, sütunlar da eklenebilir veya silinebilir. Örneğin "Sembol" sütununu listeden silmeyi deneyelim. Bunu yapmak için Settings.xml dosyasındaki sütununun etiketine yorum girmeniz yeterlidir (sarıyla vurgulanmış):

<Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
<!-- Unset this comment if you want auto trading and want see name of your expert:
<Column ID="Magic" Name="Magic" Width="100"/>-->
<!--<Column ID="Symbol" Name="Symbol" Width="70"/>-->
<Column ID="EntryID" Name="Entry ID" Width="80"/>

xml'de belirli bir etiket <!-- yorumun içeriği yorumun rolüne sahiptir. Derlemeden çıkarılan sütun etikette yer almalıdır. Dosyadaki değişiklikler kaydedildikten ve HedgeTerminal yeniden başlatıldıktan sonra, geçmiş pozisyonlar için sütun seti değişir. Şu sembolü gösteren bir sütun içermez:

Şek. 33. Etkin pozisyonlar tablosundan Sembol sütununu silme

Şek. 33. Etkin pozisyonlar tablosundan Sembol sütununu silme

Tek seferde birden fazla sütun silinebilir.

Sembol adı ve kar boyutu dışındaki tüm sütunları derlemeden çıkaralım ve ardından grafikte HedgeTerminal'i yeniden başlatalım:

Şek. 34. HedgeTerminal panelinden ana sütunları silme

Şek. 34. HedgeTerminal panelinden ana sütunları silme

Görebildiğimiz gibi HedgeTerminal tablosu önemli ölçüde azaldı. Bazı durumlarda pozisyon yönetimi öğelerini içerdiklerinden, sütunları silerken dikkatli olunmalıdır. Ele aldığımız durumda, pozisyonları tersine çevirmeye ve yatırımları görüntülemeye izin veren sütun silindi. Etkin pozisyonlar tablosundan "Kar" sütununu bile silinebilir. Ancak bu sütun kapatma pozisyonunun bir düğmesini içerir. Bu durumda kapat düğmesi olmadığından pozisyon kapanmaz.

Sütun ekleme ve Expert'lerin takma adlarını görüntüleme. HedgeTerminal bunlarla çalışmak üzere programlanmışsa sütunlar düzenlenerek silinebilir ve eklenebilir. Gelecekte, bir kullanıcı kendi sütunlarını oluşturabilir ve kendi parametrelerini hesaplayabilir. Bu tür sütunlar, harici gösterge iCustom'un arayüzü ve xml ile yazılmış genişletme modülleriyle etkileşim bildirimi aracılığıyla bağlanabilir.

Şu anda böyle bir işlev yoktur ve yalnızca HedgeTerminal tarafından desteklenen sütunlar kullanılabilir. Panel tarafından desteklenen ancak varsayılan olarak ayarlarda görüntülenmeyen tek sütun, Expert'in sihirli numarasını içeren sütundur.

Pozisyonsadece manuel olarak değil bir robot kullanılarak da açılabilir. Bu durumda pozisyon açan robotun belirticisi her pozisyon için görüntülenebilir. Expert Advisor'ın numarasını içeren derlemeden çıkarılmış sütun etiketi, ayarlar dosyasında zaten mevcuttur. Bunun açıklamasını kaldıralım:

<Column ID="Magic" Name="Magic" Width="100"/>

Değişiklikleri kaydedin ve paneli yeniden başlatın:

Şek. 35. HedgeTerminal tablosuna Magic sütunu ekleme

Şek. 35. HedgeTerminal tablosuna Magic sütunu ekleme

Yukarıdaki resimde gördüğümüz gibi "Magic" adında bir sütun belirdi. Bu, pozisyon açan Expert Advisor'ın tanımlayıcısıdır. Pozisyon manuel olarak açıldı ve bu nedenle tanımlayıcı sıfıra eşittir. Bir robot tarafından kural olarak açılan bir pozisyon, sıfırdan farklı bir tanımlayıcı içerir. Bu durumda, sütunda Expert'in ilgili sihirli sayısı görüntülenir.

Ancak Expert Advisor'ların numaraları yerine isimlerini görmek daha uygundur. HedgeTerminal'de bu seçenek vardır. ExpertAliases.xml dosyasından alınan EA'ların takma adlarını (adlarını) alır ve karşılık gelen sihirli sayılar yerine bunları görüntüler.

Örneğin "ExPro 1.1" adında bir Expert'iniz varsa ve sihirli sayı 123847 ile işlem yapıyorsanız <Expert Takma Adları> bölümündeki ExpertsAliases.xml dosyasina aşağıdaki etiketi yerleştirmeniz yeterlidir:

<Expert Magic="123847" Name="ExPro 1.1"></Expert>

Şu andan itibaren robotunuz yeni bir pozisyon açtığında bunun adını alacak:

Şek. 36. Magic sütunundaki Expert adının görüntülenmesi

Şek. 36. Magic sütunundaki Expert'in adının görüntülenmesi

Robotların ve adlarının sayısı sınırlı değildir. Buradaki tek koşul, sayılarının farklı olmasıdır.

Diğer HedgeTerminal ayarları. Şu anda mevcut olan görsel panelin tüm ayarlarını açıkladık. Sonraki bölüm <Diğer-Ayarlar>, terminalin dahili çalışmasını tanımlayan ayarları içerir. Program çağrı kitaplığı HedgeTerminalAPI'nin bu ayarları varsayılan değerler olarak kullandığını lütfen unutmayın. Ancak Expert Advisor, özel Ayarla... işlevlerini kullanarak bu ayarların mevcut değerlerini değiştirebilir. Bu ayarların değerlerini almak için Expert yalnızca özel Edin... işlevlerini çağırması gerekir. Ayarları olan etiketleri daha ayrıntılı olarak açıklayacağız.

<Deviation Value="30"/>

Minimum fiyat değişikliği birimlerinde gerekli fiyattan aşırı sapma değerini içerir. Bu nedenle, beşinci ondalık basamağa kote EURUSD çifti için 0,0003 puan olacaktır. RTS endeksi geleceği için, fiyat değişikliğinin minimum adımı 10 puan olduğundan bu değer 300 puan olacaktır. Fiyat sapması daha büyükse fiyatı kapatma veya değiştirme talimatı uygulanmaz. Bu, istenmeyen kaymalara karşı koruma için yerindedir.

<Timeout Seconds="180"/>

Bu etiket, sunucudan izin verilen maksimum yanıtın değerini içerir. HedgeTerminal eşzamansız modda çalışır. Bu, HedgeTerminal'in sunucudan yanıt almayı beklemeden sunucuya bir alım satım sinyali gönderdiği anlamına gelir. Bunun yerine HedgeTerminal, talimatın başarıyla verildiğine işaret eden olayların sırasını kontrol eder. Etkinlik hiç gerçekleşmeyebilir. HedgeTerminal'in sunucu yanıtını bekleyeceği bekleme zaman aşımı süresini ayarlamanın bu kadar önemli olmasının nedeni budur. Bu süre içinde herhangi bir yanıt gelmezse görev iptal edilir, HedgeTerminal pozisyonun blokesini kaldırır ve işine devam eder.

Bekleme zaman aşımı süresi kısaltılabilir veya uzatılabilir. Varsayılan olarak bu 180 saniyedir.

Gerçek alım satımda bu sınırlamaya asla ulaşılmadığını anlamak önemlidir. Alım satım sinyallerine verilen yanıtlar hızlı bir şekilde geri gelir, bunların çoğu 150 – 200 milisaniye içinde gerçekleştirilir.

HedgeTerminal'in çalışması ve eşzamansız modda çalışmanın özellikleri hakkında daha fazla ayrıntı bu makalenin üçüncü bölümünde bulunabilir: "HedgeTerminal"in Kaputunun Altında.

<RefreshRates Milliseconds="200"/>

Bu etiket, panel güncellemelerinin sıklığını ayarlar. Birbirini izleyen iki panel güncellemesi arasındaki süreyi milisaniye cinsinden içerir. Bu değer ne kadar düşük olursa panel güncelleme sıklığı o kadar yüksek olur ve o kadar çok CP kaynağı kullanılır. İşlemciniz çok güçlü değilse ve 200 milisaniyelik (varsayılan değer) güncelleme frekansıyla baş edemiyorsa etiketi düzenleyerek 500 veya hatta 1000 milisaniyeye kadar yükseltebilirsiniz.

Bu durumda CP yükü önemli ölçüde düşer. 100 milisaniyeden küçük değerler önerilmez. Güncelleme sıklığı arttıkça CP yükü doğrusal olmayan bir şekilde artar. Güncelleme sıklığının terminalin ayrıklığını tanımladığını anlamak önemlidir. Eylemlerinden bazıları bu zamanlayıcı tarafından tanımlanır ve belirli bir hızla gerçekleşir.


2.11. Planlanmış Fakat Henüz Uygulanmamış Özellikler

HedgeTerminal, bu programın yeni önemsiz olmayan yeteneklerinin uygulanabilir hale gelmesi nedeniyle esnek ve önemsiz olmayan bir mimariye sahiptir. Bugün bu yetenekler uygulanmadı, ancak gelecekte talep olması durumunda ortaya çıkabilirler. Ağıda temel olanlar belirtilmiştir:

Renk şemaları ve dış görünümleri kullanma. HedgeTerminal kendi grafik motorunu kullanır. Bu, dikdörtgen bir etiket veya normal bir metin gibi temel gösterim öğelerine bağlıdır. Resimlere dayalı grafikler hiç kullanılmaz. Bu, HedgeTerminal'de görüntülenen tüm öğelerin rengini, boyutunu ve yazı tipini değiştirme fırsatı verir. Bu şekilde, dış görünüm şeklinde yazı tiplerinin ve renk şemasının bir tanımını oluşturmak ve HedgeTerminal'in açılışında görünümünü değiştirerek yüklemek kolaydır.

Özel İzleyen Durdurma modüllerini bağlama. Her Expert ve HedgeTerminal esasen bir Expert'tir, belirli bir program arabirimi (iCustom() fonksiyonu) aracılığıyla keyfi bir göstergenin hesaplanması başlatılabilir. İsteğe bağlı parametre setine bağlı olan gösterge hesaplamasını çağırmanıza izin verir. Trailing Stop, mevcut fiyata bağlı olarak yeni bir fiyat yerleştiren veya eski fiyat seviyesini koruyan bir algoritmadır. Bu algoritma ve fiyat seviyeleri bir gösterge olarak uygulanabilir. Geçilen parametreler üzerinde anlaşmaya varılırsa HedgeTerminal böyle bir göstergeyi çağırabilir ve gerekli fiyat seviyesini hesaplayabilir. HedgeTerminal, Trailing Stop'u aktarmanın mekaniğini halledebilir. Bu şekilde, herhangi bir HedgeTerminal kullanıcısı kendi (en alışılmadık olanı bile) Trailing Stop'u yönetme modülünü yazabilir.

Pozisyonlar tablosuna yeni sütunlar ekleme. Buna özel sütunlar dahildir. HedgeTerminal tabloları, yeni sütunların eklenmesine izin verecek şekilde tasarlanmıştır. Yeni sütunların desteği HedgeTerminal içinde programlanabilir ve iCustom() arabirimi aracılığıyla tanıdık bir şekilde uygulanabilir. Bir pozisyon satırındaki her hücre bir parametreyi temsil eder (örneğin açılış fiyatı veya Kar Al seviyesi). Bu parametre bir gösterge tarafından hesaplanabilir ve bu, sınırsız sayıda gösterge yazılabileceği anlamına gelir. Böylece her biri bir pozisyon için bir parametre hesaplar. Bu tür göstergeler için geçiş parametreleri koordine edilirse HedgeTerminal'deki bir tabloya sınırsız sayıda özel sütun eklemek mümkün olur.

Uzatma modüllerini bağlama. Diğer hesaplama algoritmaları, özel gösterge çağrısı mekanizması aracılığıyla hesaplanabilir. Örneğin rapor sistemi, beklenen getiri ve Sharpe oranı gibi birçok hesaplama parametresini içerir. Bu parametrelerin çoğu, hesaplama bloklarını özel göstergeye taşıyarak alınabilir.

Yatırımları kopyalama, diğer hesaplardan yatırımları alma ve iletme. HedgeTerminal aslında bir pozisyon yöneticisidir. Ana işlevler zaten uygulanmış olduğundan, bu kolayca bir yatırım fotokopi makinesi için bir temel olabilir. Böyle bir fotokopi makinesi, iki yönlü MetaTrader 4 pozisyonunu MetaTrader 5 terminaline kopyalamak için önemsiz yeteneklere sahip olur. Fotokopi makinesi bu pozisyonları MetaTrader 4'teki gibi çift yönlü olarak gösterir ve her pozisyonu ayrı ayrı yönetme imkanı verir.

Raporlar ve istatistikler. Equity grafiği ve "Özet" sekmesi. Çift yönlü pozisyonların sayılması, her stratejinin veya yatırımcının sonucuna katkının analiz edilmesini sağlar. İstatistiklerin yanı sıra portföy analizi de yapılabilir. Bu rapor, MetaTrader 5'teki rapordan önemli ölçüde farklı olabilir ve ona eklenebilir. Özet sekmesi raporunda; beklenen getiri, maksimum geri çekilme, kar faktörü vb. gibi genel kabul görmüş parametrelere ek olarak diğer parametreler de dahil edilir. İkincisinin adları ve değerleri, özel genişletme modüllerinden elde edilebilir. Bir resimdeki bilindik denge tablosu yerine, özel mum grafiği şeklindeki Hisse senedi grafiği kullanılabilir.

Sütunları sıralama. Genellikle tablo başlığına basıldığında, satırlar artan veya azalan düzende sıralanır (ikinci basma). HedgeTerminal'in mevcut sürümü, sıralama, şu anda mevcut olmayan yatırım filtresi ve özel sütun kümesi ile bağlantılı olduğundan bu seçeneği desteklememektedir. Daha sonraki sürümlerde bu seçenek olur.

E-posta, ftp yoluyla bir alım satım raporu gönderme. Anlık bildirim. HedgeTerminal; e-posta, ftp dosyaları ve hatta anlık bildirimler göndermek için sistem işlevlerini kullanabilir. Örneğin günde bir kez html raporu oluşturup kullanıcı listesine gönderebilir. HedgeTerminal, Expert Advisor'ların yöneticisi olduğundan ve diğer EA'ların tüm alım satım işlemlerini bildiğinden, diğer Expert Advisor'ların alım satım işlemleri hakkında kullanıcıları bilgilendirebilir. Örneğin EA'lardan biri yeni bir pozisyon açarsa HedgeTerminal kullanıcılara belirli bir Expert'in yeni bir pozisyon girdiğini bildiren bir anlık bildirimi gönderebilir. HedgeTerminal ayrıca girişin yönünü, tarihini, saatini ve hacmini de belirler. EA'nın kendisinin yapılandırılması gerekmez, adını takma ad dosyasına eklemek yeterli olur.

Normal ifadeler konsolu ile pozisyonları filtreleme. Bu, planlı gelişmelerin en güçlüsüdür. HedgeTerminal'in çalışmasını tamamen yeni bir düzeye taşır. Normal ifadeler, geçmiş ve etkin pozisyonları filtrelemek için kullanılabilir, böylece yalnızca bu filtrenin gereksinimlerini karşılayanlar görüntülenir. Normal ifadeler birleştirilip etkin ve geçmiş pozisyonlar tablosunun üzerindeki özel bir konsola girilebilir. HedgeTerminal'in gelecekteki sürümlerinde bu konsol şöyle görünebilir:

Şek. 37. HedgeTerminalin gelecekteki sürümünde konsol talebi

Şek. 37. HedgeTerminalin gelecekteki sürümünde konsol talebi

Normal ifadeler, pozisyonları filtrelemek ve ardından bunlar üzerinde istatistiksel hesaplama yapmak için çok esnek koşullar oluşturabilir. Örneğin yalnızca AUDCAD sembolü ile geçmiş pozisyonları görüntülemek için "Sembol" hücresine "AUDCAD" sembolünü girmek yeterlidir. Koşullar birleştirilebilir. Örneğin belirli bir robot tarafından yürütülen AUDCAD pozisyonları 01.09.2014 ile 01.10.2014 arasındaki dönem için görüntülenebilir. Bunun için tek yapmanız gereken ilgili hücrelere koşulları girmektir. Filtre, sonuçları gösterdikten sonra, "Özet" sekmesinden gelen rapor yeni filtre koşullarına göre değişir.

Normal ifadeler az sayıda basit operatörden oluşur. Ancak birlikte kullanıldıklarında çok esnek filtreler oluşturmaya olanak tanırlar.

Konsolda aşağıdaki operatörlerin bulunması gerekli ve yeterlidir:

    Operatör = - Kesin eşitlik. "Sembol" alanına AUDCAD kelimesi girilirse bu alt dizeyi içeren tüm semboller, örneğin AUDCAD_m1 veya AUDCAD_1 bulunur. Bu, örtük bir ekleme operatörünün kullanılacağı anlamına gelir. Kesin eşitlik "=", ifadenin tam eşleşmesini gerektirir ve bu nedenle AUDCAD dışındaki tüm semboller hariç tutulur. AUDCAD_m1 veya EURUSD hariç tutulur.

    Operatör > - Yalnızca belirtilenden daha büyük değerleri görüntüler.

    Operatör > - Yalnızca belirtilenden daha küçük değerleri görüntüler.

    Operatör ! – Mantıksal olumsuzlama. Yalnızca belirtilen değere eşit olmayan değerleri yansıtır.

    Operatör | - Mantıksal »VEYA". Aynı anda bir satırda iki veya daha fazla koşulun belirtilmesine izin verir. Aynı zamanda kriteri karşılamak için en az bir şartı yerine getirmek yeterlidir. Örneğin ifade konsolunun »Giriş Sırası" hücresine girilen "> 10106825|=10106833" ifadesi, gelen sıra tanımlayıcısı 10106825'ten büyük veya 10106833'e eşit olan tüm pozisyonları gösterir. 

    Operatör ve - Mantıksal "VE". Aynı anda bir satırda iki veya daha fazla koşulun belirtilmesine izin verir ve her birinin yerine getirilmesi gerekir. »Giriş Sırası" hücresine girilen ">10106825&<10105939 ifadesi, gelen tanımlayıcısı 10106825'ten büyük veya 10105939'dan küçük olan tüm pozisyonları gösterir. Bu iki sayı arasında tanımlayıcıları bulunan pozisyonlar, örneğin 10106320 filtrelenir.

Özel komutlar kullanarak pozisyonları düzeltme ve yönetme. Hacmi veya StopLoss ve TakeProfit seviyelerini yansıtan hücrelere ek semboller girilebilir. Bu, daha karmaşık bir pozisyon yönetimini mümkün kılar. Örneğin mevcut pozisyon hacminin yarısını kapatmak için »Hacim" alanında etkin pozisyona karşılık gelen "%50" değerini girin.

StopLoss ve TakeProfit seviyelerini yerleştirmek yerine, bu hücrelere örneğin "%1" gibi bir değer girilebilir. HedgeTerminal; StopLoss ve TakeProfit seviyesini otomatik olarak hesaplar ve böylece giriş fiyatından %1'lik bir mesafeye yerleştirilir. Bu hücrelere son eki "p" olan sayılar girilebilir. Örneğin "200p" şu talimat anlamına gelir: "StopLoss ve TakeProfit seviyelerini pozisyon giriş fiyatından 200 puan uzağa yerleştirin". Gelecekte "Hacim" sütunundaki hacmin önüne bir eksi konursa hacim bu işaretten sonra belirtilen değer kadar kapanır. Örneğin, hacmi 1,0 olan bir pozisyonunuz varsa ve hacmin bir kısmını (örneğin 0,3) kapatmak istiyorsak hacim hücresine "-0,3" yazmanız yeterlidir.


Bölüm 3. HedgeTerminal'in Kaputunun Altında. Şartname ve Çalışma Prensibi

3.1. Küresel ve Yerel Konturlar. Bilgilerin Bağlamı, Aktarımı ve Saklanması

HedgeTerminal'in görünümü ve işlem süreci, tanıdık MetaTrader 4'e benziyor. Bu, MetaTrader 5 aracılığıyla sağlanan alım satım bilgileri panel tarafından daha uygun bir şekilde görüntülendiğinde, veri gösteriminin dönüştürülmesi ve sanallaştırma nedeniyle mümkündür. Bu bölüm, bu tür sanallaştırmanın oluşturulmasına izin veren mekanizmaları ve grup veri işleme mekanizmalarını açıklar.

Bildiğiniz gibi HedgeTerminal birkaç farklı ürünle temsil edilmektedir. Bunların temel olanı, görsel panel ve program arayüzlü kütüphanedir. İkincisi, herhangi bir harici Expert Advisor'da çift yönlü pozisyonların yönetimine izin verir ve ayrıca bunu HedgeTerminal görsel paneline entegre eder. Örneğin bir EA'nın etkin bir pozisyonu, doğrudan panelden kapatılabilir. Expert Advisor bilgileri alır ve buna göre işler.

Görünüşe göre böyle bir yapı, Expert Advisor arasında bir grup etkileşimi gerektirir. Esasen bir Expert Advisor olan panel, gerçekleşen tüm alım satım işlemleri hakkında bilgi sahibi olmalıdır. Diğer taraftan, HedgeTerminal kitaplığını kullanan her Expert Advisor, manuel olarak (üçüncü taraf programları tarafından veya HedgeTerminal paneli kullanılarak) yürütülen ticari işlemler hakkında bilgi sahibi olmalıdır.

Genel olarak alım satım işlemleriyle ilgili bilgiler alım satım ortamından alınabilir. Örneğin kullanıcı yeni bir pozisyon açtığında talimat sayısı değişir. Son talimat, pozisyonun hangi sembol için açıldığını ve hangi hacme sahip olduğunu söyleyebilir. Talimatlar ve yatırımlar hakkındaki bilgiler sunucuda saklanır. Bu nedenle alım satım hesabına bağlı herhangi bir terminal için kullanılabilir. Bu bilgiye küresel adı verilebilir, çünkü bu herkes tarafından kullanılabilir ve küresel iletişim kanalı aracılığıyla dağıtılır. İşlem sunucusuyla iletişim "Talep - yanıt" biçimindedir.

Bu nedenle, bu tür bir iletişim küresel bir kontur olarak sunulabilir. "Kontur" grafik teorisinden bir kavramdır. Basit bir deyişle bir kontur, birkaç düğümün birbiriyle etkileşime girdiği kapalı bir çizgidir. Bu tanım yeterli olmayabilir ama kesinliği matematikçilere bırakacağız. Bizim için önemli olan, alım satım sürecini bir dizi kapalı eylem olarak sunmaktır.

Gerekli tüm bilgiler global konturdan geçirilemez. MetaTrader 5 böyle bir aktarımı desteklemediği için bilgilerin bir kısmı aktarılamıyor, ayrıca bu bilgiler açıkça mevcut değil. Alım satım eylemlerinin sırası:

  1. Bir yatırımcı, satın alma işlemi için bir talimat verir.
  2. Talimat bir süre sonra yerine getirilir.
  3. Alım satım ortamı değişir. Yürütülen talimat, geçmiş talimatlar listesine girer. Sembolün toplu pozisyonu değişir.
  4. Yatırımcı veya Expert Advisor, alım satım ortamındaki değişikliği tespit eder ve bir sonraki kararı verir.

Birinci ve dördüncü eylemler arasında biraz zaman geçer. Önemli olabilir. Hesapta yalnızca bir yatırımcı işlem yaparsa hangi işlemlerin yapıldığını bilir ve sunucudan uygun yanıtı bekler. Hesapta aynı anda işlem yapan birkaç yatırımcı veya Expert Advisor varsa yönetim hataları olabilir.

Örneğin ikinci yatırımcı, birinci ve dördüncü adım arasındaki sürede mevcut bir pozisyonu kapatmak için talimat verebilir. Potansiyel bir sorun görebiliyor musunuz? İkinci talimat, birincisi yürütülürken verilir. Başka bir deyişle, bir pozisyonu kapatmak için bir talimat iki kez gönderilir.

Bu örnek, yatırımcı hesapta tek başına ve manuel olarak işlem yapıyorsa ve eşzamanlı talimat verme yöntemlerini kullanıyorsa bu örnek çok olası görünür. Hesapta alım satım yapan ve bağımsız ticaret işlemleri yürüten birkaç robot olduğunda, bu tür hataların olma olasılığı yüksektir.

HedgeTerminal, eşzamansız modda çalışan ve birkaç Expert'in eşzamanlı paralel çalışmasını sağlayan bir pozisyon yöneticisi olduğundan, bu hatalara çok yakın olabilir. Bunu önlemek için HedgeTerminal, ActivePositions.xml dosyasının çok iş parçacıklı okuması ve değiştirilmesi olarak uygulanan yerel kontur mekanizması aracılığıyla, başlatılan tüm kopyaları (bunun HedgeTerminalAPI kütüphanesi mi yoksa görsel panel mi olduğuna bakılmaksızın) arasındaki eylemleri senkronize eder. ActivePositions.xml dosyasıyla etkileşim, HedgeTerminal'in en önemli parçası olan yerel konturun çekirdeğidir. Bu mekanizma aşağıda açıklanmıştır.

Basit bir şekilde, HedgeTerminal'in işi, aşağıdaki şekilde olduğu gibi yerel ve küresel bir kontur ile işbirliğine iner:

Şek. 38. Küresel ve yerel kontur arasında basitleştirilmiş bir bilgi alışverişi şeması

Şek. 38. Küresel ve yerel kontur arasında basitleştirilmiş bir bilgi alışverişi şeması

HedgeTerminal'deki herhangi bir alım satım işlemi (diyagramda başlangıç etiketi) ActivePositions.xml içinde pozisyonun daha fazla değişmesini engelleyen özel bir etiketin yazılmasıyla başlar.

Pozisyon bloğu ayarlandıktan ve yerel kontur başarıyla geçildikten sonra, HedgeTerminal sunucuya bir işlem talimatı gönderir. Örneğin pozisyonu kapatmak için bir karşı talimat. Talimat bir süre sonra yerine getirilir ve alım satım ortamı değişir. HedgeTerminal bu değişikliği işler ve global kontürün başarıyla geçtiğini ve talimatın yürütüldüğünü algılar. Pozisyonun engellemesini kaldırır ve başlangıç durumuna geri döner (diyagramda bitiş etiketi).

Bir talimatın yerine getirilemeyeceği bir durum olabilir. Bu durumda HedgeTerminal de pozisyonun blokesini kaldırır ve MetaTrader 5 terminalinin günlüğüne arızanın nedeni hakkında bir kayıt oluşturur.

Gerçekte, bilgi iletişiminin formasyonu daha karmaşıktır. Daha önce de belirttiğimiz gibi bir MetaTrader 5 terminalinde birkaç HedgeTerminal kopyası çalışıyor olabilir. Kütüphane veya görsel panel olabilirler. Her kopya bir dinleyicive bir yazar işlevi görebilir. HedgeTerminal bir alım satım eylemi gerçekleştirdiğinde, bu bir yazardır çünkü belirlenen xml etiketinin kayıtlarını kullanarak değişiklikler için pozisyonu engeller. HedgeTerminal'in diğer tüm kopyaları, ActivePositions.xml dosyasını belirli bir periyodiklikle okuduğu ve engelleme etiketiyle karşılaşan değişikliklerde bir pozisyonu engellediği için dinleyicidir.

Bu mekanizma, bağımsız iş parçacıkları arasında bilgi yayılmasını sağlar. HedgeTerminalAPI kitaplığını birkaç panel ve Expert arasında kullanarak paralel çalışmayı kolaylaştırır.

HedgeTerminal'in çok iş parçacıklı işbirliği koşullarında çalışmasını gösteren gerçekçi bir diyagram:

Şek. 39. HedgeTerminal kopyaları arasındaki bilgi alışverişinin neredeyse doğal formasyonu

Şek. 39. HedgeTerminal kopyaları arasındaki bilgi alışverişinin neredeyse doğal formasyonu

Bu tür bir veri organizasyonunun verimliliği çok yüksektir. ActivePositions.xml dosyasının okuma ve yazma işlemleri normalde 1 milisaniyeden daha kısa sürer, oysa global konturu geçerek talimat gönderme ve yürütme 150-200 milisaniyeye kadar sürebilir. Bu değerlerin ölçeği arasındaki farkı görmek için diyagrama bakın.

Yeşil dikdörtgenin genişliği, yerel konturu geçme zamanını gösterir ve mavi olanın genişliği, alım satım talimatı yürütme zamanını gösterir:

Şek. 40. Dosyaya kayıt yapmanın zaman ölçeği ve talimatın uygulanması için gereken süre

Şek. 40. Dosyaya kayıt yapmanın zaman ölçeği ve talimatın uygulanması için gereken süre

Gördüğünüz gibi, yeşil dikdörtgen daha çok dikey bir çizgiye benziyor. Gerçekte, ölçekler arasındaki fark daha da büyüktür.

Hızlı okuma ve kaydetme işlemleri, Expert'ler arasında karmaşık bir veri alışverişini ve dağıtılmış yüksek frekanslı alım satım sistemlerinin oluşturulmasını kolaylaştırabilir.


3.2. Küresel ve Yerel Bilgileri Saklama

Geleneksel olarak, HedgeTerminal tarafından kullanılan tüm alım satım bilgileri iki bölüme ayrılabilir:

  • Yasal bilgiler. Bu, bilgisayar dosyalarında saklanır ve yalnızca yerel konturdan geçirilir;
  • Global bilgiler. Bu bilgiler alım satım sunucusunda saklanır. Global konturdan geçirilir ve hesaba bağlı herhangi bir terminalden erişilebilir.

Talimatlar, fırsatlar ve hesapla ilgili bilgiler global bilgilere aittir. Bu bilgilere MetaTrader 5'in HistoryOrderGetInteger() veya AccountInfoInteger() gibi belirli işlevleri aracılığıyla erişilebilir. HedgeTerminal esas olarak bu bilgileri kullanır. Bu nedenle, HedgeTerminal aşağıdaki verileri görüntüler:

  • HedgeTerminal'in etkin ve geçmiş pozisyonları;
  • Etkin ve geçmiş talimatların StopLoss'u;
  • Geçmiş pozisyonların tetiklenen TakeProfit seviyeleri;
  • Etkin bir pozisyonun gelen yorumu, geçmiş pozisyonların gelen ve giden yorumları;
  • Yerel bilgi listesine dahil edilmeyen etkin ve geçmiş pozisyonların diğer tüm özellikleri.

Tüm bu özellikler global olduğundan, farklı bilgisayarlarda çalışan HedgeTerminal'in tüm kopyaları için görünümleri benzersizdir. Örneğin terminallerden birinde çift yönlü bir pozisyon kapanırsa bu pozisyon başka bir bilgisayarda başlatılsa bile diğer HedgeTerminal'de kapanacaktır.

HedgeTerminal, global verilere ek olarak yerel bilgileri de çalışmalarında kullanır. Yerel bilgiler yalnızca bir bilgisayarda bulunur. Bu bilgiler aşağıdaki özelliklerin temelidir:

  • Aktif pozisyonların TakeProfit seviyeleri;
  • Tetiklemeyen geçmiş pozisyonların TakeProfit seviyeleri;
  • Etkin bir pozisyonun giden yorumu;
  • Hizmet bayrağı, çift yönlü bir pozisyon değişikliğini engelliyor.

Tetiklemeyen kar al seviyeleri HistoryPositions.xml dosyasında saklanır. Yerel bilgilerin geri kalanı ActivePositions.xml dosyasında saklanır.

Yerel veri depolama, bir TakeProfit yerleştirirseniz bunun yalnızca bilgisayarınızda çalışan HedgeTerminal kopyalarında görüneceği anlamına gelir. Bu seviyeyi sizden başka kimse bilemez.


3.3. Zarar Durdurun ve Kar Seviyeleri Alın. Talimat Sistemi Sorunları ve OCO Talimatları

MetaTrader 5'te ve MetaTrader 4'te StopLoss ve TakeProfit seviyeleri kavramı vardır. Bunlar koruyucu duraklardır. MetaTrader 4'e benzer şekilde, belirli bir kayıp (StopLoss) veya kar (TakeProfit) seviyesine ulaştığında bir pozisyonu kapatırlar. Ancak MetaTrader 4'te bu tür duruşlar her bir açık talimat için ayrı ayrı etkindir. MetaTrader 5'te bu duraklar tüm toplam net pozisyon için çalışır.

Buradaki sorun, bir net pozisyonun, Expert'lerin ve özellikle HedgeTerminal'in çift yönlü pozisyonlarıyla bağlantılı olmamasıdır. Bu, normal StopLoss ve TakeProfit seviyelerinin çift yönlü pozisyonlar için kullanılamayacağı, ancak bu seviyelerin ayrı bekleyen talimatlar olarak sunulabileceği anlamına gelir. Açık bir uzun pozisyonunuz varsa bekleyen iki talimat, sırasıyla TakeProfit ve StopLoss'un çalışmalarını taklit eder. Biri bu pozisyonun açılış fiyatının üzerine yerleştirilen SellLimit, diğeri ise bu fiyatın altına yerleştirilen SellStop'tur.

Aslında talimatın açılış sonrası fiyatı SellLimit'e ulaşırsa bu talimat, pozisyonu kar ile ve fiyat SellStop talimatına ulaşırsa pozisyonu zarar ile kapatır. Tek dezavantajı, bir talimat tetiklendikten sonra ikinci talimatın varlığını durdurmaması ve fiyat yön değiştirirse ikinci talimatın birinciden sonra tetiklenebilmesidir.

Bu noktada pozisyon olmadığı için ikinci sıranın tetiklenmesi bir öncekini kapatmak yerine yeni bir net pozisyon açar.

Aşağıdaki şekil, uzun bir pozisyonda koruyucu durdurucuların kullanılması örneğinde bu sorunu göstermektedir:

Şek. 41. SellStop ve SellLimit talimatlarını kullanarak StopLoss ve TakeProfit'i taklit etme

Şek. 41. SellStop ve SellLimit talimatlarını kullanarak StopLoss ve TakeProfit'i taklit etme

Bu tür tutarsızlıkları önlemek için takas ticaretinde OCO talimatları ("Biri Diğerini İptal Ediyor") kullanılır.

Bunlar birbiriyle bağlantılı bekleyen iki talimattır, bu nedenle bir talimatın tetiklenmesi diğerini iptal eder. Örneğimizde bir talimat tetiklendikten sonra, ikinci talimat işlem sunucusu tarafından iptal edilir ve bu nedenle yeni pozisyonlar açılmaz ve tam olarak aradığımız şey budur. Bu tür talimatların çalışması aşağıdaki diyagramda sunulmaktadır:

Şek. 42. StopLoss ve TakeProfit olarak OCO talimatları

Şek. 42. StopLoss ve TakeProfit olarak OCO talimatları

MetaTrader 5 OCO talimatlarını desteklemez. Üç talimatlık bir paket kullanılamayacağından, aynı anda StopLoss ve TakeProfit olarak hareket eden talimatlar uygundur. Bir çift iki talimat kullanılabilir! Yani StopLoss veya TakeProfit olabilir. 

Aslında yeni bir çift yönlü pozisyonu başlatan gerçekleştirilen talimatla bağlantılı bekleyen bir talimat mevcutsa (örneğin StopLoss), o zaman böyle bir yapı güvenlidir. Bekleyen ikinci bir talimat olmaz ve yeni bir çift yönlü talimat açamaz. Aslında, sadece üç senaryo olur:

  • Bekleyen bir talimat, bir komisyoncu veya bir kullanıcı tarafından herhangi bir nedenle iptal edilir;
  • Bekleyen bir talimat tetiklenir;
  • Bekleyen bir talimat tetiklenmez.

Başka bir senaryo yoktur. Bekleyen bir talimat iptal edilirse StopLoss veya TakeProfit'in iptaline eşit olur. Bekleyen bir talimat tetiklenirse pozisyonu kapatır. Talimat tetiklenmezse iki yönlü bir pozisyon yerleştirilmiş bir StopLoss ile aktif kalır.

HedgeTerminal bekleyen talimat tetiklendiğinde devre dışı bırakılsa bile daha sonra başlatıldığında tetiklenmesini işleyebilir ve pozisyonun bu talimat tarafından kapatıldığını anlar. Sihirli sayının bulunduğu alanda, kapanış talimatıın normal talimat, TakeProfit veya StopLoss olup olmadığını gösteren özel hizmet bilgisi varsa pozisyonun StopLoss veya TakeProfit tarafından kapatılıp kapatılmadığını öğrenmek mümkündür. Sihirli sayı ile alanda bağlantı ve servis bilgilerinin nasıl saklandığı bir sonraki bölümde detaylı olarak anlatılmaktadır.

Aynı anda iki gerçek koruyucu durdurucu kullanılamayacağından, HedgeTerminal tasarlanırken bir uzlaşma sağlandı:

HedgeTerminal'deki çift yönlü pozisyonlar, StopLoss rolü oynayan BuyStop ve SellStop'un gerçek talimatlarıyla korunur. TakeProfit seviyeleri sanaldır ve bir bilgisayarda çalışan HedgeTerminal kopyaları düzeyinde desteklenir ve küresel düzeyde kullanılamaz.

StopLoss seviyeleri seçilir, çünkü bu seviyeler yüksek seviyede tetikleme güvenilirliğine sahip olmak için gerekli olan seviyelerdir. TakeProfit çalışmazsa felaket olmaz ve teminat tamamlama çağrısı ile hesap kapanmaz, tetiklenmeyen StopLoss ise hesabın iflasına neden olabilir.

Yine de, bir pozisyonu takip etmenin bir yolunu seçmek için algoritmik bir fırsat vardır. Gerçek StopLoss ve sanal TakeProfit veya sanal StopLoss ve gerçek TakeProfit arasında seçim yapabilirsiniz. StopLoss ve TakeProfit seviyeleri de sanal olabilir. Şu anda bu özellik uygulanmadı, ancak talep edilmesi durumunda görünebilir.

TakeProfit seviyesinin sanallaştırılması, önemli ölçüde olmasa da genel güvenilirliğini düşürür. TakeProfit seviyeleri yerel olarak dağıtılır ve HedgeTerminal'in her kopyasında bulunur. TakeProfit'in yürütülebilmesi için, kütüphaneyi veya HedgeTerminal panelini kullanan Expert Advisor olarak HedgeTerminal'in en az bir çalışan kopyasının olması yeterlidir. Çalışan birkaç HedgeTerminal kopyası olduğunda, bunlardan yalnızca biri TakeProfit'i yürütür. Çift yönlü pozisyona bir engelleme etiketi koyan ilk kişi olur. Bu anlamda, HedgeTerminal örnekleri, verilerin çok iş parçacıklı yazma ve okuma modunda birbirleriyle rekabet eder.

HedgeTerminal panelinden manuel olarak alım satım yapan veya EA'lardaki sanallaştırma kitaplığını kullanan bir kullanıcı için TakeProfit ile çalışmak StopLoss ile çalışmaktan farklı değildir. Bu seviyeler arasındaki tüm gerçek farklılıklar, HedgeTerminal sahnesinin arkasına gizlenmiştir. Yatırımcının "TakeProfit" ve "StopLoss" girmesi yeterlidir. Bu seviyeler aynı anda mevcut olur ve seviyelerden birinin tetiklenmesi hakkında aynı renk gösterge uyarısına sahip olur.


3.4. OCO Talimatları İki Yönlü Pozisyonların Korunmasıyla İlgili Sorunları Çözebilir mi?

OCO talimatları, gerçek StopLoss ve TakeProfit seviyelerini aynı anda kullanmayı mümkün kılar. Bunlar, çift yönlü alım satımı organize etme konusunda gerçekten çok yönlüler mi? Aşağıda bunların özellikleri yer alır. OCO talimatlarının, diğeri tetiklendiğinde bir talimatı iptal etmeye izin verdiğini zaten biliyoruz.

Zarar Durdur ve Kar Al durumunda, HedgeTerminal'in bilgisayarda çalışmasını gerektirmeyen gerçek talimatlar olabileceğinden, iki yönlü pozisyonumuzu her iki taraftan da koruyacak gibi görünür. Bununla birlikte, döviz talimatı uygulamasında kısmi talimat yürütme dikkate alınmalıdır. Bu özellik, uygulamanın iş mantığını bozabilir. Basit bir örnek düşünelim:

  1. 10 sözleşme hacminde bir uzun pozisyon açılıyor. StopLoss ve TakeProfit seviyelerini uygulayan iki bağlantılı OCO talimatı verilir;
  2. SellLimit talimatı, TakeProfit seviyesine ulaşıldığında kısmen gerçekleştirilir. 10 sözleşmeden 7'si kendisi tarafından kapatıldı ve kalan 3'ü uzun pozisyon olarak açık kaldı;
  3. StopLoss seviyesini uygulayan SellStop talimatı, kendisine bağlı SellLimit talimatı kısmen de olsa gerçekleştirildiği için iptal edilecek.
  4. Üç sözleşmedeki pozisyonun artık koruyucu bir duruşu yok.

Bu senaryo aşağıdaki şekilde sunulur:

Şek. 43. Koruyucu durdurmaların kısmi uygulanması

Şek. 43. Koruyucu durdurmaların kısmi uygulanması

OCO talimatlarının, kısmi bir yürütmeyi hesaba katacak şekilde tasarlanabileceğine ve bu tür koruyucu durakların silinmesini önlemeye izin verecek şekilde tasarlanabileceğine dair bir itiraz olabilir. İki OCO talimatlarının hacimleri birbirine bağlanabilir. Bu durumda kısmi yürütme kesinlikle öngörülür. Ancak bu, net alım satımda kullanılan talimat sisteminin yeterince karmaşık mantığını karmaşıklaştırır.

Buradaki ana sorun, OCO talimatlarının, kısmi yürütmeyi hesaba katsa bile MetaTrader 4 ile aynı fırsatları sağlayamamasıdır. Örneğin TakeProfit ve StopLoss seviyeleri ile bekleyen bir talimat vermek zor olur. Bunun nedeni, birbirine bağlı iki talimatın, başlatma talimatının tetiklenmesini hesaba katamamasıdır.

MetaTrader 4'e benzer pozisyonları yönetmeye izin veren gerçekten çok yönlü bir algoritma yazmak için OCO talimatları aşağıdaki özelliklere sahip olmalıdır:

  1. Her bağlantılı talimat, kendisine bağlı talimatın icra derecesine bağlı olarak hacmini ayarlamalıdır. Örneğin, TakeProfit 10 temastan 7'sini yürütürse buna bağlı StopLoss'un hacmini 10'dan 3'e (10 - 7 = 3) değiştirmesi gerekir;
  2. Bağlantılı talimatların her biri, başlatma talimatı yürütme hacmini hesaba katmalıdır. Bir yatırımcının BuyLimit türünde bekleyen bir talimat vermesi ve bunu talimat şeklinde StopLoss ve TakeProfit ile koruması durumunda, BuyLimit'in tüm hacmi gerçekleştireceğinin garanti edildiği anlamına gelmez. Bu durumlar, eşleştirilmiş talimatlar tarafından da karşılanmalıdır.
  3. İptal koşuluna ek olarak, eşleştirilmiş bir talimatın tetiklenmesi için ek bir koşul olmalıdır. Yalnızca kendisine bağlı ek bir talimat tetiklendiğinde tetiklenebilir. Bu, bir OCO talimatın iki talimatla bağlantısı olması gerektiği anlamına gelir. İlk bağlantı, tetiklemenin mevcut talimatı etkinleştireceği talimattır. İkinci bağlantı, tetiklemenin mevcut talimatı iptal edeceği talimattır. Böyle bir mekanizma, bekleyen bir başlatma talimatıyla bir pozisyon yaratılmasına izin verir;

Bu tür mekanizmalar, görünseler bile, sınırlı deneyime sahip bir kullanıcı için çok karmaşık olur. Uygunlukları şüphelidir. HedgeTerminal'de şu anda kullanılan gibi, istemci tarafında sanallaştırmanın kullanımı daha kolaydır.

OCO talimatlarına bir alternatif olarak, MetaQuotes, belirli bir alım satım talimatının korunmasını sağlayan belirli algoritmik TakeProfit ve StopLoss seviyelerini tanıtma olasılığını değerlendirebilir. Elbette bu, rasyonel bir temele sahip olmakla birlikte sadece bir teoridir. Bu tür algoritmik seviyeler, son kullanıcılara basit, kullanıma hazır bir koruma mekanizması sunan alım satım sunucusu tarafında uygulamanın ve yapılandırmanın büyük bölümünü gizleyebilir.

Özetle, OCO talimatlarını MetaTrader 5 platformuna entegre etme perspektifleri hakkındaki söylemimiz şu şekildedir:

OCO talimatı, talimatlar kısmen yürütüldüğünde etkili değildir, platformun düzenli bir kullanıcısı için yeterince güvenilir ve çok karmaşık değildir. 


3.5. Talimat Başlatma Bağlantılarını Saklama

Bu bölüm, diğer talimatlara bağlantıların dahili depolamasının ayrıntılı bir açıklamasını ve bunlar arasındaki bağlama mekanizmasını ele almaktadır. Daha önce de belirtildiği gibi, "Talimat Sihri" alanı, talimat veren Expert Advisor'ın tanımlayıcısını içerir. Bu, herhangi bir yatırımcının MQL5 programlama dilini kullanarak bu alana herhangi bir tamsayı değeri girebileceği anlamına gelir. Bu gibi durumlarda yeni bir pozisyonu başlatan talimat, mevcut bir talimatın tanımlayıcısıyla eşleşen bir Expert Advisor'ın tanımlayıcısını içerdiğinde, bir çarpışma mümkündür. Bu durumda talimata yanlış bir bağlantı görünür.

Bir yatırımcıya sıfıra yakın EA'lar için "1", "7" veya "100" gibi tanımlayıcı kullanıyorsa ve talimat numaraları "10002384732" gibi sayılardan önemli ölçüde daha büyükse bu çarpışmalardan kaçınılabilir. Yatırımcıların bunu akıllarında tutacaklarına inanmak büyük saflık olur. Bu nedenle HedgeTerminal, talimat bağlantılarını özel bir şekilde saklar, bu nedenle çarpışma olasılığı çok düşüktür ve algoritmaları belirsizliğe izin vermez ve ortaya çıkarsa çarpışmaları otomatik olarak ortadan kaldırır.

Bağlantıyı saklayan "Talimat Magic" alanı 64 bit alır. Genişliği nedeniyle bu alan çok uzun bir sayı alabilir. Gerçekte, talimat tanımlayıcılarının çalışma aralığı çok daha küçüktür. Bu, Hedge Terminal'in bu alanın daha yüksek rakamlarını ihtiyaçları için güvenli bir şekilde kullanmasına ve talimata özel bir şekilde bağlantı oluşturmasına olanak tanır. HedgeTerminal'in başlangıç talimatına bir bağlantıyı nasıl sakladığını gösteren şemaya bakalım:

Şek. 44. HedgeTerminal'de başlatma sırasına bir bağlantı saklama formasyonu

Şek. 44. HedgeTerminal'de başlatma sırasına bir bağlantı saklama formasyonu

Alanın en üst basamağı (63) her zaman 1 olarak işaretlenir. Bu, tüm talimatlar üzerinde çok hızlı bir yineleme sağlar. Açıkça, bir sonraki basamak 1'e eşit değilse talimat başka bir talimata bağlantı içeremez ve atlanabilir. Ayrıca, 1 değerini en yüksek basamağa atamak, sihirli sayıyı çok büyük yapar ve bu, talimat tanımlayıcılarının çalışma aralığı ile HedgeTerminal'deki bağlantıların çalışma aralığı arasındaki mesafeyi artırır, bu da çarpışma olasılığını en aza indirir.

HedgeTerminal, aşağıdaki üç biti hizmet bilgileriyle doldurabilir. HedgeTerminal, talimat tanımlayıcısının aksine, talimat tanımlayıcılarını bu alanda tersten depolar. İlk önce daha yüksek rakamları ve daha sonra Şekil 44'te mavi bir ok SI yönü (servis bilgisi) ile gösterilen daha küçük rakamları doldurur. Bu depolama şekli, hizmet bilgisi ve talimat tanımlayıcı aralıklarının yarı yolda buluşmasını sağlar. Gerekli olması durumunda bileşimleri değiştirilebilir. Hizmet bilgilerinin boyutu, talimat tanımlayıcısının saklanması için rakamlar aracılığıyla artırılabilir. Bu bilgi, kapanış talimatının tipini tanımlamayı sağlar.

Burada MetaTrader 4'teki etkin talimatlar TakeProfit veya StopLoss tarafından kapatılabilir. Bunlar, talimatların sabit kar veya zararla kapatıldığı belirli fiyat seviyeleridir. MetaTrader 5'te TakeProfit ve StopLoss sadece net pozisyonlara uygulanabilir ve ikili talimatlar için uygun değildir. Yalnızca sıradan bekleyen talimatlar, TakeProfit ve StopLoss talimatlarının rolünü oynayabilir.

HedgeTerminal'de bu tür talimata, bunun bir TakeProfit veya StopLoss talimatı olup olmadığını belirten özel tanımlayıcılar atanır. Sihirli sayı alım satım sunucusunda depolandığından, hizmet bilgileri alım satım hesabına erişimi olan tüm yatırımcılar için kullanılabilir hale gelir. Bu şekilde, farklı bilgisayarlarda çalışan birkaç HedgeTerminal kopyası bile, tetiklenen talimat türü hakkında bilgi sahibi olur ve kapalı pozisyonlara ilişkin bilgileri doğru bir şekilde görüntüler.

Talimat tanımlayıcısı hakkında referans verilen bilgiler, 0 ile 59 basamak aralığında saklanır. Bu, mavi bir ok yön sırası kimliği ile gösterilen sağdan sola rakamlar kullanılarak standart yönde saklanır. Tahsis edilen depolama boyutunu değerlendirmek için bir yıl boyunca Moskova Borsası'na gönderilen tüm talimatların aralığını saklamak için gereken miktarı hesaplayalım.

Komisyoncumun 13.06.2013 tarihli raporu, 10 789 965 471 tanımlayıcısına sahip bir talimat içeriyor. Bu sayı, 64 basamaktan 33,3297 bit  (log2(10 789 965 471)) veya 34 kullanır. 25.09.2014 tarihine kadar verilen talimatlardan birinin tanımlayıcısı 13 400 775 716'dır. Bu sayı 33,6416 bit kullanır. Bir yıl ve dört ayda 2,6 milyar talimat verilmesine rağmen, tanımlayıcının boyutu yalnızca 0,31263 bit arttı; bu bir talimattan bile daha azdır. Talimat tanımlayıcısının boyutu 59. basamağa gelmeden Güneş'in öleceğini iddia etmiyorum, ancak bunun birkaç milyon yıldan daha erken olmayacağından oldukça eminim.

HedgeTerminal bir bağlantıyı açık olarak saklamaz. Bunun için OrderMagic alanını şifreler ve üst basamağa dokunulmaz. HedgeTerminal kodu, değişken uzunluklu anahtar üzerinde çalışan özel şifreleme işlevi tarafından uygulanan rakamların tersine çevrilebilir yeniden düzenlenmesini temel alır. Böyle bir şifrelemeden sonra servis bilgileri ve talimat tanımlayıcı birbirine karışır ve özel bir maske altında gizlenir, böylece çıkışta eşit bir birler ve sıfırlar dağılımını temsil eder. Şifreleme iki nedenden dolayı gerçekleşir. Her şeyden önce, rakamların yeniden düzenlenmesi, bağlantıların ve talimat tanımlayıcılarının çakışma olasılığını azaltır ve ardından HedgeTerminal'in dahili algoritmalarını harici kasıtlı veya rastgele etkilerden korur.

Bu prosedür kesinlikle güvenlidir, tersine çevrilebilir ve çarpışmalara meyilli değildir. Bu, bir yatırımcının Expert Advisor'ları kullanarak gerçekleştirdiği eylemlere bakılmaksızın, dahili HedgeTerminal algoritmalarının güvenilirliğini etkilemediğini garanti eder. Bu çok önemlidir, çünkü gerçek bir durumda bu bağlantıları yönetmek karmaşık özel algoritmalar olmadan imkansızdır.

Aynı zamanda, sadece bağlantıları kontrol etmekle yetinirsek, iş mantığının başarısız olması kaçınılmazdır. Aşağıdaki bölümler, bu algoritmaların ayrıntılı açıklamasını yapar. Bu hatadan kaçınmak için şifreleme de kullanılır. Bu kısıtlamanın tersi, HedgeTerminal pozisyonlarını yönetmenin bunu kullanmaktan başka bir yolu olmamasıdır.


3.6. HedgeTerminal ile Çalışmadaki Sınırlamalar

Bağlantı depolama yapısının özelliği, HedgeTerminal'in talimatlara bağlantıları 9223372036854775808 ile 18446744073709551615 arasındaki sayıları kullanarak eşit olarak depolamasını ister. 64 basamaklı bir alan, uzun türün işaretiyle bir sayı olarak temsil edilirse bunlar negatif değerler olur. Burada HedgeTerminal ile çalışmak için üç sınırlama ortaya çıkar.

İlk sınırlama, HedgeTerminal ile çalışan alım satım robotuyla ilgilidir. Bu mutlak değildir ve bir öneri olarak kabul edilebilir:

HedgeTerminal ile çalışan bir alım satım robotu veya Expert Advisor, 9223372036854775808 değerini aşmayan bir tanımlayıcıya (Expert'in sihirli numarası) sahip olmalıdır.

Gerçekte, 5-6 haneyi aşan tanımlayıcılar çok nadiren kullanıldığından, olağan Expert Advisor'lar bu kısıtlamayla asla karşılaşmaz. Bir Expert için en yaygın tanımlayıcı "12345" veya benzeri bir şeydir). Bu kısıtlama, sihirli numaralarında diğer talimatlara bağlantılar gibi hizmet bilgilerini depolayan robotlar için geçerli olabilir. HedgeTerminal, bu tür Expert'lerle uyumlu değildir ve onlarla birlikte çalışamaz.

Herhangi bir nedenle belirtilen limit aşılırsa sıfır çarpışma olasılığı görünür. İkincisi çok küçüktür, çünkü böyle bir aralıkta tesadüf çok olası değildir. Bu durumda bile HedgeTerminal, algoritmalarını kullanarak bu çarpışmayı çözer. Bu, bir bağlantının şifresini çözmek, bu bağlantıyı mevcut talimatlarla karşılaştırmak ve bu talimatın başka bir talimatla eşleşmeye uygunluğunu analiz etmek ekstra zaman alacağından işini yavaşlatır. Bu nedenle, bundan kaçınmak için negatif işaretli uzun sayılar kullanmamak daha iyidir.

İkinci sınırlama zordur, ancak yalnızca komisyoncu ve HedgeTerminal'in bağlanacağı borsa ile ilgilidir:

Talimat tanımlayıcıları 0 ile 2^59 arasındaki veya 576 460 752 303 423 488 arasındaki sayıları kullanmalıdır.

Bu, talimat tanımlayıcılarını depolamak için 64 yerine yalnızca 59 basamak kullanıldığından açıktır. Komisyoncunuz bu değerden daha büyük talimat tanımlayıcıları kullanıyorsa işinizde Hedge Terminal kullanamazsınız.

Üçüncü sınırlama, pozisyon gösteriminin yolundan kaynaklanmaktadır:

HedgeTerminal, başka hiçbir pozisyon yönetim sistemiyle uyumlu değildir. Bu, pozisyonları kapatma işlevine sahip harici alım satım panelleri ile uyumlu değildir ve bunlarla birlikte kullanılamaz.


3.7. Eşleştirme Talimatlarının Mekanizması ve Eylemlerin Belirlenmesi

HedgeTerminal'de pozisyon gösterimini ve bağlantılarının yapısını ayrıntılı olarak inceledik. Bağlı talimatları yöneten algoritma tanımını ele almayacağız. Örneğin bir dizi başka talimattan seçilen iki talimatımız var ve bunları birbirine bağlamamız gerekiyor. Talimata bir bağlantının benzersiz olması ve yalnızca bir talimata sahip olması gerektiği kuralına güvenmezsek tüm olası durumlar üç gruba ayrılabilir:

  1. Talimat, başka bir talimat tarafından referans alınmaz;
  2. Talimat, bir talimat tarafından referans alınmaz;
  3. Talimat, iki veya daha fazla talimat tarafından referans alınmaz.

İlk grup zorluklara neden olmaz ve böyle bir talimat açık pozisyon olarak kabul edilir. Bir çift talimat kapalı bir pozisyon oluşturduğundan, üçüncü grupta da işler çok açık. Üçüncü gruptaki vakalarla ne yapabiliriz? Bir talimat başka iki talimat tarafından referans alınırsa ne olur? Bunlardan hangisinin birincisi ile bağlantılı olması gerekiyor ve ikinci talimata ne olacak? Eşleştirme sürecini sıralı olarak sunarsak, bu soruyu yanıtlamak kolaydır:

  1. Başka bir talimata bağlantı içermeyen bir talimatla karşılaşıyoruz. Etkin talimatlar (pozisyonlar) bölümüne aktarılır ve bundan sonra talimatlar üzerinden iterasyon devam eder;
  2. Daha sonra ilk talimata referansı olan başka bir talimata rastlıyoruz. Daha sonra referans verilen talimat aktif talimatlar bölümünde aranır. Referans verilen talimat bu bölümde ise mevcut talimat ile eşleştirilir ve her ikisi de tarihi pozisyonlar şeklinde tamamlanmış işlemler bölümüne aktarılır;
  3. İterasyona devam ederken, 1. maddede açıklanan talimata bir bağlantı içeren bir talimata daha rastlıyoruz. Daha sonra referans verilen talimat aktif talimatlar bölümünde aranır. Aranan talimatlar bu bölümden tamamlanmış talimatlar bölümüne taşındığından bu sefer arama başarısız olur. Mevcut talimatın atıfta bulunduğu talimat bulunamadığından, bağlantısına rağmen mevcut talimat etkin talimattır ve etkin pozisyonların olduğu bölüme taşınır.

Talimat tanımlayıcıları tutarlı bir şekilde doldurulduğundan ve listeleri zamana göre sıralandığından, sıralı iterasyonları gerçekleştirilebilir. Bu nedenle, başlatma talimatı, aynı bağlantıları içeren diğer talimatların sayısına bakılmaksızın, kendisine bir bağlantı içeren ilk talimat ile eşleştirilir. Başlatma talimatına bağlantılar içeren diğer tüm talimatlar, aktif başlatma pozisyonları listesine dahil edilir.

Daha önce de belirttiğimiz gibi, böyle bir iterasyonu yürüten algoritma tamamen deterministik ve tutarlı olmalıdır. HedgeTerminal, çalışmalarında böyle bir iterasyon algoritması kullanır. Aslında, bu sadece bir iterasyon değil, ilk yatırım anından itibaren gerçekleştirilen tüm alım satım işlemlerinin tekrarıdır. Etkili bir şekilde, HedgeTerminal, her lansmanda, en baştan şu ana kadar tutarlı bir şekilde bir alım satım işlemleri zinciri oluşturur. Bu sayede, mevcut pozisyon gösterimi, lansman anında geriye dönük alım satımın sonucudur.

Geçmişteki tüm talimatlar üzerinde iterasyon ardışık olarak gerçekleştirildiğinden, alım satım işlemlerinin de sırayla yapılması gerekir. Bu, HedgeTerminal'de talimat yürütmenin yolunu belirler. Örneğin StopLoss tarafından korunan etkin bir çift yönlü HedgeTerminal pozisyonunun kapatılması gerekiyor. Böyle bir çift yönlü pozisyonun esas olarak iki talimattan oluştuğunu biliyoruz: etkin bir pozisyon başlatan gerçekleştirilen talimat ve bir zararı durdur-talimatı olarak hareket eden bekleyen bir al-dur veya sat-dur talimatı. Böyle bir pozisyonu kapatmak için bekleyen talimatın silinmesi ve aktif çift yönlü pozisyonun aynı hacimde bir karşı talimat ile kapatılması gerekir. Bu nedenle, iki alım satım eylemi gerçekleştirilmelidir. HedgeTerminal, tüm alım satım talimatlarını eşzamansız olarak yürütür.

Bu şekilde talimatlar aynı anda yürütülebilir, yani ilk talimat bekleyen talimatı iptal etmek için ve ikinci talimat, pozisyonunuzu kapatacak olan karşı talimatı gerçekleştirmek için verilebilir. Ancak bu, işlemlerin belirlenesini bozar ve HedgeTerminal bunu gerçekleştiremez. Herhangi bir nedenle, bekleyen talimat iptal edilmez ve karşı talimat tarafından pozisyon kapatılmazsa pozisyon kapanacağı ve StopLoss'u devam edeceği için belirsizlik oluşur. Sonunda, StopLoss'u uygulayan talimat, yeni bir çift yönlü pozisyonu tetikleyebilir ve oluşturabilir. Bu gerçekleşmemelidir. Bu nedenle HedgeTerminal StopLoss'u iptal eder ve başarılı bir iptalden sonra bir karşı talimat verir. İkinci adımda karşı talimatın gerçekleşmeme veya kısmen yerine getirilme olasılığı vardır. Ancak bu durumda, kısmen uygulanan bir karşı talimat bile aktif pozisyonun bir kısmını kapatacağından belirsizlik ortadan kalkar. Bu sıradan bir durumdur.

HedgeTerminal tarafından uygulanan daha karmaşık bir işlem dizisi vardır. Bir öncekine benzer bir örnek kullanalım ama bu sefer pozisyonun bir kısmını kapatacağız. Bu, HedgeTerminal'in üç işlemi gerçekleştirmesi gerekeceği anlamına gelir:

  1. StopLoss talimatı olarak işlev gören bekleyen talimatı silin;
  2. Çift yönlü pozisyonun hacminin bir kısmını kapatan karşı talimatı uygulayın;
  3. Aktif pozisyonun kalan kısmını koruyan yeni bir hacme sahip yeni bir StopLoss yerleştirin.

Tüm bu işlemler, işlemlerin belirlenmesini bozmamak için tutarlı bir şekilde yürütülür. Beklenebilecek doğal şey, eşzamanlı talimat verme nedeniyle talimat yürütme hızının artmasıdır, ancak bu durumda alım satım işlemlerinin sıralı bir şekilde yürütülmesi garanti edilemez ve belirsizlikler mümkündür. Sıralı bir talimat işleme, herhangi bir belirsizlik anlamına gelmez.


3.8. Yatırımları Bölme ve Birleştirme - Talimat Aritmetiğinin Temeli

Sıralı bir talimat işleme yeterli değildir. Burada iki şeye dikkat edilmelidir:

  • Bir talimat birden fazla yatırım içerebilir. Bu yatırımların sayısı rastgele olabilir;
  • Kısmi bir talimat yürütmeyi ve bir kapatma talimatı hacminin başlatma talimatının hacmine eşit olmayabileceği daha yaygın bir durumu hesaba katmak da önemlidir;

Talimat, aynı anda birkaç işlem tarafından gerçekleştirilebilir ve kısmen gerçekleştirilebilir. Bunun neden olabileceğini bilmiyorsanız lütfen "Moskova Borsası Türev Piyasası Örneği ile Döviz Fiyatlandırmasının İlkeleri" döviz fiyatlandırmasının açıklamasına ayrılmış makaleye göz atın. "Kapatma talimatının hacmi neden açma talimatının hacmine eşit olamaz?" Sorusu bir cevap gerektirir. Bu durumda ne yapabiliriz?

Aslında, etkin bir pozisyonun kısmi kapanma olasılığını varsayarsak hacimleri eşit olmayabilir. 50 kontrat hacimli etkin bir pozisyon açar ve pozisyonların bir kısmını 20 kontrat hacimli karşı talimat ile kapatırsak etkin pozisyon ikiye bölünür. İlk kısım karşı talimat ile 20 talimat hacmili yeni bir geçmiş pozisyon oluşturur ve ikinci kısım, hacmi azalsa da açılır ve 30 kontrat olur.

Bu kısmi pozisyon kapatma algoritması HedgeTerminal'de uygulanmaktadır. HedgeTerminal panelinin "Hacim" alanına yeni bir hacim değeri girilirse kısmi kapanma gerçekleşir. "Geçmiş" klasöründe yeni bir pozisyon görünür ve mevcut pozisyonun hacmi yeni değere eşit olur. HedgeTerminal, kapatma talimatının hacmi, başlatma talimatının hacminden büyük olduğunda bile durumu işleyebilir! Böyle bir durum, HedgeTerminal herhangi bir nedenle kapatma talimatının yanlış bir hacmini yerleştirirse veya komisyoncu, başlatma talimatına dahil edilen birkaç işlemi tersten iptal ederse ve bu, yürütülen hacmi daha küçük bir işlemle değiştirerek gerçekleşebilir.

Hacimlerdeki potansiyel farkı hesaba katmak için, talimatla ilgili tüm yatırımların toplam hacminin hesaplanmasına dayalı evrensel bir algoritma kullanmak gerekir. Bu durumda, her şeyi belirleyen talimatlar değil, yatırımlardır. Bir talimatın hacmi, yatırımlarının hacmidir. Gerçekleştirilen bir talimatın fiyatı, yatırımlarının ortalama fiyatıdır.

HedgeTerminal, talimatları birbirine bağlayan veya bölen algoritmayı kullanır. Yatırımların toplanması ve çıkarılmasına dayalıdır. Çalışması, başlatma ve kapatma talimatı arasındaki yatırımları aşağıdaki tarihsel bir pozisyon oluşumuyla birleştirmeye dayalıdır.

Bu algoritmanın nasıl çalıştığını anlamak amacıyla, geçmiş bir pozisyon oluşturmak için eşleştirilmesi gereken iki talimat olduğunu varsayalım. Her iki talimat da aynı sayıda yatırıma sahiptir ve işlem hacimleri aynıdır. Yatırım sayısı basit olması için üç haneli olacaktır:

Talimat #1 (talimat içinde)Hacim (10/10)
yatırım #2833
yatırım #2882
yatırım #2945

Tablo 3. Talimat №1 ve yatırımları


Talimat #2 (talimat dışında)Hacim (10/10)
yatırım #8711
yatırım #8823
yatırım #9216

Tablo 4. Talimat №2 ve yatırımları

Hacimlerle olan yatırımları bir araya getirelim:

Tablo 5. Talimatları bir araya getirme

Tablo 5. Talimatları bir araya getirme

Her sütundan son iki talimat seçin: №294 ve №921. Genelde birbirleriyle aynı seviyede olamazlar (bu örnekte olduğu gibi).

En düşük hacimli bir yatırım seçin. Bu, 5 hacimli yatırım №294'tür. Zıt yatırım №921'i ikiye bölün. İlk yatırım, yatırım №294 (5 kontrat) işlem hacmine eşittir ve ikinci yatırım, 1 kontratlık kalan hacmi (6 kontrat – 5 kontrat = 1 kontrat) içerir. 5 hacimli yatırım #294›ü benzer hacimli №921 hacminin ilk kısmıyla birleştirin:

Tablo 6. Hacimlerin çıkarılması

Tablo 6. Hacimlerin çıkarılması

Birleştirilen kısmı, geçmiş pozisyonun yatırımlarını içeren yeni bir sütuna aktarın.

Bu, yeşil ile vurgulanmıştır. Etkin pozisyonun ilk sütununda hacim 1 ile yatırım #921'in kalan kısmını bırakın. Bu, gri ile vurgulanmıştır:

Tablo 7. Yatırımları ayırma ve devretme

Tablo 7. Yatırımları ayırma ve devretme

İki talimatın yatırımlarını birleştirip geçmiş pozisyona taşımanın ilk adımını attık. Eylemlerin sırasını kısa bir biçimde yansıtalım:

Tablo 8. Yatırımları bölme ve devretme. Adım 1

Tablo 8. Yatırımları bölme ve devretme. Adım 1

Yatırım №294'ün hacmi, tam olarak geçmiş pozisyonlar bölümüne taşındı. Yatırım tamamen yok edildi. Böylece yatırım bölünmüş oldu ve geçmiş talimatlar bölümüne taşındı. Bu nedenle, bir sonraki adımda 2 hacimli aşağıdaki yatırım №288'e geçebiliriz. Yatırım №921 hala mevcut ve hacmi, yatırımın kalan ikinci kısmına eşittir. Bir sonraki adımda bu hacim, yatırım №288 hacmi ile etkileşime girer.

İkinci adımda, yatırım №288 ve №921 prosedürünü tekrarlayın. Bu sefer, yatırım №921'in kalan hacmi (1 kontrat), geçmiş talimatlar sütununa ulaştıktan sonra yatırım №288 hacmi ile birleştirilir. Yatırım №288 kalan hacmi, 1 kontrata eşittir ve etkin pozisyon sütununda kalır:

 Tablo 9. Yatırımları bölme ve devretme. Adım 1-2

Tablo 9. Yatırımları bölme ve devretme. Adım 1-2

Yatırım №288 ve №882 ile aaynı işlemleri tekrarlayın:

Tablo 10. Yatırımları bölme ve devretme. Adım 1-3

Tablo 10. Yatırımları bölme ve devretme. Adım 1-3

IV ve V adımlarını aynı şekilde yürütün:

Tablo 11. Yatırımları bölme ve devretme. Adım 1-5

Tablo 11. Yatırımları bölme ve devretme. Adım 1-5

Adım V'den sonra, kapatma talimatının hacmi, açma talimatı yatırımlarının hacmi ile kesinlikle aynı olur. Geçmiş pozisyonlar sütununa taşınan yatırımlar, eksiksiz bir geçmiş işlem oluşturur. Etkin pozisyonun kalan yatırımları etkin bir pozisyon oluşturur. Bu durumda, etkin pozisyonun sütununda hiçbir yatırım kalmadı. Bu, böyle bir birleşmeden sonra etkin pozisyonun ortadan kalkacağı anlamına gelir. Yeni bir geçmiş pozisyon görünür ve etkin pozisyonun tüm yatırımlarını içerir.

Yatırımlar yapıldıktan sonra, birçoğu parçalara ayrılır ve birkaç sırayı işgal eder. Bunu önlemek için, yatırımları birleştirme/bölme algoritmasına yatırım toplama seçeneği eklenebilir. Aynı tanımlayıcılara sahip yatırımların hacmini basitçe şu şekilde birleştirin:

Tablo 12. Yatırımları tek düzeyde birleştirme

Tablo 12. Yatırımları tek bir düzeyde birleştirme

Birleştirmeden sonra, yatırımların sayısı ve hacimleri, ilk yatırımlar ve hacimlerle tamamen eşleşir. Bu, yalnızca hacimleri başlangıçta eşleştiği için olur. Hacimleri farklı olsaydı, birleştirme prosedüründen sonra, talimatların farklı hacimleri olurdu.

Bu algoritma, başlatma ve kapatma talimatı için aynı sayıda yatırım gerektirmediğinden evrenseldir. Bakacağımız bu özelliğe dayalı başka bir örnek daha var:

Tablo 13. Farklı sayıda yatırıma sahip talimatları birleştirme

Tablo 13. Farklı sayıda yatırıma sahip talimatları birleştirme

Gördüğümüz gibi, talimatları tek bir geçmiş pozisyonda birleştirmek başarılı oldu. Farklı sayıda yatırıma rağmen, hacimleri tekrar eşleşti.

Şimdi, kapatma talimatının (12 kontrat) toplam hacminin, başlatma talimatının (22 kontrat) yatırımların hacminden daha az olduğunu hayal edin. Bu durumda birleşme nasıl olur?

Tablo 14. Farklı hacimlerdeki talimatları birleştirme

Tablo 14. Farklı hacimlerdeki talimatları birleştirme

Gördüğümüz gibi, ikinci adımda, kapatma talimatının yatırımlarının hacmi sıfıra eşit iken başlatma talimatı, 4 hacimli yatırım №321 ve 6 hacimli yatırım №344 içerir. Etkin talimat yatırımlarının fazlası var. Bu fazlalık, etkin bir çift yönlü pozisyon olarak var olacaktır. Bununla birlikte, yeşil sütuna taşınan yatırımlarla ilgili yeni bir geçmiş pozisyon mevcut. 12 sözleşmenin başlangıç ve çıkış hacimleri tekrar eşleşti.

Kapatma talimatı hacminin başlatma seviyesinden büyük olması durumunda, bu sefer kapatma talimatı tarafında olmasına rağmen, bir fazlalık da vardır:

Tablo 15. Farklı hacimlerdeki talimatları birleştirme

Tablo 15. Farklı hacimlerdeki talimatları birleştirme

Gördüğümüz gibi, 4 hacimli başlatma sırası ve 6 hacimli kapatma sırası iki pozisyon oluşturur. İlki, 4 hacimli geçmiş bir pozisyondur ve ilk talimatın yatırım №625'i ve kapatma talimatının №719, №720 yatırımları ile ilgilenir. İkinci pozisyon, bu talimatların eşleştirme yatırımlarının fazlasıdır. Bu, 2 hacimli yatırım №719'u içerir. Bu yatırım ve talimat, HedgeTerminal panelinin «Etkin" sekmesinde etkin bir pozisyon alır.

Yatırımlar ve talimatlar, algoritma tarafından geçmiş ve aktif pozisyonlara bölünebilir. Hacimler farklı olabilir. Burada, algoritmanın eşit giriş ve çıkış hacimleriyle geçmiş bir pozisyon oluşturarak başlatma ve kapatma talimatlarının hacimlerini bir araya getirmesine izin verilir. Bu hacimler eşit olmadığında durumun imkansızlığını ve dolayısıyla pozisyon asimetrisine neden olan pozisyon gösterimi hatalarını garanti eder.

İlk örnekte komisyoncunun kapatma talimatına dahil olan bir yatırımı iptal ettiğini varsayalım:

Tablo 16. Geçmişten bir yatırım silme simülasyonu

Tablo 16. Geçmişten bir yatırım silme simülasyonu

6 kontratlı hacmi ile yeni bir net pozisyon. İptal edilen yatırımların hacmine eşit olur. Bu durumda Hedge Terminal algoritmasının nasıl çalışacağını görelim:

Tablo 17. Temsil bütünlüğünü geri yükleme

Tablo 17. Temsil bütünlüğünü geri yükleme

Gördüğümüz gibi, ikinci adımda 6 kontrat fazlası (3+2+1) var. Bu fazlalık etkin pozisyona dönüşür ve böylece çift yönlü pozisyonun hacmi ve yönü net pozisyonun hacmine ve yönüne eşit olur.

Özetlemek gerekirse, yatırımları birleştirme algoritmasının, aşırı sınırsız yatırımlar nedeniyle geçmiş pozisyonlardaki başlatma ve kapatma talimatlarının hacimlerinin eşitliğini garanti ettiğini söyleyebiliriz. Bu yatırım fazlası, MetaTrader 5'teki net pozisyonu HedgeTerminal'deki tüm etkin pozisyonların net pozisyonuna eşit yapan etkin bir çift yönlü pozisyon oluşturur.

Bu mekanizma hem geriye dönük hem de gerçek zamanlı modda çalışır ve bu, komisyoncunun alım satım işlemlerini iptal etme eyleminden bağımsız olarak MetaTrader 5'teki net pozisyonla bile Hedge Terminal'deki net pozisyonları oluşturacağı anlamına gelir. Net pozisyon değişikliği ve yatırım iptali kombinasyonları, terminalin net pozisyonu ile HedgeTerminal'in net pozisyonu arasında bir asimetri yaratmadığı için oluşabilir.

Kısmi pozisyon kapatma mekanizması, bu algoritmanın farklı hacimleri bir araya getirme yeteneğine dayalıdır. Bu algoritma, HedgeTerminal'in hiçbir ayar gerektirmeden kendi kendini uyarlayan bir sistem olarak kararlı çalışmasını sağlayan en önemli parçalarından biridir.


3.9. Talimat ve Yatırım Sanallaştırma

HedgeTerminal'deki her talimat ve yatırım, ilgili tanımlayıcıya sahip gerçek bir prototipe sahiptir. Bununla birlikte, HedgeTerminal açısından bir talimat, etkin bir pozisyon alabilir ve aynı zamanda geçmiş bir pozisyonun parçası olabilir. MetaTrader 5'teki yatırımlar ve talimatlar bölünmez varlıklardır. Platformdaki bir talimat, beklemede veya uygulanabilir. Bir yatırımın ayrıca sabit bir hacmi vardır ve her zaman uygulanan bir işlemdir.

HedgeTerminal'de aynı talimatlar ve yatırımlar farklı çift yönlü pozisyonlarda bulunabilir. Aynı yatırım veya düzen, etkin ve geçmiş bir pozisyon oluşturabilir. Başka bir deyişle, HedgeTerminal'deki talimatlar ve yatırımlar birkaç sanal yatırım ve talimata bölünmüştür. Bu veri gösterimi, MetaTrader 5'teki veri gösteriminden büyük ölçüde farklıdır. Bununla birlikte, bu temsil esnek olmayı ve alım satım bilgilerinin geriye dönük değişikliklerine uyum sağlamayı ve talimatları ve yatırımları bir araya getirmeyi sağlar.


3.10. Talimatları Gizleme Mekanizması

HedgeTerminal kurulumunu anlatan bölümde talimat gizleme mekanizmasından bahsetmiştik. HedgeTerminal bazı talimatları görmezden gelebilir. Bir talimat veya yatırımın HedgeTerminal için mevcut olmasını durdurmak üzere, tanımlayıcısını belirtilen ExcludeOrders.xml dosyasına girmek yeterlidir.

Bir sembolde birden fazla satış veya satın alma talimatının olduğunu varsayalım. Toplam satış talimatları hacmi, satın alma talimatlarının toplam hacmine eşittir. Bu şekilde, kaç tane talimatımız olursa olsun, bunların toplam pozisyonları sıfıra eşittir. Bu talimatların tanımlayıcıları ExcludeOrders.xml dosyasında değilse HedgeTerminal bunların her birini iki yönlü pozisyon olarak görüntüler. Ancak toplam pozisyonu sıfır olacaktır. Bu nedenle, MetaTrader 5'te bir net pozisyon sıfırsa bu talimat setinin net pozisyona katkısı basitçe göz ardı edilebilir.

Şimdi, t anında S sembolünde sıfır net pozisyonumuz olduğunu ve bu zamana kadar bu sembol üzerinde bir dizi N talimatının uygulandığını varsayalım. Bu sembolde pozisyon olmadığı için bir dizi N talimatının toplam hacmi önemsizdir. Aslında talimat sayısı ve hacmi önemsizdir çünkü pozisyon olmadığı için bu talimatlar toplam net pozisyona katkıda bulunmaz. Bu, bu tür talimatların basitçe göz ardı edilebileceği ve onları çift yönlü pozisyonlar olarak temsil etmeye gerek olmadığı anlamına gelir.

Bu, HedgeTerminal'in kurulum anında kullandığı mekanizmanın ta kendisidir. t kurulum anında net pozisyon yoksa HedgeTerminal istisna listesine N talimatı setini ekler. Net pozisyon olmadığı için toplam hacimleri ve sayıları önemsizdir. HedgeTerminal kurulumu anında bir net pozisyon varsa net pozisyon kapatılana kadar kurulmayacaktır. Kurulumdan sonra yeni talimatlar net pozisyonun durumunu değiştirir. Ancak bu durum, HedgeTerminal'deki iki yönlü pozisyonların net hacmi ile senkronize edilir.

Görünüşe göre, HedgeTerminal sırasında yürütülen talimatları istisnalar listesine koymadan kurtulabiliyorduk. Aynı zamanda, kurulum sırasında çok fazla talimat olabilir ve HedgeTerminal açısından hepsi çift yönlü pozisyonlara dönüşebilir ve toplam hacim kabinleri MetaTrader 5'teki net hacimden farklı olabilir.

Talimatları gizleme mekanizması, hesap geçmişinin bozulmasına karşı etkili olabilir. Sistem bu şekilde çalışır. Bir talimat geçmişi olduğunu varsayalım. Bu hesapta HedgeTerminal başlatıldığında, tüm talimatları yineleyecek ve bunlara dayalı olarak çift yönlü pozisyon oluşturacaktır. Tüm talimatlar açılış anından itibaren mevcutsa ve bu talimatlarla ilgili veriler bozulmamışsa, bu talimatların net pozisyonu MetaTrader 5'teki net pozisyona karşılık gelecektir. Görünüşe bakılırsa, HedgeTerminal'deki net pozisyon bu talimatların toplamına eşit olacak. Bu, aşağıdaki diyagramda gösterilmiştir:

Şek. 45 İntegral geçmişi diyagramı

Şek. 45. İntegral geçmişi diyagramı

Geçmişin bir kısmı eksik olabilir veya talimatlarla ilgili bilgiler yanlış olabilir.

Yalnızca bir talimatın eksik veya sadece birkaç talimatın olması önemli değildir ve hesap geçmişinin başındaki veya ortasındaki bilgilerin eksik olmasıyla da ilgili değildir. Böyle bir hesapta çalışan HedgeTerminal'deki net pozisyon, mevcut tüm talimatların net pozisyonuna eşittir. Talimatların net pozisyonu, geçmişin eksik kısmı nedeniyle terminalin fiili net pozisyonuna eşit olmayacaktır. Bu durum B diyagramında sunulmuştur:

Şek. 46 Kısmen bozuk geçmiş

Şek. 46. Kısmen bozuk geçmiş

HedgeTerminal'deki net bir pozisyonu MetaTrader 5'teki gerçek net pozisyonla senkronize etmek için, hangi talimatların kaybolduğunu veya bozulduğunu bilmemize gerek yoktur. Tek ihtiyacımız olan bu net pozisyonlar arasındaki farkı hesaplamaktır. Yukarıdaki örnekte, MetaTrader 5 terminalinde 5 kontrat hacmi ile satın almak için bir pozisyon açıktır. HedgeTerminal'de bu, 8 sözleşme için uzun bir toplam pozisyona karşılık gelecektir. Bu iki pozisyon arasındaki fark, satın alınan 3 sözleşme olacaktır çünkü 8 AL – 5 AL = 3 AL.

Sözleşme farkı hesaplandıktan sonra, farka eşit hacimde satın alma veya satış talimatı verilmesi gerekir. Örneğimizde, 3 sözleşme satın alma talimatı verilmesi gerekmektedir. Talimat gerçekleştiğinde, HedgeTerminal bunu aktif pozisyonlar sekmesinde gösterecek ve toplam net pozisyonu 3 sözleşme artacak ve 11 alış sözleşmesine eşit olacaktır.

MetaTrader 5'teki pozisyon da artacak ve 8 sözleşme yapacaktır. Bu talimatın tanımlayıcısı ExcludeOrders.xml listesine girilmeli ve ardından terminal yeniden başlatılmalıdır. Yani talimatımızın tanımlayıcısı 101162513'e eşitse, dosyaya aşağıdaki etiketin yazılması gerekir:

<Orders-Exclude>
        ...
        <Order AccountID="10052699" ID="101162513"></Order>
</Orders-Exclude>

HedgeTerminal'i yeniden başlattıktan sonra bu iki yönlü pozisyon kaybolacaktır. Bu şekilde MetaTrader 5'teki net pozisyon HedgeTerminal'deki net pozisyonla eşleşecek ve satın almak için 5 sözleşme yapacaktır. Açıklanan eylem sıralaması aşağıdaki diyagramda sunulmuştur:

Şek. 47. Veri bütünlüğünü geri yükleme diyagramı

Şek. 47. Veri bütünlüğünü geri yükleme diyagramı

Kaybedilen pozisyonun finansal sonucu HedgeTerminal istatistiklerine kaydedilmeyecektir. Maalesef, alım satım istatistiklerinde gizli çift yönlü pozisyonlar yer almıyor.

Gerçekte, geçmişin bir bölümünün kullanılamadığı veya bozuk olduğu bir durum pek olası değildir. MetaTrader 5 kullanıcılarının çoğu, bunu kullanmaları gerektiğinde asla bir durumla karşılaşmayacak olsalar da, böyle bir mekanizma mevcut olmalıdır. Sonuçta, HedgeTerminal'in program hataları olasılığı hariç tutulmaz. Bu durumda bile, bu hataları çözmek için güvenilir bir araç olmalıdır.


3.11. Adaptasyon Mekanizmaları

HedgeTerminal'in MetaTrader 5'in net ortamında iki yönlü pozisyonları temsil etmesine izin veren mekanizmaları düşündük. Bu mekanizmalardan üç tanesi vardır:

  1. Yatırımların sıralı iterasyonu;
  2. Yatırımları bölme ve bir araya getirme mekanizması;
  3. Talimat gizleme mekanizması.

Bu mekanizmaların her biri kendi sorunlarını ele alır ve kendi seviyelerinde belirsizlik ve hatalardan kaçınma sağlar. Bu sorunları ve çözümlerini masaya yatıralım. İlk sütun, sorunları ve olası ciltleme hatalarını, ikinci sütun ise bunları çözen mekanizmaları içerir:

Çift yönlü alım satım organizasyonunda ortaya çıkan sorunlar, hatalar, belirsizliklerHata düzeltme mekanizmaları
Açma talimatlarına bağlantılardaki hatalar; Bağlantı çarpışması; Expert'lerde uzun sihirli sayılar; talimatları geçmişten silme; Alım satım işlemi yürütme hataları.Talimat üzerinde sıralı iterasyon. İşlemlerin belirlenmesi.
Hacim hataları; Farklı hacimlerde talimat eşleştirme; kısmi talimat yürütme; yatırımları geçmişten silme; Daha küçük bir hacmi daha büyük bir hacimle kaplama.Yatırımları bölme ve eşleştirme mekanizması.
HedgeTerminal'i çok sayıda yürütülen talimatın bulunduğu hesaba yüklemek; Bozuk tarih; HedgeTerminal'in talimatlarla ilgili hataları.Talimat gizleme mekanizması.

Tablo 18. Olası hatalar ve bunların ortadan kaldırılması mekanizmaları

Her üç mekanizma da depolama bağlantıları sistemiyle birlikte istikrarlı veri gösterimi sağlar. Esasen, bu mekanizmalar tüm olası öngörülemeyen arıza durumlarını kapsar ve HedgeTerminal'deki net pozisyonun MetaTrader 5'teki net pozisyonla eşleşmesini garanti eder.


3.12. Performans ve Bellek Kullanımı

HedgeTerminal aslında nesne yönelimli bir uygulamadır. Mimarisinin altında yatan OOP ilkeleri nedeniyle, terminal, depolama için yüksek verimliliğe ve düşük gereksinimlere sahiptir. Kaynak tüketen tek görev, terminali bir grafik üzerinde başlatırken bilgisayar belleğindeki talimatların ve yatırımların geçmişini çıkarmaktır.

Gerekli tüm işlemler hafızaya alındıktan sonra terminal, bu işlem için harcanan süre ve ayrıca hafıza kullanımı hakkında bilgi veren bir mesaj yazdırır. Intel i7 işlemcili bilgisayarda 20.000'den fazla yatırım içeren hesapta HedgeTerminal panelinin başlatılması 30 saniyeden az sürdü ve 118 Mb RAM gerektiriyordu:

2014.11.20 16:26:19.785 hedgeterminalultimate (EURUSD,H1)       We begin. Parsing of history deals (22156) and orders (22237) completed for 28.080 sec. 118MB RAM used.

HedgeTerminalAPI kitaplığı daha da hızlı çalışır ve işlemlerin grafiksel gösterimi gerekmediğinden çok daha az bellek kullanır. Aynı hesaptaki lansmanın sonucu aşağıdadır:

2014.11.20 16:21:46.183 TestHedgeTerminalAPI (EURUSD,H1)        We are begin. Parsing of history deals (22156) and orders (22237) completed for 22.792 sec. 44MB RAM used.

Basit bir hesaplama, bir pozisyonun çıkarılmasının program türüne bağlı olarak 1 ila 1,26 milisaniye sürdüğünü gösterir. Bir işlemin saklanması şunları alır: (22 156 yatırım + 22237 talimat) / 44 Mb = 1 Kb RAM. Bir işlemin ek grafik gösterimini depolamak yaklaşık olarak: (118 Mb – 44 Mb) * 1024 / (22 156 yatırım + 22237 talimat) = 1,71 Kb bellek.

Kod profili, zamanın büyük bir bölümünün talimat analizinin tek bloğu tarafından alındığını gösterir. İkincisinin büyük kısmı sistem işlev çağrısıdır. Gelecekteki sürümlerde bu blok optimize edilir ve bu, açılışta verimliliği %10-15 oranında artırmaya izin verir.


Sonuç

HedgeTerminal görsel paneliyle çalışmanın kilit noktalarını ele aldık. Esnek konfigürasyon olasılığı olan yeni bir panel sınıfı yaratmanın bir örneğiydi.

Şemalar ve spesifikasyonlar, çift yönlü alım satım organizasyon ilkeleri hakkında derinlemesine bir fikir verdi. Kendi sanallaştırma kitaplıklarınızı oluşturuyorsanız bu makalenin ikinci bölümü böyle bir kitaplık tasarlamanıza yardımcı olacaktır.

Borsa uygulamasının karakteri, işlem ve talimat temsili sürecindeki kilit noktaları çift yönlü pozisyonlar olarak dikkate almayı gerektirir. Bu makale, yatırımların ve talimatların sanallaştırılması olmadan böyle bir temsilin imkansız olduğunu gösterdi. Sanallaştırma, yürütülen yatırımların hacmini "kıran" ve gerçek talimatları bir talimatın birkaç işlemin parçası olabilmesi için klonlayan bir mekanizmadır.

Alım satım ortamıyla yapılan bu manipülasyonlar oldukça cesurdur, ancak sanallaştırmada gereken bilgilerin büyük bir kısmı alım satım sunucusunda depolanır, bu tür gösterimler güvenilir olarak kabul edilebilir.


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

HedgeTerminal API'sini Kullanarak MetaTrader 5'te İki Yönlü Alım Satım ve Pozisyonların Korunması, Bölüm 2 HedgeTerminal API'sini Kullanarak MetaTrader 5'te İki Yönlü Alım Satım ve Pozisyonların Korunması, Bölüm 2
Bu makale, pozisyonların korunmasına yönelik yeni bir yaklaşım açıklar ve MetaTrader 4 ile MetaTrader 5 kullanıcıları arasında gerçekleşen konu hakkındaki tartışmalarda çizgiyi çizer. Birinci bölümün devamıdır: "HedgeTerminal Panelini Kullanarak MetaTrader 5'te İki Yönlü Alım Satım ve Pozisyonların Korunması, Bölüm 1". İkinci bölümde, özel Expert Advisor'ların, uygun pozisyon yönetimi için araçlar sağlayan rahat bir yazılım ortamında çift yönlü alım satım için tasarlanmış özel bir görselleştirme kitaplığı olan HedgeTerminalAPI ile entegrasyonunu tartışıyoruz.
Moskova Borsası Vadeli İşlemler Piyasası Örneği ile Değişim Fiyatlandırma Esasları Moskova Borsası Vadeli İşlemler Piyasası Örneği ile Değişim Fiyatlandırma Esasları
Bu makale, Moskova Borsası Vadeli İşlemler Piyasasının değişim fiyatlandırması teorisini ve takas özelliklerini açıklamaktadır. Bu, türev alım satım işlemlerinde ilk takas deneyimini edinmek isteyen yeni başlayanlar ve merkezi bir takas platformunda alım satım yapmayı düşünen deneyimli forex yatırımcıları için kapsamlı bir makaledir.
MQL5 Cookbook: Hızlı Veri Erişimi için İlişkisel Dizi veya Sözlük Uygulama MQL5 Cookbook: Hızlı Veri Erişimi için İlişkisel Dizi veya Sözlük Uygulama
Bu makale, benzersiz anahtarlarıyla öğelere erişim elde etmeyi sağlayan özel bir algoritmayı açıklar. Herhangi bir temel veri türü anahtar olarak kullanılabilir. Örneğin bir dize veya bir tamsayı değişkeni olarak temsil edilebilir. Bu tür bir veri taşıyıcısına genellikle sözlük veya ilişkisel dizi denir. Problem çözme için daha kolay ve daha verimli bir yol sağlar.
EA'nın Modlarını Nesne Yönelimli Yaklaşım Kullanarak Programlama EA'nın Modlarını Nesne Yönelimli Yaklaşım Kullanarak Programlama
Bu makale, MQL5'te çok modlu alım satım robotu programlama fikrini açıklamaktadır. Her mod nesne yönelimli yaklaşımla uygulanır. Hem mod sınıfı hiyerarşisinin hem de test için olan sınıfların örnekleri sağlanır. Alım satım robotlarının çoklu mod programlamasının, MQL5'te yazılmış bir EA'nın her operasyonel modundaki bütün özelliklerini hesaba katması beklenir. Modu tanımlamak için işlevler ve numaralandırma oluşturulur.