English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Mikro, Orta ve Ana Eğilimlerin Göstergeleri

Mikro, Orta ve Ana Eğilimlerin Göstergeleri

MetaTrader 5Ticaret | 16 Aralık 2021, 14:38
78 0
Dmitriy Skub
Dmitriy Skub


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.

Şekil 1. Küçüktrendlertrendler

Ş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ı

            
            

MaxBars

 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.
            
            

IsSaveTrendParams

 True ise geçerli trendin parametreleri ve güncel pik ve dip parametreleri genel değişkenlerde depolanır.
            
            

ShowInfo

 True ise grafik penceresi güncel pik ve diplerin koordinatlarını görüntüler.
            
            

UpDownInfoShift

 Bilgi çıktısının yerinin yukarıdan aşağıya dikey bir şekilde kayması.
            
            

LeftRightInfoShift

 Bilgi çıktısının yerinin soldan sağa yatay bir şekilde kayması.
            
            

TitlesColor

 Bilgi çıkışı sırasında başlıkların rengi.
            
            

TopFieldsColor

 Güncel pik parametrelerinin çıktısı sırasında metnin rengi.
            
            

LowFieldsColor

 Güncel dip çıktısı sırasında metnin rengi.
            
            

UpTrendColor

 Yukarı yönlü hareketin çizgi çiziminin rengi.
            
            

DnTrendColor

 Aşağı yönlü hareketin çizgi çiziminin rengi.
            
            

LineWidth

 Trend çizgilerinin genişliği.
            
            

UpStopLossColor

 Pikleri gösteren sağ fiyat etiketinin rengi.
            
            

DnStopLossColor

 Dipleri gösteren sol fiyat etiketinin rengi.
            
            

StopLossWidth

 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

Ş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. Ara trend

Ş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

Ş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

Ş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

Ş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

Ş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

Ş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

Ş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.
SATIŞ pozisyonunun ayarlanma işlemi ayna görüntü eylemleriyle meydana gelir.


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

Ş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 Şekil

Ş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

Ş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

Ş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

Şekil 14. Takip pozisyonu türünü seçme

Aşağıdaki iletişim penceresini görürüz:

Şekil 15. Takip parametrelerinin belirtilmesi

Ş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

Ş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

Ş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

Ekli dosyalar |
ganntrailing.mqh (9.81 KB)
gannmicrotrend.mq5 (16.42 KB)
gannmiddletrend.mq5 (16.64 KB)
gannmaintrend.mq5 (16.32 KB)
textdisplay__1.mqh (15.54 KB)
Grafiklerin Analizine Ekonometrik Yaklaşım Grafiklerin Analizine Ekonometrik Yaklaşım
Bu makale ekonometrik analiz yöntemlerini, otokorelasyon analizini ve özellikle koşullu varyans analizini açıklamaktadır. Burada açıklanan yaklaşımın faydası nedir? Doğrusal olmayan GARCH modellerinin kullanımı, analiz edilen serilerin matematiksel açıdan resmi olarak temsil edilmesine ve belirli sayıda adım için bir tahmin oluşturulmasına olanak tanır.
Alım Satım Modellerine Dayalı Çoklu Uzman Danışmanlar Oluşturma Alım Satım Modellerine Dayalı Çoklu Uzman Danışmanlar Oluşturma
MQL5'te nesne yönelimli yaklaşımı kullanmak, çoklu para birimli/çoklu sistemli/çoklu zaman dilimli Uzman Danışmanların oluşturulmasını büyük ölçüde basitleştirir. Tek bir EA ile birkaç düzine alım satım stratejisinde, mevcut tüm araçlarda ve olası tüm zaman dilimlerinde işlem yapabildiğini hayal edin! Buna ek olarak, EA test edicide kolayca test edilir ve bileşimine dâhil edilen tüm stratejiler için bir veya birkaç para yönetimi çalışma sistemine sahiptir.
MQL5 Sihirbazı: Alım Satım Sinyalleri Modülü Nasıl Oluşturulur MQL5 Sihirbazı: Alım Satım Sinyalleri Modülü Nasıl Oluşturulur
Bu makale fiyatın ve hareketli ortalamanın kesişimine ilişkin sinyallerin uygulanmasıyla kendi alım satım sinyalleri sınıfınızı nasıl yazacağınız ve bunu MQL5 Sihirbazının alım satım stratejileri oluşturucusuna nasıl ekleyeceğinizle birlikte MQL5 Sihirbazı için oluşturulan sınıfın tanımının yapısını ve biçimini açıklar.
Çizim Kanalları - İçeriden ve Dışarıdan Görünüm Çizim Kanalları - İçeriden ve Dışarıdan Görünüm
Kanalların piyasa analizi ve hareketli ortalamalardan sonra alım satım kararları almak için en popüler araç olduğunu söylersem sanırım abartmış olmam. Kanalları ve bileşenlerini kullanan alım satım stratejileri yığınına derinlemesine dalmadan, istemci terminalinin ekranında üç uçdeğer tarafından belirlenen bir kanal çizen bir göstergenin matematiksel temelini ve pratik uygulamasını açıklayacağız.