English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
Mum formasyonlarını tespit etmek için MQL5 nasıl kullanılır?

Mum formasyonlarını tespit etmek için MQL5 nasıl kullanılır?

MetaTrader 5Alım-satım |
392 22
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

Mumlar doğru kullanıldığında çok faydalı bir teknik araçtır. Grafik üzerinde belirli formasyonlar oluşturabilirler. Bunları analiz ederek, bir finansal enstrümanın potansiyel hareketini öngörebiliriz. Formasyonlar iki türe ayrılabilir: tek mumdan oluşan formasyonlar ve birden fazla mumdan oluşan formasyonlar. Bu makalede, MetaTrader 5'te formasyonları otomatik olarak tespit etmek için MQL5'i nasıl kullanabileceğimizi öğreneceğiz. Bu amaçla aşağıdaki konuları inceleyeceğiz:

Anlamlı sinyaller elde etmek için tüm formasyonların diğer teknik araçlarla birlikte kullanılması gerektiğini lütfen unutmayın. Bu nedenle, bu makalede, MQL5’i kullanarak mum formasyonlarını tespit etmenin temel ilkelerini inceleyeceğiz, böylece bu formasyonları alım-satım sistemlerinizin bir parçası olarak kullanabilirsiniz.

Sorumluluk reddi: Sağlanan tüm bilgiler ’olduğu gibi’ yalnızca bilgilendirme amaçlıdır, alım-satım tavsiyesi değildir. Bu bilgiler herhangi bir sonucu garanti etmemektedir. Bu materyalleri herhangi bir işlem hesabında kullanırsanız, ortaya çıkabilecek tüm riskler size ait olacaktır.

Tek mum formasyonları

Bu bölümde, tek mumdan oluşan iki popüler formasyon örneğine bakacağız. Bu mumlar herhangi bir zaman diliminde ortaya çıkabilir ve fiyat hareketine göre konumlarını analiz etmeniz gerekir. Bunlar Doji ve Çekiç formasyonlarıdır.

Doji formasyonu:

Mum formasyonları arasında çok popülerdir. Neredeyse aynı açılış ve kapanış fiyatına sahiptir, bu da üst ve alt gölgeleri olan veya hatta hiç gölgesi olmayan çok küçük bir gövde oluşturmasıyla sonuçlanır. İşte böyle bir mum örneği:

Doji

Bu Doji mumu, alıcılar ve satıcılar arasında bir denge olduğunu ve bu mumun göründüğü süre boyunca hiçbir gücün piyasaya hakim olamadığını veya fiyatı yukarı veya aşağı hareket ettiremediğini gösterir. Bu durum piyasada bir terse dönüş veya düzeltme sinyali verebilir, bir düzeltmeden önce veya bir trendin sonunda ortaya çıkabilir. Bu formasyon daha büyük zaman dilimlerinde daha önemli kabul edilir. Yusufçuk, Uzun Bacaklı gibi birçok Doji mum türü vardır. Her biri alım-satım için kullanılabilecek belirli bilgiler taşır.

Yapmamız gereken şey, programın her tikte son mum fiyatını ve zamanını belirlemesini ve Doji formasyonunu tespit etmek için bu değerleri karşılaştırmasını sağlamaktır. Eğer açılış fiyatı kapanış fiyatına eşitse, program bunun bir Doji mum formasyonu olduğuna dair bir sinyal vermelidir.

Şimdi bu formasyonu bulabilecek bir programın nasıl oluşturulacağını görelim. Bu süreci adım adım ele alalım:

Dojiyi tespit etmek için bir fonksiyon (getDoji) oluşturacağız. Formasyonun mevcut olup olmadığını her tikte kontrol etmek için OnTick() içinde çağıracağız.

void OnTick()
  {
   getDoji();
  }

“getDoji” fonksiyonunu bir tamsayı değişkeni olarak oluşturalım.

int getDoji()

Son mumun zamanını, açılış, yüksek, düşük ve kapanış fiyatlarını belirleyerek fonksiyonu tanımlayalım.

Bunu yapmak için, mumun açılış zamanını geri döndüren “iTime”, mumun açılış fiyatını geri döndüren “iOpen”, mumun yüksek fiyatını geri döndüren “iHigh”, mumun düşük fiyatını geri döndüren “iLow” ve mumun kapanış fiyatını geri döndüren “iClose” fonksiyonlarını kullanırız. Parametreler hepsi için aynıdır:

  • symbol - Sembol adı. Mevcut sembole uygulanmak üzere (_Symbol) kullanacağız.
  • timeframe - Zaman dilimi. Mevcut zaman dilimine uygulanmak üzere (PERIOD_CURRENT) kullanacağız.
  • shift - Zaman serisinden istenen değerin indeksi. Son mum için (1) kullanacağız.
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);

if ifadesini kullanarak Dojiyi tespit etmek için koşulu tanımlayalım.

if(open==close)

Bu koşul sağlanırsa, programımız “createObj” fonksiyonuna dayalı olarak bir nesne oluşturacaktır. Nesneyi oluşturmak için zaman, fiyat, ok kodu, renk ve metin gibi belirli parametreler kullanacağız. Fonksiyonu tamamlayalım ve 1 değerini geri döndürelim.

   if(open==close)
     {
      createObj(time,low,217, clrBlack,"Doji");
        {
         return 1;
        }
     }

“getDoji” fonksiyonunu tamamlamak için 0 geri döndüreceğiz

   return 0;

“void” fonksiyonunu kullanarak “createObj” fonksiyonunu time, price, arrowCode, clr ve txt parametreleri ile oluşturalım.

void createObj(datetime time, double price, int arrawCode, color clr, string txt)

(" ") değerine atanmış bir objName dizge değişkeni oluşturalım.

string objName=" ";

“StringConcatenate” fonksiyonunu kullanarak objName değişkenine atamak için dizgeleri birleştirelim; bu fonksiyon iletilen parametrelerden bir dizge oluşturur ve oluşturulan dizgenin boyutunu geri döndürür. Parametreleri şunlardır:

  • string_var - Birleştirme işleminden sonra oluşacak dizgenin yazılacağı değişken. (objName) kullanacağız.
  • argument1 - Sinyali belirtmek için "Signal at " metnini kullanacağız.
  • argument2 - Tespit edilen mumun zamanını tanımlamak için önceden tanımlanmış değişkenin (time) değerini kullanacağız.
  • argument3 - " at " metnini ayarlayacağız.
  • argument4 - double türünü string türüne dönüştürmek için “DoubleToString” fonksiyonunu kullanarak yuvarlatılmış fiyat metnini ayarlayacağız.
  • argument5 - " (" metnini ayarlayacağız.
  • argument6 - Önceden tanımlanmış değişkenin (arrowCode) değerini kullanacağız. Bu kod, MQL5 Referansında “Wingdings” aranarak bulunabilir.
  • argument7 - ")" metnini ayarlayacağız.
StringConcatenate(objName, "Signal at ",time, " at ",DoubleToString(price,_Digits)," (",arrawCode,")");

Ardından, if ifadesini ve “ObjectCreate” fonksiyonunu kullanarak bir koşul ayarlayalım. “ObjectCreate” fonksiyonu, önceden tanımlanmış objName adını kullanarak bir nesne oluşturur. Parametreleri şunlardır:

  • chart_id - Grafik kimliği. Mevcut grafiği temsil etmek için (0) kullanacağız.
  • name - Nesne adı. Önceden tanımlanmış adı (objName) kullanacağız.
  • type - Nesne türü. (OBJ_ARROW) kullanacağız.
  • nwin - Pencere indeksi. Ana pencere için (0) kullanacağız.
  • time1 - Çapanın zamanı. Önceden tanımlanmış değişkeni (time) kullanacağız.
  • price1 - Çapanın fiyatı. Önceden tanımlanmış değişkeni (price) kullanacağız.
if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))

Bu koşul karşılanırsa, nesneyi oluştururuz. Devamında, nesne özelliklerini ayarlayan “ObjectSetInteger” fonksiyonunu kullanarak nesnenin şeklini (ok kodunu belirterek) ve rengini ayarlamamız gerekiyor. Parametreleri şunlardır:

  • chart_id - Grafik kimliği. Mevcut grafiği temsil etmek için (0) kullanacağız.
  • name - Nesne adı. (objName) kullanacağız.
  • prop_id - Nesne özelliği kimliği. ENUM_OBJECT_PROPERTY_INTEGER numaralandırmasından değerleri kullanacağız: nesne türünü seçmek için (OBJPROP_ARROWCODE) ve renk için (OBJPROP_COLOR).
  • prop_value - Özellik değeri. Ok kodu için önceden tanımlanmış değişkeni (arrawCode) ve renk için önceden tanımlanmış değişkeni (clr) kullanacağız.
ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);

Şimdi, mum hakkında bilgi gösterecek bir metin nesnesi oluşturalım. İlk olarak, önceden tanımlanmış objName ve txt değişkenlerini atayarak nesne adını belirleyeceğimiz dizge türünde candleName isimli bir değişken oluşturalım.

string candleName=objName+txt;

if ifadesini ve “ObjectCreate” fonksiyonunu kullanarak bir koşul ayarlayıp nesneyi oluşturalım. Nesnenin dizge türündeki metin özelliğini ayarlamak için “ObjectSetString” fonksiyonunu ve renk özelliğini ayarlamak için “ObjectSetInteger” fonksiyonunu kullanacağız.

      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);

Şimdi elimizde ne olduğuna bir göz atalım. Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                        Doji pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   getDoji();
  }
int getDoji()
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
//Doji
   if(open==close)
     {
      createObj(time,low,217, clrBlack,"Doji");
        {
         return 1;
        }
     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal at ",time, " at ",DoubleToString(price,_Digits)," (",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Kodu derleyelim. Hiçbir hata ortaya çıkmamalıdır. Program daha sonra terminaldeki Kılavuz penceresinde görünecektir. Çalıştırmak için grafiğe sürükleriz. Uzman Danışman, grafikteki Doji formasyonunu algılar ve gösterir. Aşağıda bir örnek yer almaktadır:

Doji örneği

Gördüğünüz gibi, mumun altında siyah bir ok ve mum formasyonunu tanımlayan “Doji” metni olan bir nesneye sahibiz.

Çekiç formasyonu:

Çekiç formasyonu, birçok zaman dilimlerinde oluşabilen çok popüler bir mum formasyonudur Adı, uzun bir gölgesi ve küçük bir gövdesi olduğu için şeklinden gelir. İki tür çekiç formasyonu vardır: küçük gövdenin konumuna bağlı olarak Çekiç ve Ters Çekiç. Uzun bir alt gölgeye sahipse ve mumun gövdesi yukarıdaysa, bu bir Çekiçtir ve açılış ve kapanış fiyatlarının konumuna bağlı olarak boğa veya ayı türünde olabilir. Aşağıdaki formasyonlar Çekiç örnekleridir:

  • Boğa tipi Çekiç:

Boğa tipi Çekiç

Bu formasyon satıcıların fiyatı düşürmeye çalıştığını, ancak alıcıların piyasayı kontrol ettiğini gösterir. Mumun açılış seviyesinin üzerinde kapanması alıcıların güçlü olduğunu gösterir.

  • Ayı tipi Çekiç:

Ayı tipi Çekiç

Bu formasyon, satıcıların fiyatı düşürmeye çalıştığını, ancak alıcıların mumu açılış fiyatına yakın kapattığını gösterir, yani alıcılar hala aktiftir.

Mumun uzun bir üst gölgesi varsa ve gövdesi alttaysa, bu bir Ters Çekiç formasyonudur ve açılış ve kapanış fiyatlarının konumuna bağlı olarak boğa veya ayı türünde olabilir. Ters Çekiç örnekleri:

  • Boğa tipi Ters Çekiç:

Boğa tipi Ters Çekiç

Alıcıların fiyatı yükseltmeye çalıştığını, ancak satıcıların mumu açılış ve düşüş civarında kapattığını gösterir, bu da alıcıların gücüne rağmen satıcıların hala aktif olduğu anlamına gelir.

  • Ayı tipi Ters Çekiç:

Ayı tipi Ters Çekiç

Bu formasyon alıcıların fiyatı yükseltmeye çalıştığını, ancak satıcıların piyasayı kontrol ettiğini gösterir. Mumun açılıştan daha aşağıda kapanması satıcıların daha güçlü olduğunu yansıtır.

Tüm mum formasyonları gibi bu formasyon da diğer teknik araçlarla birleştirildiğinde daha anlamlı olacaktır. 

Şimdi, bu formasyonu tespit etmek için kullanılabilecek bir program oluşturacağız. Formasyonu tespit etmek için her tikte mumun fiyatını, zamanını ve boyutunu belirleyeceğiz, gövdeyi ve gölgeleri karşılaştıracağız. Bir Çekiç veya Ters Çekiç formasyonu tespit edildiğinde, grafikte boğa veya ayı tipi olmasına bağlı kırmızı veya yeşil bir ok ve formasyon adı görüntülenecektir.

Programın tam kodu şu şekildedir:

//+------------------------------------------------------------------+
//|                                      Hammer pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   getHammer(0.07,0.7);
  }
int getHammer(double smallShadowRatio, double longShadowRatio)
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double candleSize=high-low;
   if(open<close)
     {
      if(high-close < candleSize*smallShadowRatio)
        {
         if(open-low>candleSize*longShadowRatio)
            createObj(time,low,217, clrGreen,"Hammer");
           {
            return 1;
           }
        }
     }
   if(open>close)
     {
      if(high-open<candleSize*smallShadowRatio)
        {
         if(close-low>candleSize*longShadowRatio)
            createObj(time,high,218,clrRed,"Hammer");
           {
            return 1;
           }
        }
     }
   if(open<close)
     {
      if(open-low < candleSize*smallShadowRatio)
        {
         if(high-close>candleSize*longShadowRatio)
            createObj(time,low,217, clrGreen,"Inverted Hammer");
           {
            return -1;
           }
        }
     }
   if(open>close)
     {
      if(close-low < candleSize*smallShadowRatio)
        {
         if(high-open>candleSize*longShadowRatio)
            createObj(time,high,218, clrRed,"Inverted Hammer");
           {
            return -1;
           }
        }
     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal@",time, "at",DoubleToString(price,_Digits),"(",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);
      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Bu koddaki farklılıklar şunlardır:

Burada, gerekli smallShadowRatio ve longShadowRatio parametrelerinin tanımıyla birlikte OnTick() içinde “getHammer” fonksiyonunu çağırıyoruz.

void OnTick()
  {
   getHammer(0.07,0.7);
  }

İki double türünde değişken smallShadowRatio ve longShadowRatio parametreleri ile “getHammer” fonksiyonunu oluşturuyoruz.

int getHammer(double smallShadowRatio, double longShadowRatio)

Karşılaştırma için kullanılacak mum boyutu için candleSize adında double türünde bir değişken oluşturuyoruz.

double candleSize=high-low;

Çekiç formasyonunun koşulları,

Boğa tipi Çekiç olması durumunda (open<close): son mum boğa türünde olmalı, mumun üst gölgesi (high-close) kısa gölge oranından (0.07) küçük ve alt gölge (open-low) uzun gölge oranından (0.7) büyük olmalıdır. Grafikte Çekiç mumunun düşük seviyesinin altında, Wingdings'ten (217) koduyla yeşil bir ok ve “Hammer” etiketli bir metin nesnesi oluşturuyoruz ve fonksiyonu tamamlıyoruz.

   if(open<close)
     {
      if(high-close < candleSize*smallShadowRatio)
        {
         if(open-low>candleSize*longShadowRatio)
            createObj(time,low,217, clrGreen,"Hammer");
           {
            return 1;
           }
        }
     }

Ayı tipi Çekiç olması durumunda (open>close): son mum ayı türünde olmalı, mumun üst gölgesi (high-open) kısa gölge oranından (0.07) küçük ve alt gölge (close-low) uzun gölge oranından (0.7) büyük olmalıdır. Grafikte Çekiç mumunun yüksek seviyesinin üzerinde, Wingdings'ten (218) koduyla kırmızı bir ok ve “Hammer” etiketli bir metin nesnesi oluşturuyoruz ve fonksiyonu tamamlıyoruz.

   if(open>close)
     {
      if(high-open<candleSize*smallShadowRatio)
        {
         if(close-low>candleSize*longShadowRatio)
            createObj(time,high,218,clrRed,"Hammer");
           {
            return 1;
           }
        }
     }

Boğa tipi Ters Çekiç olması durumunda (open<close): son mum boğa türünde olmalı, mumun alt gölgesi (open-low) kısa gölge oranından (0.07) küçük ve üst gölge (high-close) uzun gölge oranından (0.7) büyük olmalıdır. Grafikte Ters Çekiç mumunun düşük seviyesinin altında, Wingdings'ten (217) koduyla yeşil bir ok ve “Inverted Hammer” etiketli bir metin nesnesi oluşturuyoruz ve fonksiyonu tamamlıyoruz.

   if(open<close)
     {
      if(open-low < candleSize*smallShadowRatio)
        {
         if(high-close>candleSize*longShadowRatio)
            createObj(time,low,217, clrGreen,"Inverted Hammer");
           {
            return -1;
           }
        }
     }

Ayı tipi Ters Çekiç olması durumunda (open>close): son mum ayı türünde olmalı, mumun alt gölgesi (close-low) kısa gölge oranından (0.07) küçük ve üst gölge (high-open) uzun gölge oranından (0.7) büyük olmalıdır. Grafikte Ters Çekiç mumunun yüksek seviyesinin üzerinde, Wingdings'ten (218) koduyla kırmızı bir ok ve “Inverted Hammer” etiketli bir metin nesnesi oluşturuyoruz ve fonksiyonu tamamlıyoruz.

   if(open>close)
     {
      if(close-low < candleSize*smallShadowRatio)
        {
         if(high-open>candleSize*longShadowRatio)
            createObj(time,high,218, clrRed,"Inverted Hammer");
           {
            return -1;
           }
        }
     }

if operatörünü kullanarak mumun türüne bağlı olarak okun konumunu düzenliyoruz; koşulda rengi kullanıyoruz ve ifade doğruysa “ObjectSetInteger” fonksiyonu aracılığıyla okun konumunu ayarlıyoruz.

Eğer mumun altında yeşil bir ok olacaksa.

      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);

Eğer mumun üzerinde kırmızı bir ok olacaksa.

      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);

Uzman Danışman kodunu derliyoruz ve grafik üzerinde çalıştırıyoruz. Çalışmasının bir örneği aşağıda gösterilmiştir:

  • Boğa tipi Çekiç:

Boğa tipi Çekiç örneği

Gördüğümüz gibi, grafikte boğa tipi Çekicin düşük seviyesinin altında yeşil bir oka ve yeşil bir “Hammer” metin nesnesine sahibiz.

  • Ayı tipi Çekiç:

Ayı tipi Çekiç örneği

Gördüğümüz gibi, grafikte ayı tipi Çekicin yüksek seviyesinin üzerinde kırmızı bir oka ve kırmızı bir “Hammer” metin nesnesine sahibiz.

  • Boğa tipi Ters Çekiç:

Boğa tipi Ters Çekiç örneği

Gördüğümüz gibi, grafikte boğa tipi Ters Çekicin düşük seviyesinin altında yeşil bir oka ve yeşil bir “Inverted Hammer” metin nesnesine sahibiz.

  • Ayı tipi Ters Çekiç:

Ayı tipi Ters Çekiç örneği

Gördüğümüz gibi, grafikte ayı tipi Ters Çekicin yüksek seviyesinin üzerinde kırmızı bir oka ve kırmızı bir “Inverted Hammer” metin nesnesine sahibiz.

İkili mum formasyonları

Bu bölümde, mum formasyonlarının başka bir türünü göreceğiz - iki mumdan oluşan formasyonlar. Şimdi iki popüler formasyona göz atalım: boğa ve ayı türünde olan Yutucu formasyonun yanı sıra, boğa türünde olan Delici Hat formasyonu ve onun karşıtı ayı türünde olan Kara Bulut Örtüsü formasyonu.

Yutucu formasyon:

Bu mum formasyonu da grafikte ve teknik analizde çok popülerdir. Biri diğerini yutan iki mumdan oluşur, yani küçük bir mumun ardından daha büyük bir mum gelir ve bu büyük mum küçük mumu tamamen kaplar.

Yutan formasyonun türü mumların rengine ve yönüne bağlıdır:

  • Boğa tipi Yutucu:

Küçük bir düşüş mumunun ardından gelen büyük bir yükseliş mumundan oluşur ve bu yükseliş mumu küçük olanı tamamen yutar:

Boğa tipi Yutucu

Alıcıların piyasayı kontrol ettiğini ve böyle bir mumdan sonra fiyatın yükselmeye devam edebileceğini gösterebilir.

  • Ayı tipi Yutucu:

Küçük bir yükseliş mumunun ardından gelen büyük bir düşüş mumundan oluşur ve bu düşüş mumu küçük olanı tamamen yutar:

Ayı tipi Yutucu

Satıcıların piyasayı kontrol ettiğini ve böyle bir mumdan sonra fiyatın düşmeye devam edebileceğini gösterebilir.

Şimdi bu formasyonu otomatik olarak tespit etmek için bir program oluşturalım. Son mumun zamanını ve son iki mumun fiyatlarını belirlememiz gerekiyor. Bunu yapmak için, bu değerleri her tikte kontrol edeceğiz ve mumların birbirlerine göre konumlarını belirleyeceğiz. Buna dayanarak, gerekli Yutma formasyonu türünün varlığını tespit edeceğiz. Yutan formasyon bulunursa, grafikte, formasyonun türüne (Boğa veya Ayı) bağlı olarak ilgili renkte bir ok ve bir metin nesnesi olan belirli bir sinyal görüntüleyeceğiz.

Aşağıda bu programı oluşturmak için gerekli kodun tamamı yer almaktadır:

//+------------------------------------------------------------------+
//|                                   Engulfing pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   getEngulfing();
  }
int getEngulfing()
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);
   if(open<close)
     {
      if(open2>close2)
        {
         if(high>high2&&low<low2)
           {
            if(close>open2&&open<close2)
              {
               createObj(time,low,217, clrGreen,"Bullish Engulfing");
                 {
                  return 1;
                 }
              }
           }
        }
     }
   if(open>close)
     {
      if(open2<close2)
        {
         if(high>high2&&low<low2)
           {
            if(close<open2&&open>close2)
              {
               createObj(time,high,218, clrRed,"Bearish Engulfing");
                 {
                  return -1;
                 }
              }
           }
        }
     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal@",time, "at",DoubleToString(price,_Digits),"(",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);
      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Bu koddaki farklılıklar şunlardır:

“getEngulfing” fonksiyonunda kullanılacak son mumun zamanı ve son iki mumun fiyatı için double türünde değişkenler oluşturuyoruz. Son mum için time, open, high, low ve close parametreleri ve sondan bir önceki mum için open2, high2, low2 ve close2 parametreleri kullanılacaktır.

   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);

Bu mum formasyonunu belirlemek için koşullar:

Boğa tipi Yutucu durumunda, son mum boğa türünde olmalı (open<close), sondan bir önceki mum ayı türünde olmalı (open2>close2), son mumun yüksek seviyesi (high) sondan bir önceki mumun yüksek seviyesinden (high2) daha yüksek ve son mumun düşük seviyesi (low) sondan bir önceki mumun düşük seviyesinden (low2) daha düşük olmalıdır. Buna ek olarak, son mumun kapanışı (close) sondan bir önceki mumun açılışından (open2) daha yüksek ve son mumun açılışı (open) sondan bir önceki mumun kapanışından (close2) daha düşük olmalıdır. Formasyonu tanımladıktan sonra, oluşturulan “createObj” fonksiyonuna dayalı olarak aşağıdaki parametrelerle bir nesne oluşturuyoruz:

  • time - Son mumun zamanı olan önceden tanımlanmış değişkeni (time) kullanacağız.
  • price - Nesnenin altına yerleştirileceği son mumun düşük seviyesi.
  • arrowCode - Wingdings'ten 217.
  • clr - clrGreen.
  • txt - "Bullish Engulfing".

Ardından fonksiyonu sonlandırıyoruz.

   if(open<close)
     {
      if(open2>close2)
        {
         if(high>high2&&low<low2)
           {
            if(close>open2&&open<close2)
              {
               createObj(time,low,217, clrGreen,"Bullish Engulfing");
                 {
                  return 1;
                 }
              }
           }
        }
     }

Ayı tipi Yutucu durumunda, son mum ayı türünde olmalı (open>close), sondan bir önceki mum boğa türünde olmalı (open2<close2), son mumun yüksek seviyesi (high) sondan bir önceki mumun yüksek seviyesinden (high2) daha yüksek ve son mumun düşük seviyesi (low) sondan bir önceki mumun düşük seviyesinden (low2) daha düşük olmalıdır. Buna ek olarak, son mumun kapanışı (close) sondan bir önceki mumun açılışından (open2) daha düşük ve son mumun açılışı (open) sondan bir önceki mumun kapanışından (close2) daha yüksek olmalıdır. Formasyonu tanımladıktan sonra, oluşturulan “createObj” fonksiyonuna dayalı olarak aşağıdaki parametrelerle bir nesne oluşturuyoruz:

  • time - Son mumun zamanı olan önceden tanımlanmış değişkeni (time) kullanacağız.
  • price - Nesnenin üzerine yerleştirileceği son mumun yüksek seviyesi.
  • arrowCode - Wingdings'ten 218.
  • clr - clrRed.
  • txt - "Bearish Engulfing".

Ardından fonksiyonu sonlandırıyoruz.

   if(open>close)
     {
      if(open2<close2)
        {
         if(high>high2&&low<low2)
           {
            if(close<open2&&open>close2)
              {
               createObj(time,high,218, clrRed,"Bearish Engulfing");
                 {
                  return -1;
                 }
              }
           }
        }
     }

Bu kodu hatasız derledikten ve programı çalıştırdıktan sonra, aşağıdaki örneklerde olduğu gibi sinyalleri alabiliriz:

  • Boğa tipi Yutucu:

Boğa tipi Yutucu örneği

Grafikte formasyondaki son mumun düşük seviyesinin altında yeşil bir ok ve “Bullish Engulfing” yazısını görüyoruz.

  • Ayı tipi Yutucu:

Ayı tipi Yutucu örneği

Grafikte formasyondaki son mumun yüksek seviyesinin üzerinde kırmızı bir ok ve “Bearish Engulfing” yazısını görüyoruz.

Delici Hat ve Kara Bulut Örtüsü formasyonu:

  • Delici Hat formasyonu:

Bu iki mumdan oluşan bir boğa formasyonudur. İlk önce ayı mumu, ardından daha düşük bir açılışa sahip bir boğa mumu gelir, devamında yukarı hareket eder ve ilk ayı mumunun ortasının üzerinde kapanır. İşte bu formasyona bir örnek:

Delici Hat

Bu formasyon alıcıların güçlendiğini ve piyasayı kontrol ederek satıcıların kontrolünün yerini aldığını gösterir. Dolayısıyla, açılışta boşluk olmasına rağmen alıcılar fiyatı bir önceki ayı mumunun ortasının üzerine çıkarabildiğinden, satıcıların gücünden alıcıların gücüne geçişi ifade eder.

  • Kara Bulut Örtüsü formasyonu:

Bu formasyon Delici Hat formasyonunun tam tersidir. İki mumdan oluşan bir ayı formasyonudur; bunlardan ilki boğa mumudur, ardından boşlukla birlikte bir ayı mumu gelir ve ilk boğa mumunun ortasının altında kapanır. Bu formasyon aşağıdaki yer almaktadır:

Kara Bulut Örtüsü

Bu formasyon satıcıların güçlendiğini ve piyasayı kontrol ederek alıcıların kontrolünün yerini aldığını gösterir. Dolayısıyla, alıcıların gücünden satıcıların gücüne doğru bir geçiş söz konusudur: Satıcılar, açılış daha yüksek olmasına rağmen fiyatı bir önceki boğa mumunun ortasının altına düşürebilmiştir.

Şimdi bu formasyonu otomatik olarak algılamak için bir program oluşturalım. Bunu yapmak için, ilk mumun zamanını (time) ve fiyatlarını (open, high, low ve close) ve ikinci mumun fiyatlarını (open2, high2, low2 ve close2), ikinci mumun boyutunu (candleSize2) ve ikinci mumun ortasını (candleMidPoint2) kontrol ederiz. Program sürekli olarak bu değerleri kontrol edecek ve birbirlerine göre konumlarını belirleyecektir. Boğa veya ayı durumuna dayalı belirli koşullara göre belirli bir sinyal geri döndürecektir.

Aşağıda bu programı oluşturmak için gerekli kodun tamamı yer almaktadır:

//+------------------------------------------------------------------+
//|                      Piercing && Dark Cloud pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   getPiercing();  
  }
int getPiercing()
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);
   double candleSize2=high2-low2;
   double candleMidPoint2=high2-(candleSize2/2);
   if(open<close)
     {
      if(open2>close2)
        {
         if(open<low2)
           {
            if(close>candleMidPoint2&&close<high2)
              {
               createObj(time,low,217, clrGreen,"Piercing");
                 {
                  return 1;
                 }
              }
           }
        }
     }
   if(open>close)
     {
      if(open2<close2)
        {
         if(open>high2)
           {
            if(close<candleMidPoint2&&close>low2)
              {
               createObj(time,high,218, clrRed,"Dark Cloud");
                 {
                  return -1;
                 }
              }
           }
        }
     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal@",time, "at",DoubleToString(price,_Digits),"(",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);
      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Bu koddaki farklılıklar şunlardır:

candleSize2 ve candleMidPoint2’yi tanımlıyoruz:

   double candleSize2=high2-low2;
   double candleMidPoint2=high2-(candleSize2/2);

Formasyonun koşulları:

Delici Hat formasyonu söz konusu olduğunda:

Son mum boğa türünde ise (open<close) ve open2 close2'nin üzerindeyse, open low2'nin altındaysa ve close candleMidPoint2'nin üzerindeyse ve close high2'nin altındaysa, grafikte formasyonun düşük seviyesinin altına “Piercing” kelimesiyle yeşil bir ok çizeceğiz ve fonksiyonu tamamlayacağız.

   if(open<close)
     {
      if(open2>close2)
        {
         if(open<low2)
           {
            if(close>candleMidPoint2&&close<high2)
              {
               createObj(time,low,217, clrGreen,"Piercing");
                 {
                  return 1;
                 }
              }
           }
        }
     }

Kara Bulut Örtüsü formasyonu söz konusu olduğunda:

Son mum ayı türünde ise (open>close) ve open2 close2'nin altındaysa, open high2'nin üzerindeyse ve close candleMidPoint2'nin altındaysa ve close low2'nin üzerindeyse, grafikte formasyonun yüksek seviyesinin üzerine “Dark Cloud” kelimesiyle kırmızı bir ok çizeceğiz ve fonksiyonu tamamlayacağız.

   if(open>close)
     {
      if(open2<close2)
        {
         if(open>high2)
           {
            if(close<candleMidPoint2&&close>low2)
              {
               createObj(time,high,218, clrRed,"Dark Cloud");
                 {
                  return -1;
                 }
              }
           }
        }
     }

Kodu derleyip grafik üzerinde çalıştıralım. Çalışmasının bir örneği aşağıda gösterilmiştir:

  • Delici Hat formasyonu:

Delici Hat örneği

Yukarıdaki grafikte formasyonun düşük seviyesinin altında yeşil bir ok ve “Piercing” yazısı var, ki bu beklediğimiz şeydi.

  • Kara Bulut Örtüsü formasyonu:

Koyu Bulut Örtüsü örneği

Grafikte beklediğimiz gibi formasyonun yüksek noktasının üzerinde kırmızı bir ok ve “Dark Cloud” yazısı görülüyor.

Üçlü mum formasyonları

Bu bölümde üç mumdan oluşan formasyonların iki örneğine bakacağız, bunlar Yıldız formasyonu (Sabah ve Akşam) ve Üçlü İçten formasyonudur (Yukarı ve Aşağı).

Yıldız formasyonu:

  • Sabah Yıldızı:

Bahsettiğimiz gibi üç mumlu bir yapıdır. İlki önce uzun bir ayı mumu, en son uzun bir boğa mumu ve iki mum arasında küçük bir mumdan oluşur. Bu formasyon aşağıdaki yer almaktadır:

Sabah Yıldızı

Bu formasyon, alıcıların piyasayı kontrol etmesi ve satıcıların baskısı altında düşmekte olan fiyatı yükseltmesi nedeniyle gücün satıcılardan alıcılara geçtiğini göstermektedir.

  • Akşam Yıldızı formasyonu:
Bu da üç mumlu bir yapıdır. İlki önce uzun bir boğa mumu, en son uzun bir ayı mumu ve iki mum arasında küçük bir mumdan oluşur. Bu formasyon aşağıda gösterilmiştir:

Akşam Yıldızı

Bu formasyon, gücün alıcılardan satıcılara geçtiğini gösterir: satıcılar piyasayı kontrol eder ve alıcıların baskısı altında bir ralliden sonra fiyatı aşağı çeker.

Bu formasyonu otomatik olarak tespit etmek için bir program oluşturalım. Bunu yapmak için, son mumun zamanını ve fiyatını ve önceki iki mumun fiyatlarını elde etmemiz, ayrıca son üç mumun boyutlarını almamız ve ilişkilerini belirlemek için bunları birbirleriyle karşılaştırmamız gerekir. Buna dayanarak gerekli formasyon türünün varlığını belirleyeceğiz.

Aşağıda bu programı oluşturmak için gerekli kodun tamamı yer almaktadır:

//+------------------------------------------------------------------+
//|                                        Star pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
void OnTick()
  {
   getStar(0.5);
  }
int getStar(double middleCandleRatio)
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);
   double open3=iOpen(_Symbol,PERIOD_CURRENT,3);
   double high3=iHigh(_Symbol,PERIOD_CURRENT,3);
   double low3=iLow(_Symbol,PERIOD_CURRENT,3);
   double close3=iClose(_Symbol,PERIOD_CURRENT,3);
   double candleSize=high-low;
   double candleSize2=high2-low2;
   double candleSize3=high3-low3;
   if(open<close)
     {
      if(open3>close3)
        {
         if(candleSize2<candleSize*middleCandleRatio && candleSize2<candleSize3*middleCandleRatio)
           {
            createObj(time,low,217, clrGreen,"Morning Star");
              {
               return 1;
              }
           }
        }

     }
   if(open>close)
     {
      if(open3<close3)
        {
         if(candleSize2<candleSize*middleCandleRatio && candleSize2<candleSize3*middleCandleRatio)
           {
            createObj(time,high,218, clrRed,"Evening Star");
              {
               return -1;
              }
           }
        }

     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal@",time, "at",DoubleToString(price,_Digits),"(",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);
      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Bu koddaki farklılıklar şunlardır:

middleCandleRatio parametresi ile “getStar” fonksiyonunu oluşturuyoruz.

int getStar(double middleCandleRatio)

Son mumun zamanı (time), son üç mumun fiyat verileri (open/open2/open3, high/high2/high3, low/low2/low3 ve close/close2/close3) ve son üç mumun boyutları (candleSize/candleSize2/candleSize3) için değişenler oluşturuyoruz.

   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);
   double open3=iOpen(_Symbol,PERIOD_CURRENT,3);
   double high3=iHigh(_Symbol,PERIOD_CURRENT,3);
   double low3=iLow(_Symbol,PERIOD_CURRENT,3);
   double close3=iClose(_Symbol,PERIOD_CURRENT,3);
   double candleSize=high-low;
   double candleSize2=high2-low2;
   double candleSize3=high3-low3;

Formasyonun koşulları:

Sabah Yıldızı formasyonu durumunda:

Son mum boğa türünde ise (open<close), üçüncü mum ayı türünde ise (open3>close3), CandleSize2, CandleSize'ın 0.5 olan middleCandleRatio değerinden daha küçükse ve aynı zamanda CandleSize2, CandleSize3'ün middleCandleRatio değerinden daha küçükse, formasyonun düşük seviyesinin altında yeşil ok nesnesini ve “Morning Star” metnini geri döndüreceğiz ve fonksiyonu sonlandıracağız.

   if(open<close)
     {
      if(open3>close3)
        {
         if(candleSize2<candleSize*middleCandleRatio && candleSize2<candleSize3*middleCandleRatio)
           {
            createObj(time,low,217, clrGreen,"Morning Star");
              {
               return 1;
              }
           }
        }
     }

Akşam Yıldızı formasyonu durumunda:

Son mum ayı türünde ise (open>close), üçüncü mum boğa türünde ise (open3<close3), CandleSize2, CandleSize'ın 0.5 olan middleCandleRatio değerinden daha küçükse ve aynı zamanda CandleSize2, CandleSize3'ün middleCandleRatio değerinden daha küçükse, formasyonun yüksek seviyesinin üzerinde kırmızı ok nesnesini ve “Evening Star” metnini geri döndüreceğiz ve fonksiyonu sonlandıracağız.

   if(open>close)
     {
      if(open3<close3)
        {
         if(candleSize2<candleSize*middleCandleRatio && candleSize2<candleSize3*middleCandleRatio)
           {
            createObj(time,high,218, clrRed,"Evening Star");
              {
               return -1;
              }
           }
        }
     }

Bu kodu hatasız derledikten ve programı çalıştırdıktan sonra, aşağıdaki örneklerde olduğu gibi sinyalleri alabiliriz:

  • Sabah Yıldızı:

Sabah Yıldızı örneği

Formasyon tespit edildi ve istenen nesne grafik üzerinde görüntülendi.

  • Akşam Yıldızı:

Akşam Yıldızı örneği

Formasyon tespit edildi ve istenen nesne grafik üzerinde görüntülendi.

Yıldız formasyonu için bir not olarak: formasyonun ortasındaki küçük mumda bir boşluk vardır, birebir aynı formasyonu elde etmek isterseniz bunu koda ek bir koşul olarak ekleyebilirsiniz.

Üçlü İçten formasyonu:

  • Üçlü İçten Yukarı:

Bu da bir üç mumlu formasyondur, ilk mum uzun bir ayı mumudur, ikinci mum ilk mumun içinde işlem gören küçük bir boğa mumudur ve üçüncü mum ilk mumun yüksek seviyesinin üzerinde kapanan uzun bir boğa mumudur. Bu formasyon aşağıda yer almaktadır:

Üçlü İçten Yukarı

Bu formasyon, alıcıların kontrolünde potansiyel bir yükseliş eğilimine işaret eder.

  • Üçlü İçten Aşağı:

İlk mum uzun bir boğa mumudur, ikinci mum ilk mumun içinde işlem gören küçük bir ayı mumudur ve üçüncü mum ilk mumun düşük seviyesinin altında kapanan uzun bir ayı mumudur. Bu formasyon aşağıda yer almaktadır:

Üçlü İçten Aşağı

Bu formasyon, satıcıların potansiyel düşüş davranışına işaret eder. Bu formasyonu otomatik olarak tespit etmek için bir program oluşturalım. Son mumun zamanını ve son üç mumun fiyatlarını belirleyeceğiz. Bunu yapmak için, bu değerleri her tikte kontrol edeceğiz ve birbirlerine göre konumlarını değerlendireceğiz. Buna dayanarak, gerekli formasyon türünün varlığını belirleyeceğiz. Bu programın tam kodu:
//+------------------------------------------------------------------+
//|                                Three inside pattern detector.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
void OnTick()
  {
   getthreeInside();
  }
int getthreeInside()
  {
   datetime time=iTime(_Symbol,PERIOD_CURRENT,1);
   double open=iOpen(_Symbol,PERIOD_CURRENT,1);
   double high=iHigh(_Symbol,PERIOD_CURRENT,1);
   double low=iLow(_Symbol,PERIOD_CURRENT,1);
   double close=iClose(_Symbol,PERIOD_CURRENT,1);
   double open2=iOpen(_Symbol,PERIOD_CURRENT,2);
   double high2=iHigh(_Symbol,PERIOD_CURRENT,2);
   double low2=iLow(_Symbol,PERIOD_CURRENT,2);
   double close2=iClose(_Symbol,PERIOD_CURRENT,2);
   double open3=iOpen(_Symbol,PERIOD_CURRENT,3);
   double high3=iHigh(_Symbol,PERIOD_CURRENT,3);
   double low3=iLow(_Symbol,PERIOD_CURRENT,3);
   double close3=iClose(_Symbol,PERIOD_CURRENT,3);
   if(open3>close3)
     {
      if(open2<close2)
        {
         if(open2>low3&&close2<high3)
           {
            if(open<close&&open>open2&&open<close2)
              {
               if(close>high3)
                 {
                  createObj(time,low,217, clrGreen,"3 Inside Up");
                    {
                     return 1;
                    }
                 }
              }
           }
        }

     }
   if(open3<close3)
     {
      if(open2>close2)
        {
         if(open2<high3&&close2>low3)
           {
            if(open>close&&open<open2&&open>close2)
              {
               if(close<low3)
                 {
                  createObj(time,high,218, clrRed,"3 Inside Down");
                    {
                     return -1;
                    }
                 }
              }
           }
        }
     }
   return 0;
  }
void createObj(datetime time, double price, int arrawCode, color clr, string txt)
  {
   string objName=" ";
   StringConcatenate(objName, "Signal@",time, "at",DoubleToString(price,_Digits),"(",arrawCode,")");
   if(ObjectCreate(0,objName,OBJ_ARROW,0,time,price))
     {
      ObjectSetInteger(0,objName,OBJPROP_ARROWCODE,arrawCode);
      ObjectSetInteger(0,objName,OBJPROP_COLOR,clr);
      if(clr==clrGreen)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_TOP);
      if(clr==clrRed)
         ObjectSetInteger(0,objName,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
     }
   string candleName=objName+txt;
   if(ObjectCreate(0,candleName,OBJ_TEXT,0,time,price))
     {
      ObjectSetString(0,candleName,OBJPROP_TEXT," "+txt);
      ObjectSetInteger(0,candleName,OBJPROP_COLOR,clr);
     }
  }

Bu koddaki farklılıklar formasyonun koşullarıdır:

Üçlü İçten Yukarı durumunda:

   if(open3>close3)
     {
      if(open2<close2)
        {
         if(open2>low3&&close2<high3)
           {
            if(open<close&&open>open2&&open<close2)
              {
               if(close>high3)
                 {
                  createObj(time,low,217, clrGreen,"3 Inside Up");
                    {
                     return 1;
                    }
                 }
              }
           }
        }

     }

Üçlü İçten Aşağı durumunda:

   if(open3<close3)
     {
      if(open2>close2)
        {
         if(open2<high3&&close2>low3)
           {
            if(open>close&&open<open2&&open>close2)
              {
               if(close<low3)
                 {
                  createObj(time,high,218, clrRed,"3 Inside Down");
                    {
                     return -1;
                    }
                 }
              }
           }
        }
     }

Bu kodu hatasız derledikten ve programı çalıştırdıktan sonra, aşağıdaki örneklerde olduğu gibi sinyalleri alabiliriz:

  • Üçlü İçten Yukarı:

Üçlü İçten Yukarı örneği

Grafikte görebileceğimiz gibi, Üçlü İçten Yukarı için istenen sinyale sahibiz.

  • Üçlü İçten Aşağı:

Üçlü İçten Aşağı örneği

Burada da grafikte görebileceğimiz gibi, Üçlü İçten Aşağı için istenen sinyale sahibiz.

Sonuç

Bu makalede, mum formasyonlarını çeşitli oluşumlarında, tek mum, iki mum ve üç mum formasyonlarında tespit etmek için nasıl kod yazacağımızı öğrendik:

  • Tek mum formasyonları: Doji ve Çekiç formasyonlarını nasıl tespit edeceğimizi öğrendik.
  • İkili mum formasyonları: Yutucu, Delici Hat ve Kara Bulut Örtüsü formasyonlarını nasıl tespit edeceğimizi öğrendik.
  • Üçlü mum formasyonları: Yıldız ve Üçlü İçten formasyonlarını tespit edebilen bir programın nasıl oluşturulacağını öğrendik.

Umarım bu makaleyi faydalı bulmuşsunuzdur ve alım-satım hedeflerinizde size yardımcı olur.

MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/12385

Son yorumlar | Tartışmaya git (22)
arispras
arispras | 19 Eyl 2023 saat 01:13
Güzel makale. Mql5'te nesne modelinin nasıl oluşturulacağını anlamak için çok yararlı.
Sylvanus Phillips
Sylvanus Phillips | 21 Mar 2024 saat 17:46

İyi malzeme. Çok teşekkürler.

Hem yükseliş hem de düşüş Marubozu için koşul nedir

Ivan Titov
Ivan Titov | 21 Ağu 2024 saat 15:45
Sylvanus Phillips #:
Hem yükseliş hem de düşüş Marubozu için koşul nedir?

Bunun gibi bir şey:


Ivan Titov
Ivan Titov | 21 Ağu 2024 saat 15:53
FINANSE-BOND #:
Birisi çok tembel değilse, lütfen bir Uzman Danışman olduğu için koda Alış ve Satış emirleri ekleyin.

Piyasada çalışan bir alternatif bulmak daha kolay görünüyor.

Adams.16
Adams.16 | 8 Ara 2024 saat 10:55
Çalışmalarınız için çok teşekkür ederim. Çalışmalarınız trendi takip etmeyi ve mümkün olan en büyük güvenle analiz yapmayı mümkün kılıyor... Bir süredir, koşullar altında birbirini takip edebilen 5'e kadar iki veya daha fazla mumdan oluşan bir formasyon üzerinde çalışıyorum. Her göründüğünde üzerine bir dikdörtgen çizerek formasyonu tanımlardım. Kullanım konunuza baktıktan sonra, dikdörtgeni sinyalle değiştirdim ve gösterge daha hızlıydı.Ancak dikdörtgende başarısız olduğum gibi, sinyalde de başarısız oldum: Mevcut sinyalin zamanını, önceki sinyalin zamanından başlayan bir Fibo seviyesinin sonu olarak belirleyemedim. Son sinyaldeysek seviye yarıçap olacaktır.Lütfen bu sorunla ilgili ıstırabımı sona erdirmeme yardım edin, Tanrı sizi korusun Bana yardım edebilirseniz, lütfen bana 0 ve 100 olarak yüksek ve Düşük ile engolfing modeli hakkında bir örnek verin.
Alım-satımda ahlaki beklenti Alım-satımda ahlaki beklenti
Bu makale ahlaki beklenti hakkındadır. Bu kavramın alım-satımda kullanımına ilişkin birkaç örneğe ve yardımıyla elde edilebilecek sonuçlara bakacağız.
Fibonacci’ye dayalı bir alım-satım sistemi nasıl geliştirilir? Fibonacci’ye dayalı bir alım-satım sistemi nasıl geliştirilir?
Bu makalede, en popüler teknik göstergelere dayalı alım-satım sistemleri oluşturduğumuz serimize devam ediyoruz. İşte inceleyeceğimiz yeni teknik araç: Fibonacci. Bu araca dayalı bir alım-satım sisteminin nasıl tasarlanacağını öğreneceğiz.
Bir Uzman Danışman nasıl seçilir: Bir alım-satım robotunu reddetmek için yirmi güçlü kriter Bir Uzman Danışman nasıl seçilir: Bir alım-satım robotunu reddetmek için yirmi güçlü kriter
Bu makale şu soruyu yanıtlamaya çalışmaktadır: doğru Uzman Danışmanları nasıl seçebiliriz? Portföyümüz için en iyileri hangileri ve Mağazada bulunan geniş alım-satım robotları listesini nasıl filtreleyebiliriz? Bu makale, bir Uzman Danışmanı reddetmek için yirmi net ve güçlü kriter sunacaktır. Her kriter, daha sağlam bir karar vermenize ve kârınız için daha kârlı bir Uzman Danışman koleksiyonu oluşturmanıza yardımcı olmak için sunulacak ve iyi bir şekilde açıklanacaktır.
Örneklerle formasyonlar (Bölüm I): Çoklu tepe Örneklerle formasyonlar (Bölüm I): Çoklu tepe
Bu, algoritmik alım-satım çerçevesinde terse dönüş formasyonlarıyla ilgili bir serinin ilk makalesidir. Çift tepe ve çift dip formasyonlarından kaynaklanan en ilginç formasyon ailesiyle başlayacağız.