
Mum formasyonlarını tespit etmek için MQL5 nasıl kullanılır?
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.
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:
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:
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ç:
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ç:
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ç:
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ç:
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ç:
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ç:
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ç:
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ç:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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 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ı:
Formasyon tespit edildi ve istenen nesne grafik üzerinde görüntülendi.
- Akşam Yıldızı:
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:
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:
//+------------------------------------------------------------------+ //| 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ı:
Grafikte görebileceğimiz gibi, Üçlü İçten Yukarı için istenen sinyale sahibiz.
- Üçlü İçten Aşağı:
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





- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
İyi malzeme. Çok teşekkürler.
Hem yükseliş hem de düşüş Marubozu için koşul nedir
Hem yükseliş hem de düşüş Marubozu için koşul nedir?
Bunun gibi bir şey:
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.