Mikro, Orta ve Ana Eğilimlerin Göstergeleri
Giriş
James Hyerczyk, ”Pattern, Price & Time: Using Gann Theory in Trading Systems” adlı kitabının önsözünde şunları yazmıştır:
“Vadeli işlemler üzerine olan deneyimim bana, alım satım yapan kişilerin analizlerinde kendilerini modele, fiyata veya zamana çok sık kaptırdığını gösterdi. Eşit bir denge kurmadan analizlerini tek yönlü olarak alma eğilimindeler. En yaygın hatalar, giriş zamanı veya çıkış fiyatı veya giriş fiyatı veya çıkış zamanı etrafında kurulan sistemlerdir. Buna ek olarak, alım satım yapan kişilerden model kullananlar genellikle düşük fiyatlarla veya kötü zamanlama ile giriş veya çıkış yapar. Bu gözlemler piyasadaki başarı için her üç yöntemin bir kombinasyonunun gerekli olduğuna dair daha fazla kanıt sağlamıştır. Kitabım da bu önermeye dayanıyor.”
Bu ifadeye katılmamak elde değil. Bu yöntemlerden bazılarının pratikte nasıl kullanılacağını anlamaya çalışalım. Bu makalenin konusu, kitapta açıklanan bazı fikirler doğrultusunda göstergeler ve EA'lar şeklinde alım satım otomasyonu olasılığını ve analizi araştırmaktır. Bu nedenle, materyali daha iyi anlamak için bu makaleyi okumadan önce kitabı (veya en azından modelle ilgili olan ilk kısmını) okumanız önerilir.
1.1 Mikro Trend
Küçük bir trend grafiği Şekil 1'de gösterilmiştir. Küçük bir trend oluşturma kurallarını kısaca ele alalım:
- yukarı yönlü hareket sırasında (bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha yüksek olduğunda ve bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha yüksek olduğunda) çubuğun bir sonraki maksimum kısmını bir öncekine bağlarız ve yükselen trendin bir çizgisini alırız;
- aşağı yönlü hareket sırasında (bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinin altındaysa ve bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha düşük olduğunda) çubuğun bir sonraki minimum değerini öncekine bağlarız ve düşen trendin bir çizgisini alırız;
- yukarı yönlü hareket sırasında başka bir çubuğun maksimum değeri önceki çubuğun maksimum değerini geçmediyse ve dolayısıyla bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha düşükse hareketin yönü aşağı doğru değiştirilir;
- aşağı yönlü hareket sırasında bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha düşük değilse ve aynı zamanda, bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha yüksekse yön yukarı doğru değişir;
- Herhangi bir hareket için, bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinin altındaysa ve aynı zamanda bir sonraki çubuğun maksimum değeri bir öncekinin maksimum değerinden daha düşükse bu çubuk içeriye alınır (bkz. Şekil.1) ve grafiğin oluşumuna katılmaz;
- Herhangi bir hareket sırasında bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha yüksekse ve aynı zamanda bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha düşükse bu çubuk dışarıya alınır (bkz. Şekil 1). Çubuğun yönüne bağlı olarak (yukarı veya aşağı) grafiğin ilgili segmentini oluştururuz.
trendlertrendler
Şekil 1. Küçük trendler
Grafiğin hareketinin yönü değiştirildiğinde küçük pikler vedipler oluşur. Şekil 1'deki küçük dipler sol fiyat etiketiyle kırmızı, küçük pikler ise sağ fiyat etiketiyle yeşil olarak işaretlenir.
Yukarı yönlü hareket sırasında yön aşağı doğru değiştiyse ancak son dibe ulaşmadıysa düzeltici bir hareketimiz var demektir. Aksi takdirde, yönde bir değişiklik olmuştur. Bu aşağı yönlü hareket için de aynıdır.
Böylece fiyat dipler ve pikler arasında hareket eder. Bu tür hareketlere dalgalanmalar denir. Aynı zamanda düzeltici hareketler de oluşturulabilir.
İşte mikro trendin gösterge çizgisini oluşturma kuralları kısaca böyledir. Kitabın ilk bölümünde daha ayrıntılı bir açıklama bulunabilir. Bu göstergenin grafiği, iyi bilinen bir ZigZag göstergesinin grafiğine benzer. Ancak bunun aksine, başka bir çubuğun kapatılmasından sonra yeniden çizilmez ve çizginin yapımını etkileyen ayarlanabilir dış parametrelere sahip değildir.
1.2. GannMicroTrend Göstergesi
Mikro trendin grafiğini gösterecek bir gösterge oluşturalım. Görünüm Şekil 1'dekiyle aynı olmalıdır. Zaman açısından pik ve diplerin en son konumunun görüntülenmesine çıktıyı da ekleyelim. Bu gösterge bu makaleye eklenmiş olan GannMicroTrend.mq5 dosyasında mevcuttur.
Bu bilgileri görüntülemek için Standart KütüphaneSınıflarınıkullanarak kendi Market Watch’ınızı (Piyasa İzleyici) oluşturma makalesinde açıklanan kütüphaneyi kullanın. Bunu yapmak için gösterge metninin başına #include direktifini ekleyin:
#include <TextDisplay.mqh>
Yukarıdaki dosya varsayılan olarak \MQL5\Include klasöründe bulunur.
Gösterge genel değişkenlerde geçerli trendin parametrelerini ve güncel pik ve diplerin parametrelerini depolamalıdır. Ayrıca geçmişte verilen çubuk sayısına ilişkin hesaplamanın derinliğini belirtme imkanı olmalıdır.
Bunu yapmak için belirtilen dış parametreleri ekleyin:
input int MaxBars = 1000; input bool IsSaveTrendParams = true; //--------------------------------------------------------------------- input bool ShowInfo = true; input int UpDownInfoShift = 1; input int LeftRightInfoShift = 1; input color TitlesColor = LightCyan; input color TopFieldsColor = Green; input color LowFieldsColor = Brown; //--------------------------------------------------------------------- input color UpTrendColor = LightGreen; input color DnTrendColor = LightPink; input int LineWidth = 4; //--------------------------------------------------------------------- input color UpStopLossColor = Green; input color DnStopLossColor = Brown; input int StopLossWidth = 1;
Bu parametrelerin amacı aşağıdaki tabloda gösterilmiştir:
Parametrenin adı | Parametrenin amacı |
---|---|
| Göstergenin çizildiği geçmişteki maksimum çubuk sayısı. 0 ise geçmişteki tüm kullanılabilir çubuklar sayılır ve çizilir. |
| True ise geçerli trendin parametreleri ve güncel pik ve dip parametreleri genel değişkenlerde depolanır. |
| True ise grafik penceresi güncel pik ve diplerin koordinatlarını görüntüler. |
| Bilgi çıktısının yerinin yukarıdan aşağıya dikey bir şekilde kayması. |
| Bilgi çıktısının yerinin soldan sağa yatay bir şekilde kayması. |
| Bilgi çıkışı sırasında başlıkların rengi. |
| Güncel pik parametrelerinin çıktısı sırasında metnin rengi. |
| Güncel dip çıktısı sırasında metnin rengi. |
| Yukarı yönlü hareketin çizgi çiziminin rengi. |
| Aşağı yönlü hareketin çizgi çiziminin rengi. |
| Trend çizgilerinin genişliği. |
| Pikleri gösteren sağ fiyat etiketinin rengi. |
| Dipleri gösteren sol fiyat etiketinin rengi. |
| Pikleri ve dipleri gösteren fiyat etiketinin boyutu. |
Standart sınıflar kümesinden CChartObjectTrend türünün grafiksel nesnelerini kullanarak trend çizgisini oluşturacağız. İkincil pikler sol fiyat etiketiyle CChartObjectArrowLeftPrice türündeki nesnelerle, ikincil dipler ise CChartObjectArrowRightPrice türündeki nesnelerle işaretlenir. Bu nesnelerin tümü MetaTrader 5 terminali ile birlikte gelen standart kütüphane sınıflarında bulunur.
Gelecekte trend çizgilerinin yanı sıra piklerin ve diplerin manipülasyonu gerekebileceği için bunları CList türündeki nesnelerin bir listesinde saklayacağız . Bunu yapmak için göstergenin başına başlık dosyalarının eklenmesi direktiflerini ekleyin:
#include <Arrays\List.mqh> #include <ChartObjects\ChartObjectsLines.mqh> #include <ChartObjects\ChartObjectsArrows.mqh>
Ardından nesne listelerini ekleyin:
CList* trend_list_Ptr = NULL; // list of the trend lines CList* up_list_Ptr = NULL; // list of the peaks CList* dn_list_Ptr = NULL; // list of the bottoms
Şimdi göstergenin oluşumu için gerekli tüm ögelere sahibiz.
Göstergenin OnInit fonksiyonu aşağıdaki gibidir:
int OnInit() { trend_list_Ptr = new CList(); if(CheckPointer(trend_list_Ptr) != POINTER_DYNAMIC) { Print("Error of creating the object CList #1"); return(-1); } up_list_Ptr = new CList(); if(CheckPointer(up_list_Ptr) != POINTER_DYNAMIC) { Print("Error of creating the obkect CList #2"); return(-1); } dn_list_Ptr = new CList(); if(CheckPointer(dn_list_Ptr) != POINTER_DYNAMIC) { Print("Error of creating the object CList #3"); return(-1); } if(InitGraphObjects() != 0) { Print("Error of creating the object TableDisplay"); return(-1); } return(0); }
Burada nesne listelerine yönelik işaretçiler oluşturulur, sonra oluşturmanın ne düzeyde başarılı olduğu denetlenir. İşaretçi geçerli değilse bir hata iletisi alınır ve bununla göstergenin çalışması tamamlanır. Hatanın oluştuğu yer # karakterli sayı aracılığıyla tanımlanabilir. Daha sonra güncel pik ve dip parametrelerini görüntüleme tablosu başlatılır. Bu, InitGraphObjects fonksiyonu koduyla yapılır.
Göstergemizin birincil kısmı, hesaplamaları gerçekleştirme ihtiyacına yönelik olay işleyicisidir. Bu, OnCalculate fonksiyonudur. Bunu bölüm bölüm ele alalım. İlk bölüm göstergenin görüntülenen tüm kısmını yeniden hesaplama ihtiyacına ilişkin kontroldür. Böyle bir ihtiyaç, örneğin gösterge grafikte ilk başlatıldığı zaman grafikte güncellenmiş bir geçmiş indirirken zaman diliminde bir değişiklik meydana geldiğinde ortaya çıkar. Tüm bu durumlarda prev_calculated bağımsız değişkeninin değeri sıfıra eşittir.
Bu aşağıdaki şekilde doğrulanır:
int index, start = prev_calculated - 1; if(prev_calculated == 0) { if(CheckPointer(trend_list_Ptr) != POINTER_INVALID) { trend_list_Ptr.Clear(); } if(CheckPointer(up_list_Ptr) != POINTER_INVALID) { up_list_Ptr.Clear(); } if(CheckPointer(dn_list_Ptr) != POINTER_INVALID) { dn_list_Ptr.Clear(); } // Determine the bar number of the beginning of calculations: if(MaxBars > 0 && rates_total > MaxBars) { start = rates_total - MaxBars; } else { start = 0; } time_prev = 0; trend_prev = 0; }
Tüm göstergeyi yeniden hesaplamaya ihtiyaç varsa trend çizgilerinin listesini ve pik ve dip listelerini temizleriz. Ayrıca bu grafiksel nesneler de grafikten silinir. Daha sonra göstergenin hesaplanmasına başlamamız gereken çubuğun sayısını, yanibaşlangıç değişkenini belirleriz. MaxBars dış değişkeninin değeri sıfırdan büyükse ve rates_total grafiğindeki çubuk sayısından azsa hesaplama için başlangıç çubuğu şuna eşit olacaktır:
start = rates_total - MaxBars;
Bir zaman serisinin çubuklarının endekslenmesinin sıfırdan (son çubuk) başladığını hatırlayın.
MaxBars dış değişkeninin değeri sıfıra eşitse (ki bu da göstergeyi grafiğin tüm çubuklarında hesaplamamız gerektiği anlamına gelir) veya grafikteki çubuk sayısından büyükse o zaman grafikteki tüm çubuklar için göstergenin tüm değerleriniyeniden hesaplamamız gerekir; başlangıç sıfıra eşittir.
Bir sonraki adımda trend çizgisinin ve ikincil piklerin ve diplerin konumlarının hesaplanması döngüsü vardır. Çubukların maksimum ve minimum fiyat değerlerinin analizi yukarıdaki kurallar doğrultusunda oldukça basittir ve daha fazla açıklama gerektirmez (GannMicroTrend.mq5dosyasındaki kaynak metne bakın).
Bir trend çizgisinin bölümlerini çizmek için aşağıdaki basit fonksiyonu kullanırız:
//--------------------------------------------------------------------- // Drawing of a section //--------------------------------------------------------------------- void CreateCut(datetime _dt1, double _prc1, datetime _dt2, double _prc2, color _clr, int _wd) { string name = GetUniqName(prefix + " "); CChartObjectTrend* trend_obj = new CChartObjectTrend(); if(CheckPointer(trend_obj) != POINTER_INVALID) { trend_obj.Create(0, name, 0, _dt1, _prc1, _dt2, _prc2); trend_obj.Color(_clr); trend_obj.Width(_wd); trend_list_Ptr.Add(trend_obj); } }
Burada fonksiyonu Standart Kütüphane Sınıflarını kullanarak kendi Market Watch’ınızı (Piyasa İzleyici) oluşturun makalesinde ayrıntılı olarak açıklandığı şekilde grafik içinde benzersiz bir isim (GetUniqName) elde etmek için kullanırız. Trend çizgisi grafik nesnesinin başarılı bir şekilde oluşturulması durumunda ilgili parametreleri belirtilir (renk ve çizgi genişliği) ve bu nesne CList:: Add yöntemi çağrılarak çizgi listesine eklenir.
İkincil piklerin ve diplerin konumunu çizmek için sırasıyla CreateUpStopLoss/CreateDnStopLoss fonksiyonlarını kullanırız. Bunlar CreateCut fonksiyonuna benzerdir ve oluşturulan nesneleri listelerine eklerler.
Hesaplama tamamlandıktan sonra güncel diplerin ve piklerin parametreleri görüntülenir. Burada önceki adımda oluşturulan listeleri kullanırız. Artışlarına ilişkin olarak zamana göre sıralanmış bu listeleri elde ederiz ve CList:: GetLastNode yöntemini çağırarak bir pike veya dibe yönelik güncel nesneyi elde ederiz.
Açıklanan göstergenin çalışmasının sonucu aşağıdaki şekilde sunulmuştur:
Şekil 2. Küçük bir trendin göstergesi
2.1. Orta Trend
Orta trendin grafiği iki çubukla (iki çubuklu hareketler) özetlenen piyasanın hareketini yansıtır. Orta trendin grafiği Şekil 2'de gösterilmiştir. Orta trendlerin grafiğini oluşturmaya yönelik kuralları kısaca ele alalım:
- yukarı doğru hareket sırasında (bir sonraki çubuğun maksimum değeri önceki çift çubuklu hareketin maksimum değerinden daha yüksek olduğunda ve bir sonraki çubuğun minimum değeri önceki çift çubuklu hareketin minimum değerinden daha yüksek olduğunda) çubuğun bir sonraki maksimum değerini iki çubuklu hareketin önceki maksimum değeriyle birleştiririz ve ara trendin yukarı yönlü hareketinin bir çizgisini elde ederiz;
- aşağı yönlü hareket sırasında (bir sonraki çubuğun minimum değeri önceki çift çubuklu hareketin minimum değerinden daha yüksek olduğunda ve bir sonraki çubuğun maksimum değeri önceki çift çubuklu hareketin minimum değerinden daha yüksek olduğunda) çubuğun bir sonraki minimum değerini iki çubuklu hareketin önceki minimum değeriyle birleştiririz ve ara trendin aşağı yönlü hareketinin bir çizgisini elde ederiz;
- yukarı yönlü hareket sırasında başka bir çubuğun maksimum değeri önceki çift çubuklu hareketin maksimum değerini geçmediyse ve aynı zamanda bir sonraki çubuğun minimum değeri önceki çift çubuklu hareketin minimum değerinden daha düşükse hareketin yönü aşağı doğru değiştirilir;
- yukarı yönlü hareket sırasında başka bir çubuğun maksimum değeri önceki çift çubuklu hareketin maksimum değerini geçmediyse ve aynı zamanda bir sonraki çubuğun minimum değeri önceki çift çubuklu hareketin minimum değerinden daha düşükse hareketin yönü aşağı doğru değiştirilir;
- Herhangi bir hareket sırasında bir sonraki çubuğun minimum değeri önceki çift çubuklu hareketin minimum değerinin altındaysa ve aynı zamanda bir sonraki çubuğun maksimum değeri bir önceki çift çubuklu hareketin maksimum değerinden daha düşükse bu çubuk içeriye alınır (bkz. Şekil.2) ve grafiğin oluşumuna katılmaz;
- Herhangi bir hareket sırasında bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha yüksekse ve aynı zamanda bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha düşükse bu çubuk dışarıya alınır (bkz. Şekil 2). Çubuğun yönüne bağlı olarak (yukarı veya aşağı) grafiğin ilgili segmentini oluştururuz.
Şekil 3. Orta trend
Orta trendin yukarı yönlü olarak tersine dönmesinin tek göstergesi orta pikin seviyesinin kesişimidir. Aynı şekilde, aşağı yönlü olarak tersine dönüşün tek göstergesi de orta dip seviyesinin kesişimidir.
Orta trend yukarı yönlüyse ve piyasa aşağı yönlü bir orta dalgalanma yapıyorsa ancak orta dalgalanmanın önceki dibini bozmuyorsa bu bir düzeltme olacaktır. Ve eğer orta trend aşağı yönlüyse ve piyasa yukarı yönlü bir orta dalgalanma yapıyorsa ancak orta dalgalanmanın önceki pikini bozmuyorsa bu da aynı şekilde bir düzeltme olur.
2.2. GannMiddleTrend Göstergesi
Orta trendin grafiğini gösterecek bir gösterge oluşturalım. Görünüm Şekil 2'dekiyle aynı olmalıdır. Ek olarak, ekranda güncel piklerin ve diplerin konumları gösterilmelidir. Bu gösterge bu makaleye eklenen GannMiddleTrend.mq5 başlıklı dosyada bulunabilir
Bu göstergede grafiğin ögelerinin oluşturulması için gösterge tamponunu ve DRAW_COLOR_SECTION çizim türünü kullanacağız. Buna daha sonra EA'nın geliştirilmesinde ihtiyacımız olacak. Bu göstergenin verilerine EA'dan erişmek için gösterge tamponunu kullanıyoruz.
Ekrandaki göstergenin görüntüleme parametreleri aşağıdaki yönergelerle belirtilir:
#property indicator_buffers 2 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_SECTION #property indicator_color1 LightGreen, LightPink #property indicator_width1 4
Burada sırayla belirtilmiştir:
- gösterge tamponlarının sayısı (bunlardan yalnızca iki adet vardır: veri tamponu ve renk dizinini tamponu);
- ekranda görüntülenen grafik sayısı;
- gösterge grafiğinin işlenme türü (renkli bölümler kullanarak işleyeceğiz);
- renk dizini tamponu içinde belirtilebilen renkler;
- gösterge grafiğinin çizgi genişliği;
OnInit başlatma fonksiyonunda gösterge tamponları için ayrılanları bağlar ve diğer bazı gösterge parametrelerini belirtiriz.
Bu işlem kodun aşağıdaki parçası tarafından yapılır:
SetIndexBuffer(0, DataBuffer, INDICATOR_DATA); SetIndexBuffer(1, ColorBuffer, INDICATOR_COLOR_INDEX); IndicatorSetInteger(INDICATOR_DIGITS, Digits( )); IndicatorSetString(INDICATOR_SHORTNAME, "GannMiddleTrend"); PlotIndexSetString(0, PLOT_LABEL, "GannMiddleTrend"); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
Burada sırayla belirtilmiştir:
- göstergede veri tamponu olarak kullanmak için bir tampon (ekranda işleme yapmak için);
- gösterge grafiğinin bölümlerinin rengini belirtmek için bir tampon;
- gösterge değerlerinin ekranda görüntülenmesi sırasında ondalık nokta sayısı;
- ekranda görüntülenmesi sırasında göstergenin kısa adı;
- ekranda görüntülenmesi sırasında grafik serisinin adı (veri tamponu);
- ekrandaki boş değere karşılık gelen değer (işleme olmadan);
Gösterge yapı olarak ve dış parametrelerde GannMicroTrend mikro trendinin göstergesine benzerdir. Aradaki fark grafik nesneleri kullanmak yerine gösterge tamponundave renk tamponunda doğrudan bir değer ataması kullanmasıdır. Bu nedenle uygulamanın ayrıntıları üzerinde durmayacağız.
Göstergenin çalışmasının sonucu aşağıdaki şekilde gösterilmiştir:
Şekil 4, Ara trend göstergesi
Görüldüğü gibi Şekil 3'teki elle çizilmiş olanla kesişmektedir.
3.1. Ana Trend
Ana trendin grafiği üç çubukla (üç çubuklu hareketler) özetlenen piyasanın hareketini yansıtır. Ana trendin grafiğinin görünümü Şekil 5'te gösterilmiştir. Ana trendi oluşturmaya yönelik kuralları kısaca ele alalım:
- yukarı yönlü hareket sırasında (bir sonraki çubuğun maksimum değeri önceki üç çubuklu hareketin maksimum değerinden daha yüksek olduğunda ve bir sonraki çubuğun minimum değeri önceki üç çubuklu hareketin minimum değerinden daha yüksek olduğunda) çubuğun bir sonraki maksimum değerini önceki üç çubuklu hareketin maksimum hareketiyle birleştiririz ve ana trendin yukarı yönlü hareketinin bir çizgisini elde ederiz;
- aşağı yönlü bir hareket sırasında (bir sonraki çubuğun minimum değeri önceki üç çubuklu hareketin minimum değerinden daha düşük olduğunda ve bir sonraki çubuğun maksimum değeri önceki üç çubuklu hareketin minimum değerinden daha düşük olduğunda) bir sonraki çubuğun minimum değerini üç çubuklu hareketin önceki minimum değeriyle birleştiririz ve ana trendin aşağı yönlü hareketinin bir çizgisini elde ederiz;
- yukarı yönlü hareket sırasında bir sonraki çubuğun maksimum değeri önceki üç çubuklu hareketin maksimum değerini geçmiyorsa ve aynı zamanda bir sonraki çubuğun minimum değeri önceki üç çubuklu hareketin minimum değerinden daha düşükse yön aşağı doğru değişmiştir;
- yukarı yönlü hareket sırasında bir sonraki çubuğun maksimum değeri önceki üç çubuklu hareketin maksimum değerini geçmiyorsa ve aynı zamanda bir sonraki çubuğun minimum değeri önceki üç çubuklu hareketin minimum değerinden daha düşükse yön aşağı doğru değişmiştir;
- Herhangi bir hareket için bir sonraki çubuğun minimum değeri önceki üç çubuklu hareketin minimum değerinden daha büyükse ve aynı zamanda bir sonraki çubuğun maksimum değeri önceki üç çubuklu hareketin maksimum değerinden daha düşükse bu çubuk içeriye çağrılır (bkz. Şekil 5) ve grafiğin oluşumuna katılmaz;
- Herhangi bir hareket sırasında bir sonraki çubuğun maksimum değeri önceki çubuğun maksimum değerinden daha yüksekse ve aynı zamanda bir sonraki çubuğun minimum değeri önceki çubuğun minimum değerinden daha düşükse bu çubuk dışarıya alınır (bkz. Şekil 5). Çubuğun yönüne bağlı olarak (yukarı veya aşağı) grafiğin ilgili segmentini oluştururuz.
Şekil 5. Ana trend
Ana trendin yukarı yönlü olarak tersine dönmesinin tek göstergesi ana pikin seviyesinin kesişimidir. Aynı şekilde, aşağı yönlü olarak tersine dönüşün tek göstergesi de ana dip seviyesinin kesişimidir.
Birincil trend yukarı yönlüyse ve piyasa aşağı yönlü bir dalgalanma yapıyorsa ancak önceki dip dalgalanmayı bozmuyorsa bu bir düzeltme olacaktır. Ana trend aşağı yönlüyse ve piyasa yukarı yönlü bir dalgalanma yapıyorsa ancak önceki pik dalgalanmayı bozmuyorsa bu da aynı şekilde bir düzeltme olur.
3.2. GannMainTrend Göstergesi
Ana trendin grafiğini gösterecek bir gösterge oluşturalım. Görünüm Şekil 5'tekiyle aynı olmalıdır. Ek olarak, ekranda güncel piklerin ve diplerin konumları gösterilmelidir. Bu gösterge bu makaleye eklenmiş olan GannMainTrend.mq5 dosyasında mevcuttur.
Gösterge yapı olarak ve dış parametrelerde GannMiddleTrend orta trend göstergesiyle aynıdır, bu nedenle uygulamanın ayrıntıları üzerinde durmayacağız. Göstergenin çalışmasının sonucu aşağıdaki şekilde gösterilmiştir:
Şekil 6. Ana trendin göstergesi
4. Dalgalanma Grafiğini Kullanarak Alım Satım
Piyasayı Model açısından analiz etmek için bir aracımız vardır: bunlar mikro, orta ve ana trendlerin göstergeleridir. Şimdi fiyat değişimlerine göre basit bir alım satım sistemi geliştirmeye çalışalım.
James Hyerczyk, kitabında şu stratejiyi önermektedir:
- Aşağı yönlü (yukarı yönlü) uzun vadeli hareketlere sahip bölümleri tanımlayın;
- Yatay yönde hareket eden bir durgun çizginin oluşumundan sonra, piyasa en son dalgalanmanın pikinden (dipten satmak için) satın alma yapmak için bir emir verin;
- Koruyucu stop en son dalgalanmadaki dibin hemen altına (pikin hemen üstüne) yerleştirilir;
- Pozisyon açıldıktan sonra stop, fiyattan sonrasına gelerek yeni dalgalanmalardaki diplerin (piklerin) altına taşınır;
Bunu bir çizimde gösterelim:
Şekil 7. Dalgalanmalı Alım Satım
Son derece yüksek fiyat seviyelerinde kısa pozisyon ve son derece düşük fiyat seviyelerinde de uzun pozisyon ihtimalini göz önünde bulundurmanız önerilir. Şekil 7 orta trendin grafiğini göstermektedir. Ana trendin grafiğine göre uzun vadeli hareketleri olan bölümleri belirleyeceğiz. “Durgun” piyasanın bölümlerini orta trendin grafiğine göre belirleyeceğiz. Pozisyon orta trendin grafiği ile izlenecektir.
Ana trendin grafiğinde aynı bölümün nasıl göründüğü aşağıda açıklanmıştır:
Şekil 8. Ana trendin grafiğindeki bölüm
Uzun vadeli aşağı yönlü hareket (dalgalanma) ana pik 1,36913 ile ana dip 1,18758 arasındadır. Bu hareket 1815,5 dört basamaklı puandadır. Ardından 1,24664'ten 1,21495'e kadar neredeyse yatay bir seyirle “durgun” piyasanın bölümü gelir (bkz. Şekil 7). Bu hareket 316,9 puandadır. Bundan sonra fiyat, ara trend grafiğindeki en son dalgalanmanın ara pik seviyesini ihlal eder ve yukarı yönlü gider.
İlk stopu ara dip ve en son dalgalanma olan 1,21495'in hemen altına ayarladık ve ara trendin grafiğindeki pozisyonu izledik. Bu işlem sonucunda yaklaşık 1,31186 - 1,23966 = 722,0 puan kâr elde edeceğiz.
5. MQL5 Sihirbazı'nda Kullanılmak Üzere Alım Satım Sinyalleri Sınıfı
Alım satım sistemimizin uygulanmasına ilişkin kodu oluşturmadan önce alım satımın tüm seyrini şematik olarak hayal edelim. Aşağıdaki çizime bir bakın:
Şekil 9. Uzun pozisyonlu alım satım
ALIŞ pozisyonunun ayarlanması aşağıdakileri içerir:
- Ana trendin grafiğine göre uzun vadeli bir aşağı yönlü hareketi tanımlama (Şekil 9'daki A-B bölümü). Hareketin süresi ve büyüklüğü sırasıyla dT ve dP, parametreleri ile belirtilir. Bu parametrelerin değerleri,bu aracın tarihi incelenerek belirlenmelidir.
- Ana trendin grafiğinde ana dibin oluşmasından sonra (Şekil 9'daki B noktası), ara trendin grafiğinde C ve D noktalarının oluşumunu bekleyin. Bu noktalar B noktası ile birlikte ara B-C ve C-D dalgalanmalarını oluşturur. Bu dalgalanmaların süresi ve büyüklüğü belirtilen değerleri geçmiyorsa yatay bir eğilim (veya “durgun” bir piyasa) oluşturduklarını varsayıyoruz.
- Ara C pikinin (veya C'den sonra oluşan güncel pik) seviyesinin bozulmasını bekleyin. Bozulmadan sonra stopu D noktasındaki ara dibin hemen altına (veya C'den sonra oluşan güncel ara tabana) yerleştirin.
- Yukarı yönlü hareket devam ederken stopu oluşan ara dibin altına (F ve L noktalarının hemen altında) taşıyarak pozisyonu izleyin.
- Sermaye yönetimi moduna bağlı olarak, oluşan ara piklerin (G ve M noktaları) bozulma noktalarındaki pozisyon hacmine ekleme yapabiliriz.
Bu nedenle, bir Uzman Danışman oluşturmak için aşağıdaki bileşenlere ihtiyacımız vardır: açık pozisyonun takip stopunun bir modülü ve mümkünse “piramit” pozisyonundan (para yönetimi) sorumlu olan bir modül.
Bu bölüm yazılırken aşağıdaki makaleler kullanılmıştır: MQL5 Sihirbazı Alım Satım Sinyalleri Modülü Nasıl Oluşturulur, MQL5 Sihirbazı: Açık Pozisyonların İzlenme Modülü Nasıl Oluşturulur, MQL5 Sihirbazı: Risk ve Para Yönetimi Modülü Nasıl Oluşturulur.
Alım satım sinyalleri üretmekten sorumlu modülün geliştirilmesi aşağıdaki gibidir:
- Uzman Danışman oluşturmaya yönelik tüm temel sınıfları içeren standart mqh dosyasını içerecek bir ön işlemci direktifi eklenir. Bu işlem aşağıdaki gibi yapılır:
#include <Expert\ExpertSignal.mqh>
Bu direktifi bir alım satım sinyali oluşturma modülümüzün başına ekleyin.- MetaEditor düzenleyicisine bu dosyanın EA oluşturulurken kullanılması gerektiğini belirten, yorumlar biçimindeki özel dizgilerin eklenmesi:
// wizard description start //+------------------------------------------------------------------+ //| Description of the class | //| Title=Signal based on swings on charts | //| of the middle and main trends according to Gann (iCustom) | //| Type=Signal | //| Name=TGannBreakSignal | //| Class=TGannBreakSignal | //| Page= | //| Parameter=MinMainSwingContinuance,int,5 | //| Parameter=MinMainSwingSize,double,300.0 | //| Parameter=MinMiddleSwingContinuance,int,3 | //| Parameter=MaxMiddleSwingSize,double,200.0 | //| Parameter=OpenPriceSpace,double,5.0 | //| Parameter=StopLossSpace,double,5.0 | //+------------------------------------------------------------------+ // wizard description end
Burada EA'nın oluşturulması sırasında MetaEditor listesinde görünen modülün adını belirten Başlık parametresini görüyoruz (aşağıdaki açıklamaya bakın). Önemli bir parametre olan Tür, verilen modülün bir sinyal oluşturma modülü olduğunu belirler. Ayrıca dış parametrelerve bunların varsayılan değerleri mevcuttur.
Bu satırların tümü ExpertSignal.mqh standart dosyasının dâhil edilme direktifinden hemen sonra eklenir.
- Temel sınıfın alt ögesine ait sınıfın açıklaması ExpertSignal.mqh dosyasında verilmiştir. Bu sınıf CExpertSignal temel sınıfında eksik olan bazı fonksiyonları uygulamalıdır. Sınıfımızın açıklaması aşağıdaki gibidir (bazı gerekli olmayan parçalar burada gösterilmemiştir):
class TGannBreakSignal : public CExpertSignal { private: int min_main_swing_continuance; // minimum swing duration time of the main tren double min_main_swing_size_points; // minimum swing amplitude on the chart of the main trend int min_middle_swing_continuance; // minimum swing duration time on the chart of the middle trend double max_middle_swing_size_points; // maximum swing amplitude of the chart of the middle trend double open_price_space; // distance between the open price and peak/bottom double stop_loss_space; // distance between the stop loss price and peak/bottom datetime main_swing_lf_datetime; // time of left point of a swing on the chart of the main trend double main_swing_lf_price; // price of left point of a swing on the chart of the main trend datetime main_swing_rt_datetime; // time of right point of a swing on the chart of the main trend double main_swing_rt_price; // price of right point of a swing on the chart of the main trend int main_swing_continuance; // swing duration time on the chart of the main trend double main_swing_size_points; // swing amplitude (in points) on the chart of the main trend datetime middle_swing_lf_datetime; // time of left point of a swing on the chart of the middle trend double middle_swing_lf_price; // price of left point of a swing on the chart of the middle trend datetime middle_swing_rt_datetime; // time of right point of a swing on the chart of the middle trend double middle_swing_rt_price; // price of right point of a swing on the chart of the middle trend int middle_swing_continuance; // swing duration time on the chart of the middle trend double middle_swing_size_points; // swing amplitude (in points) on the chart of the middle trend int handle_main_swing; int handle_middle_swing; double main_swing_buff[]; double middle_swing_buff[]; datetime time_buff[]; double price_buff[]; public: TGannBreakSignal(); // constuctor ~TGannBreakSignal(); // destructor // Settings: void MinMainSwingContinuance(int _cont); void MinMainSwingSize(double _size); void MinMiddleSwingContinuance(int _cont); void MaxMiddleSwingSize(double _size); void OpenPriceSpace(double _space); void StopLossSpace(double _space); int GetMainSwingContinuance(); // gets swing duration time on the chart of the main trend double GetMainSwingSizePoints(); // gets swing amplitude (in 4-digit points) on the chart of the main trend int GetMiddleSwingContinuance(); // gets swing duration time on the chart of the middle trend double GetMiddleSwingSizePoints(); // gets swing amplitude (in 4-digit points) on the chart of the middle trend // overloaded methods of the CExpertSignal class: virtual bool ValidationSettings(); virtual bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration); virtual bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration); virtual bool InitIndicators(CIndicators *indicators); // Additional methods: protected: // Sets swing parameters of the main trend void SetMainSwingParameters(datetime _lf_dt,double _lf_price,datetime _rt_dt,double _rt_price); // Sets swing parameters of the middle trend void SetMiddleSwingParameters(datetime _lf_dt,double _lf_price,datetime _rt_dt,double _rt_price); // Gets swing parameters of the main trend int GetMainSwing(); // Gets swing parameters of the middle trend int GetMiddleSwing( ); };
Veri üyelerinin amacı yorumlardan açıkça anlaşılabilir. Sınıfın bazı yöntemlerini göz önünde bulundurun.
Her şeyden önce temel sınıfın yöntemlerini yeniden tanımlamamız gerekir. İlk yöntem EA'nın belirtilen dış parametrelerinin doğruluğunu kontrol etmek için kullanılır:
//--------------------------------------------------------------------- // Validation of settings //--------------------------------------------------------------------- bool TGannBreakSignal::ValidationSettings() { if(this.min_main_swing_continuance<=0) { Print("Wrong Parameter: min_main_swing_continuance = ", this.min_main_swing_continuance); return(false); } if(this.min_main_swing_size_points<=0.0) { Print("Wrong Parameter: min_main_swing_size_points = ", DoubleToString(this.min_main_swing_size_points,1)); return(false); } if(this.min_middle_swing_continuance<=0) { Print("Wrong Parameter: min_middle_swing_continuance = ", this.min_middle_swing_continuance); return(false); } if(this.max_middle_swing_size_points<=0.0) { Print("Wrong Parameter: max_middle_swing_size_points = ", DoubleToString(this.max_middle_swing_size_points,1)); return(false); } return(true); }
Burada doğruluk için dış parametreleri basit bir şekilde kontrol ederiz. Dalgalanma genişliğinin (noktalarda) ve çubuklardaki süresinin sıfırdan küçük veya sıfıra eşit olmadığı açıktır. Yanlış belirtilen bir dış parametre olması durumunda yöntem false değerini döndürecektir.
Şimdi de pozisyonların açılmasına yönelik sinyal oluşturma yöntemlerini ele alalım.
Uzun bir pozisyon açma gereksinimi kontrolü temel sınıftan devralınan aşağıdaki yöntemle yapılır:
//--------------------------------------------------------------------- // Checks conditions to open long position //--------------------------------------------------------------------- bool TGannBreakSignal::CheckOpenLong(double &_price,double &_sl, double &_tp,datetime &_expiration) { if(this.GetMainSwing()==-1) { return(false); } if(this.GetMiddleSwing()==-1) { return(false); } // If the main swing upward, exit if(this.main_swing_rt_price>=this.main_swing_lf_price) { return(false); } // If the middle weak swing isn't formed, exit: if(this.middle_swing_rt_price>=this.middle_swing_lf_price) { return(false); } // Check swing parameters on the main trend chart if(this.main_swing_continuance<this.min_main_swing_continuance || this.main_swing_size_points<this.min_main_swing_size_points) { return(false); } // Check swing parameters on the middle trend chart if(this.middle_swing_continuance<this.min_middle_swing_continuance || this.middle_swing_size_points>this.max_middle_swing_size_points) { return(false); } double unit=this.PriceLevelUnit(); // If the price has crossed the peak of the weak middle swing, set signal to open long position: double delta=this.m_symbol.Bid() -(this.middle_swing_lf_price+this.open_price_space*unit); if((delta>=0.0) && (delta<(10.0*unit))) { _price=0.0; _sl = this.m_symbol.NormalizePrice(this.middle_swing_rt_price - stop_loss_space*unit); _tp = 0.0; return(true); } return(false); }
İlk olarak, ana ve ara trendlerin grafiklerine ilişkin güncel dalgalanmaların parametrelerini elde etmek için iki yöntem çağrılır: TGannBreakSignal::GetMainSwing ve TGannBreakSignal::GetMiddleSwing. Bu yöntemler başarılı olursa dalgalanmaların parametrelerini analiz edebiliriz.
Uzun bir pozisyon açma sinyalinin varlığını kontrol ettiğimizden dolayı dalgalanmalar aşağı yönlü olmalıdır. A ve B noktalarının pozisyonlarını karşılaştırırız (bkz. Şekil.9); B noktası A noktasından daha düşük bir fiyata sahipse fiyat dalgalanmaları aşağı yönlüdür.
Daha sonra C ve D noktalarının varlığını kontrol ederiz (bkz. Şekil 9). Ayrıca D noktası C noktasından daha düşük bir fiyata sahip olmalıdır. Bu durum gerçekleştiğinde ana ve ara trendlerin dalgalanma parametrelerini kontrol ederiz. Hareketin süresi ve büyüklüğü kontrol edilir.
Önceki kontrollerin tümü başarılı olduysa fiyat ara dalgalanmanın pikini geçse de geçmese de son kontrol gerçekleştirilir. Eğer durum böyleyse stop değerini girin ve sonucu true olarak döndürün.
Kısa pozisyon açma ihtiyacının kontrolü, TGannBreakSignal:: CheckOpenShort yöntemine benzer kontrolleri gerçekleştiren ancak bunu fiyat eksenindeki bir ayna görüntüsünde yapan TGannBreakSignal:: CheckOpenLong yöntemi çağrılacak yapılır.
Böylece alım satım sinyallerinin oluşturulmasından sorumlu modülün yapısını ve temel yöntemlerini gözden geçirmiş olduk. Açıklanan modül bu makaleye GannTrendSignal.mqh dosyası olarak eklenmiştir.
İhtiyacımız olan ikinci modül de açık bir pozisyonun takip stop modülüdür. Bu modül ayrıca standart sınıflara göre geliştirilmiştir ve aşağıdakilerden oluşur:
- Pozisyon takibi için kod oluşturmaya yönelik temel sınıfları içeren standart mqh dosyasını içerecek ön işlemci direktifi eklenir.
Bu işlem aşağıdaki gibi yapılır:
#include <Expert\ExpertTrailing.mqh>
Bu direktifi konum takip modülünün başına ekleyin.
- MetaEditor düzenleyicisine bu dosyanın EA’da pozisyon takibi oluşturmak için kullanılması gerektiğini belirten, yorumlar biçimindeki özel dizgilerin eklenmesi:
// wizard description start //+------------------------------------------------------------------+ //| Description of the class | //| Title=Trailing on peaks/bottoms on the chart of the middle trend | //| Type=Trailing | //| Name=MiddleTrend | //| Class=MiddleTrendTrailing | //| Page= | //| Parameter=StopLossSpace,double,5.0 | //+------------------------------------------------------------------+ // wizard description end //+------------------------------------------------------------------+
BuradaTür parametresi “Trailing” (Takip) değerine eşit olarak ayarlanır; bu modülün pozisyonu (takip eden) desteklemek için kullanılması gerektiğini gösterir. Ayrıca dış parametrelerve bunların varsayılan değerleri mevcuttur.
Bu satırların tümü ExpertTrailing.mqh standart dosyasının dâhil edilme direktifinden hemen sonra eklenir.
- Temel sınıfın alt ögesine ait sınıfın açıklaması ExpertTrailing.mqh dosyasında verilmiştir. Bu sınıf CExpertTrailing temel sınıfında eksik olan bazı fonksiyonları uygulamalıdır. Sınıfımızın açıklaması aşağıdaki gibidir (bazı gerekli olmayan parçalar burada gösterilmemiştir):
class MiddleTrendTrailing : public CExpertTrailing { private: datetime middle_swing_lf_datetime; // time of left point of a swing on the chart of the main trend double middle_swing_lf_price; // price of left point of a swing on the chart of the main trend datetime middle_swing_rt_datetime; // time of right point of a swing on the chart of the main trend double middle_swing_rt_price; // price of right point of a swing on the chart of the main trend double stop_loss_space; // the distance between peak/bottom and stop loss price int handle_middle_swing; double middle_swing_buff[]; datetime time_buff[]; double price_buff[]; public: MiddleTrendTrailing(); // constructor ~MiddleTrendTrailing(); // destructor private: int GetMiddleSwing(); // get parameters of the middle swing public: // Settings: void StopLossSpace(double _space); // Overloaded methods of CExpertTrailing class: virtual bool ValidationSettings(); virtual bool InitIndicators(CIndicators *indicators); virtual bool CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp); virtual bool CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp); };
Sınıfımızda yeniden tanımlanan temel yöntemler şunlardır: MiddleTrendTrailing:: CheckTrailingStopLong ve MiddleTrendTrailing:: CheckTrailingStopShort. Bu iki yöntem sırasıyla uzun ve kısa bir pozisyon için zarar-durdur’un değiştirilmesi koşullarını kontrol eder.
MiddleTrendTrailing:: CheckTrailingStopLong’u daha ayrıntılı olarak ele alalım:
//--------------------------------------------------------------------- // Checks conditions of trailing stop for long position //--------------------------------------------------------------------- bool MiddleTrendTrailing::CheckTrailingStopLong(CPositionInfo *_position,double &_sl,double &_tp) { if(_position==NULL) { return(false); } if(this.GetMiddleSwing()==-1) { return(false); } double sl_req_price = this.m_symbol.NormalizePrice(MathMin(middle_swing_lf_price,middle_swing_rt_price) - this.stop_loss_space * this.m_adjusted_point ); if(_position.StopLoss() >= sl_req_price ) { return(false); } _tp = EMPTY_VALUE; _sl = sl_req_price; return(true); }
İlk önce orta trend grafiği için en son dalgalanma parametrelerine ilişkin yöntemi çağırırız: TGannBreakSignal:: GetMiddleSwing. Bu yöntem başarılı olursa (sıfır değerini döndürürse) dalgalanmaların parametrelerini analiz etmek mümkündür.
Daha sonra, elde edilen dalgalanma parametrelerine dayanarak zarar-durdur’u yerleştirmek için fiyat seviyesini hesaplarız. Zarar-durdur’un hesaplanan düzeyi geçerli olandan daha düşükse (uzun pozisyon için) daha sonra _sl new value sl_req_price yönteminin parametresini girer ve true değerini döndürürüz. Aksi takdirde false değerini döndürürüz; bu, zarar-durma seviyesinin değişiklik gerektirmediğini gösterir.
Kısa pozisyonlar için zarar-durdur’u değiştirme ihtiyacını kontrol etme yöntemi de benzer şekilde oluşturulur.
Böylece açık bir pozisyonun (takip eden) takip edilmesinden sorumlu modülün yapısını ve temel yöntemlerini gözden geçirmiş olduk. Açıklanan modül bu makaleye GannTrailing.mqh dosyası olarak eklenmiştir.
Alım satım sinyallerine dayanarak EA'nın Üretimi
EA'nın “Masters MQL5” kullanarak bir şablon tarafından üretilmesi oldukça basit bir iştir. Bu işlem bir dizi adımdan oluşur:
- 1. Adım
Ana menü MetaEditor'ın File / New komutlarını kullanarak EA üretiminin yöneticisini çağırın. Ekranda aşağıdaki iletişim kutusu penceresi görüntülenir:
Şekil 10. MQL5 Sihirbazında hazır Uzman Danışman iletişim kutusu oluşturma
“EA (oluştur)” yazısının yer aldığı “radyo düğmesini” seçin ve “Next” (İleri) düğmesine tıklayın; EA oluşturmanın bir sonraki adımına geçin.
- 2. Adım
Bu adımda EA'nın genel parametrelerini belirleriz: isim, “sihirli” sayı, vb. Aşağıdaki iletişim penceresi görüntülenir:
Şekil 11. Uzman Danışmanın genel özellikleri
EveryTick parametresinin değerini doğru olarak belirleyin; her tik için EA'nın çalışmasına ihtiyacımız vardır, “sihirli” sayı değişmeden bırakılabilir. “Next” (İleri) düğmesine tıklayın ve üretimin bir sonraki adımına geçin.
- 3. Adım
Bu adımda EA sinyallerinin parametrelerini belirtin. İlk olarak, listeden belirli bir sinyal türünü seçiyoruz:
Şekil 12. Alım satım sinyalleri modülünün seçimi
Daha önce yazılmış olan sinyalimizin adını seçtikten sonra ekranda aşağıdaki türde bir iletişim kutusu görünecektir:
Şekil 13. Alım satım sinyali modülünün giriş parametreleri
Burada parametrelerin varsayılan değerlerini düzeltebiliriz. Tekrardan “Next” (İleri) düğmesine basın ve bir sonraki adıma geçin.
- 4. Adım
Bu adımda açık pozisyonu desteklemeye yönelik takip türünü seçin. Listeden herhangi birini seçebiliriz ancak daha önce oluşturulan takip-durdur yöntemini seçeceğiz:
Şekil 14. Takip pozisyonu türünü seçme
Aşağıdaki iletişim penceresini görürüz:
Şekil 15. Takip parametrelerinin belirtilmesi
Burada belirtilen dış parametreler için varsayılan değerleri ayarlayabiliriz. “Next” (İleri) düğmesine basın ve bir sonraki adıma geçin.
- 5. Adım
Şekil 16. Para yönetimi parametrelerinin belirtilmesi
Burada sermaye yönetimi parametrelerini seçebiliriz (çalışma lotunun hesaplanması yöntemi). Sabit bir işlem hacmi ile alım satım şeklinde bırakın. “Done” (Bitti( düğmesine basın ve belirli bir ada, pozisyon açma algoritmasına, takip ve sermaye yönetimi kurallarına sahip hazır bir EA elde edin.
Oluşturulan EA'nın çalıştığından emin olmak için test edin:
Şekil 17. Oluşturulan Uzman Danışmanı test etme
Doğru bir şekilde tanımlanan trendlerin tamamen (bu yöntemin izin verdiği ölçüde) alındığını görebiliyoruz. Ayrıca genel hususlarla belirtilen varsayılan parametreleri kullandık.
Sonuç
Gerçeklere dayanarak Gann teorisinin sadece ilk kısmını ve model şeklinde alım satım sistemlerinde ve piyasa analizinde uygulanmasını ele aldık. Görünüşe bakılırsa, teorinin uygulamasının en iyi sonuçları grafiğin çubuklara bölünmesinin alım satımın doğal organizasyonuyla örtüştüğü bu zaman dönemlerinde elde edilebilir.
Hisse senedi piyasaları içinse bu günlük, haftalık ve aylık aralıklarla alım satım yapılmasıdır. Döviz piyasası için seans aralıklarını kullanarak alım satım yapılmasıdır. Emtia piyasaları içinse bu sadece günlük, haftalık ve aylık aralıklarla değil, aynı zamanda piyasadaki dönemsel dalgalanmaları kullanarak alım satım yapılmasıdır.
Sonuç Yazısı
Konuyla doğrudan ilgili olmayan ancak Gann fikriyle ilgili olacak şekildebiraz ekstra araştırma yapmaya karar verdim. Daha spesifik olacak olursak soru şudur: Fiyat, hareketi sırasında “yuvarlak” olarak adlandırılan seviyeleri işaret ediyor mu? yani Euro para birimleri ve hisse senetleri için 50 ve 100 rakamlarıyla biten fiyat seviyeleri (Japon yeni için “yuvarlak” fiyat seviyesi 40 ile biten bir fiyattır).
Bunun için ondalık noktadan sonraki son rakamlarda piklerin ve diplerin dağıtım diyagramını oluşturalım. Beş basamaklı fiyatlandırmalar için ondalık noktadan sonra son üç basamak vardır (son basamak: onuncu basamak). Günlük çubuklar için ara trend grafiğini kullanacağız.
Dairesel bir eksende, sıfırdan elliye kadar olacak şekilde fiyatın son rakamlarını çizeriz (bir noktanın onda birine kadar); dikey eksendeyse bu seviyelerde oluşan pik veya dip sayısını alarak çizeriz. Bu işlemi pikler, dipler ve toplam rakam için ayrı ayrı yapın.
İşte 2000 yılından 2011 yılına kadar olan aralıkta ve günlük zaman diliminde bazı önemli para birimi çiftlerine ilişkin görseller:
Bu sonuçları nasıl yorumlayabiliriz? İlk olarak, diyagramlarda bozulmalar mevcuttur. Yani tüm fiyat değerlerininpik veya dip oluşturma olasılığı eşit değildir. İkincisi, bu değerler “yuvarlak” değerlerle tam olarak örtüşmemektedir, ki beklenen de esasen bu şekildedir. Bunun alım satım için kullanılıp kullanılmayacağını söylemek zor. Bunun için daha ciddi bir araştırma gereklidir. Belki de pratik açıdan daha ilginç sonuçlar borsada elde edilebilir.
En azından bu, türünün en kötüsü olmayan, tarihin analizi için başka bir araçtır.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/219
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz