MFI göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

Mohamed Abdelmaaboud | 13 Şubat, 2023

Giriş

Bu makale, en popüler teknik göstergelere dayalı basit ticaret sistemlerinin nasıl tasarlanacağına ilişkin makale serimizin devamıdır. Nihai hedef, MQL5 dilinde kodlamayı öğrenmektir. Bu sefer ise Money Flow Index (MFI) teknik göstergesini ele alacağız. Onu ayrıntılı olarak inceleyeceğiz ve arkasındaki konsept çerçevesinde basit bir ticaret sistemi geliştireceğiz. Bu amaçla aşağıdaki konular üzerinden ilerleyeceğiz:

  1. MFI göstergesinin tanımı
  2. MFI göstergesi stratejileri
  3. MFI göstergesine dayalı ticaret sisteminin planı
  4. MFI göstergesine dayalı ticaret sistemi
  5. Sonuç

Serideki diğer makaleleri okuduysanız, buradaki bilgilerin de aynı şekilde düzenlendiğini fark etmişsinizdir. Bu konularda, bu kez MFI göstergesi hakkında konuşacağız ve onun stratejilerine ilişkin yeni kodları analiz edeceğiz. Amacımız, yeni ticaret konseptleri keşfederken MQL5'le nasıl kod yazılacağını öğrenmektir. İlk olarak, MFI göstergesinin ne olduğunu, neyi ölçtüğünü ve manuel olarak nasıl hesaplandığını (bir örnekle birlikte) irdeleyeceğiz. Elbette bunlar sadece temel bilgilerdir. Devamında, göstergenin arkasındaki konsepti göz önünde bulundurarak bazı basit stratejileri ele alacağız. Ardından, bu stratejiler için ticaret sistemini oluştururken bize yardımcı olması adına ilgili her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırlayacağız. Son olarak da hazırladığımız bu plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak MQL5 dili aracılığıyla bir ticaret sistemi oluşturacağız.

Bu makaledeki tüm kodları kendi başınıza yazmanızı tavsiye ederim, böylece daha sonra kendi stratejilerinize, deneyimlerinize dayalı olarak kendi ticaret sistemlerinizi oluştururken daha tecrübeli ve rahat olabilirsiniz. Sadece okumakla yetinmeyin, okuduklarınızı uygulayın ve her bir kodu kendiniz yazın. Fonksiyonlar ve programlama kavramları hakkında daha fazla bilgi edinmek için araştırmalar yapın, çünkü bu birçok konuda daha da fazla bilgi sahibi olmanızı sağlayacaktır. Unutmayın ki başarılı bir programcının en önemli becerilerinden biri, pratik yapmanın yanı sıra etkili bir şekilde nasıl arama yapılacağını bilmesidir. Bu iki şey, herhangi bir öğrenme veya gelişme sürecinde çok ama çok önemlidir.

Ayrıca, herhangi bir stratejiyi kullanmadan önce tam anlamıyla test ettiğinizden emin olmalısınız. Herkes için uygun tek bir strateji yoktur. Dolayısıyla, benim için yararlı olabilecek bir şey sizin için yararlı olmayabilir.

Bu makale boyunca, kodlarımızı yazmak için MetaQuotes Language 5 (MQL5) programlama dilini ve MetaTrader 5 işlem platformunda yerleşik MetaEditor kod düzenleyicisini kullanacağız. MetaTrader 5'in nasıl kurulacağı ve MetaEditor’ın nasıl kullanılacağı hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalelerimden birinde yer alan "MetaEditor'da MQL5 kodu yazma" bölümünü okuyabilirsiniz.

Sorumluluk reddi: Sağlanan tüm bilgiler 'olduğu gibi' yalnızca bilgilendirme amaçlıdır, ticaret 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. 

Şimdi ticaret cephaneliğimizdeki araç sayısını artırmak adına yeni bir aracı daha öğrenmek için konularımıza başlayalım.


MFI göstergesinin tanımı

Bu bölümde, hacme dayalı göstergelerden biri olan Money Flow Index (MFI) göstergesinin arkasındaki konsepti anlayabilmek için onu ayrıntılı olarak açıklayacağız. Ne olduğunu, neyi ölçtüğünü ve manuel olarak nasıl hesaplandığını (bir örnekle birlikte) göreceğiz.

Daha önceki makalelerde de bahsettiğimiz gibi ticarette hacim çok önemli bir faktördür. Kapsamlı hacim analizi, piyasanın ondan etkilenebileceği birçok yönü olduğundan, ticarette bize avantaj sağlar. Piyasaya ne kadar çok perspektiften bakarsak o kadar iyi kararlar verebiliriz, çünkü edindiğimiz bilgiler kanıtların ağırlığını artırır ve bizi karar verme konusunda daha doğru yöne yönlendirir.

Eğer bir varlık yoğun alış ve satışa maruz kalıyorsa, bu varlık daha az işlem gören bir varlığa kıyasla daha büyük bir öneme sahiptir. Finansal piyasalarda hacim, belirli bir süre boyunca işlem gören hisse veya sözleşme sayısıdır. Fiyat yükseliş trendi sırasında direnci veya düşüş trendi sırasında desteği kırarken yüksek hacmin eşlik etmesi iyidir, çünkü bu, fiyat hareketinin güçlü olduğuna işaret eder. Hacim trendle belirli bir ilişkiyle hareket etmelidir: Yükseliş trendi varlığında, fiyat yükselirken hacim artmalı, fiyat düzeltme yaparken de hacim azalmalıdır ve düşüş trendi varlığında ise fiyat düşerken hacim artmalı, fiyat düzeltme yaparken de hacim azalmalıdır. Trendle hacim arasındaki bahsettiğim ilişkinin aynı şekilde devam etmesi mevcut trendin güçlü kalacağının önemli işaretlerinden biridir.

Money Flow Index (MFI) göstergesi, Gene Quong ve Avrum Soudack tarafından oluşturulmuştur. Hacme dayalı bir göstergedir ve hesaplamasında alış ve satış baskısını ölçmek için fiyat ve hacmi kullanır. Sıfır ile 100 arasında hareket eder. MFI göstergesinde artış olması, alış baskısı olduğu anlamına gelir ve tersi şekilde, MFI'da düşüş olması da satış baskısı olduğu anlamına gelir. Trendin devamlılığını teyit edebilir veya terse dönüş için uyarı sağlayabilir. Trend hakkında daha fazla bilgi edinmek istiyorsanız, daha önce yayınladığım bir makalemde yer alan "Trendin tanımı" bölümünü okuyabilirsiniz.

MFI göstergesinin manuel olarak hesaplanması aşağıdaki adımlardan oluşur:

Şimdi bu hesaplama adımlarını bir örnek üzerinde görelim. Bir finansal enstrüman için aşağıdaki verilere sahip olduğumuzu varsayalım:

Gün Yüksek Düşük Kapanış Hacim
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Bu veri tablosuna dayanarak MFI göstergesini hesaplayalım:

Tipik fiyatı (Typical Price, TP) hesapla = (yüksek+düşük+kapanış)/3

MFI göstergesini hesaplama örneği

Ham para akışını (Money Flow, MF) hesapla = hacim * TP

MFI göstergesini hesaplama örneği

TP'nin hareketini belirle: yukarı veya aşağı.

MFI göstergesini hesaplama örneği

(1 +MF)’leri hesapla = yukarı periyotların ham para akışları.

(1 -MF)’leri hesapla = aşağı periyotların ham para akışları.

MFI göstergesini hesaplama örneği

(14 +MF)’i hesapla = 14 periyot için (1 +MF)’lerin toplamı.

(14 -MF)’i hesapla = 14 periyot için (1 -MF)’lerin toplamı.

MFI göstergesini hesaplama örneği

(14 MF oranı)’nı hesapla = (14 +MF)/(14 -MF)

MFI göstergesini hesaplama örneği

MFI’ı hesapla = 100-(100/(1+(14 MF oranı)))

MFI göstergesini hesaplama örneği

Böylece MFI göstergesini manuel olarak hesapladık. Neyse ki, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, MFI'ı manuel olarak hesaplamamıza gerek yoktur. Göstergenin arkasındaki konsepti anladığımıza göre, şimdi MetaTrader 5'te bulunan yerleşik MFI göstergesini kullanabiliriz. Tek yapmamız gereken mevcut göstergeler arasından onu seçmektir:

MetaTrader 5'i açın --> Ekle sekmesine tıklayın --> Göstergeler --> Hacim --> Money Flow Index

MFI göstergesini ekleme

Gösterge seçildiğinde, aşağıdaki gösterge parametreleri penceresi açılacaktır:

MFI göstergesi parametreleri

1. Periyot sayısı.

2. Hacim türü (Tik veya Gerçek).

3. MFI çizgisinin rengi.

4. MFI çizgisinin stili.

5. MFI çizgisinin kalınlığı.

Gösterge için uygun parametreleri ayarladıktan sonra gösterge aşağıdaki gibi grafiğe eklenecektir:

Grafikte MFI göstergesi


MFI göstergesi stratejileri

Bu bölümde, MFI göstergesini ticarette nasıl kullanabileceğimizden bahsedeceğiz. Şimdi, kullanılabilecek bazı basit stratejileri ele alalım.

Bu stratejiye göre, aşırı alış (OB) ve aşırı satış (OS) bölgelerini belirleyeceğiz. 20 seviyesi ve aşağısı OS bölgesi, 80 seviyesi ve yukarısı ise OB bölgesi olacaktır. Aşırı satış bölgesinde fiyatın yukarı yönlü hareket potansiyeli artarken, aşırı alış bölgesinde de tam tersine fiyatın aşağı yönlü hareket potansiyeli artar.

Yani bunu şu şekilde ifade edebiliriz: 

MFI <= 20 --> OS

MFI >= 80 --> OB

Bu stratejiye göre, MFI'ın 50 seviyesine eşit veya aşağısında olmasını bekleyeceğiz - bu, alış sinyali olacaktır. Devamında, 70 seviyesine ulaşması da kârı al sinyali olacaktır. Bu stratejinin arkasındaki mantık, MFI'ın yükseliş trendi sırasında çoğu zaman 50 ila 70 seviyesi arasında hareket etmesidir.

Böylece,

MFI <= 50 --> Alış sinyali

MFI >= 70 --> Kârı al sinyali

Bu strateji, bir önceki stratejinin (MFI - Yükseliş trendi - Alış) tersi olacaktır. Bu stratejiye göre, MFI'ın 50 seviyesine eşit veya yukarısında olmasını bekleyeceğiz - bu, satış sinyali olacaktır. Devamında, 30 seviyesine ulaşması da kârı al sinyali olacaktır. Bu stratejinin arkasındaki mantık ise MFI'ın düşüş trendi sırasında çoğu zaman 50 ila 30 seviyesi arasında hareket etmesidir.

Böylece,

MFI >=50 --> Satış sinyali

MFI <= 30 --> Kârı al sinyali

Bu stratejide gösterge, yükseliş trendinin güçlü olup olmadığını doğrulayacaktır. Bu bilgiyi edinmek amacıyla, mevcut MFI ve önceki MFI değerlerini ve mevcut yüksek ve önceki yüksek değerlerini karşılaştıracağız. Bu karşılaştırmaya göre, gösterge ya trendi doğrulayacak ya da diverjansın varlığına işaret edecektir. Dolayısıyla, yükseliş trendi sırasında, mevcut MFI değeri önceki MFI değerinden daha yüksekse ve bununla birlikte mevcut yüksek değeri de önceki yüksek değerinden daha yüksekse, bu, yükseliş trendinin güçlü olduğu anlamına gelir, ancak mevcut MFI değeri önceki MFI değerinden daha düşükken mevcut yüksek değeri önceki yüksek değerinden daha yüksekse, bu da fiyat hareketinde ayı türü diverjans meydana geldiği anlamına gelir. Karşılaştırılacak değerlerin birbirine uzaklıklarını ayarlayarak stratejiyi optimize edebilirsiniz.

Böylece,

Mevcut MFI > Önceki MFI ve Mevcut yüksek > Önceki yüksek --> Güçlü yükseliş trendi

Mevcut MFI < Önceki MFI ve Mevcut yüksek > Önceki yüksek --> Ayı türü diverjans

Bu strateji bir önceki stratejinin (MFI - Yükseliş trendi veya ayı türü diverjans) tersidir: düşüş trendini doğrular ya da diverjansın varlığına işaret eder. Dolayısıyla, düşüş trendi sırasında, mevcut MFI değeri önceki MFI değerinden daha düşükse ve bununla birlikte mevcut düşük değeri de önceki düşük değerinden daha düşükse, bu, düşüş trendinin güçlü olduğu anlamına gelir, ancak mevcut MFI değeri önceki MFI değerinden daha yüksekken mevcut düşük değeri önceki düşük değerinden daha düşükse, bu da fiyat hareketinde boğa türü diverjans meydana geldiği anlamına gelir.

Yani daha basit ifadeyle,

Mevcut MFI < Önceki MFI ve Mevcut düşük < Önceki düşük --> Güçlü düşüş trendi

Mevcut MFI > Önceki MFI ve Mevcut düşük < Önceki düşük --> Boğa türü diverjans


MFI göstergesine dayalı ticaret sisteminin planı

Bu bölümde, ele aldığımız stratejiler için ticaret sistemini oluştururken bize yardımcı olması adına ilgili her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırlayacağız. Ama öncesinde, temel olması adına basit bir ticaret sisteminin planını tasarlayalım. Bu basit sistem, mevcut MFI değerini grafik üzerinde yorum olarak görüntüleyecektir. Bu amaçla bilgisayar her tikte MFI değerini kontrol etmeli ve sonrasında da bu değeri grafikte yorum olarak görüntülemelidir. Bu ticaret sisteminin planı aşağıda gösterilmektedir:

Mevcut MFI değerini grafik üzerinde yorum olarak görüntüleyecek programın planı

Şimdi stratejilerin planının hazırlayalım.

Bu stratejiye göre, ticaret sistemi her tikte MFI değerini kontrol etmeli ve belirli seviyelerle (20 ve 80) karşılaştırmalıdır. Daha sonra bu karşılaştırmanın sonucuna göre ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. MFI değeri 20 seviyesine eşit veya daha düşükse: iki satır halinde olacak şekilde, üst satırda aşırı satış sinyali yorumu ve alt satırda mevcut MFI değeri yorumu yazılmalıdır. MFI değeri 80 seviyesine eşit veya daha yüksekse: iki satır halinde olacak şekilde, üst satırda aşırı alış sinyali yorumu ve alt satırda mevcut MFI değeri yorumu yazılmalıdır. MFI 20'nin üzerinde ve 80'in altındaysa, yalnızca mevcut MFI değeri ifade edilmelidir. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

MFI - OB ve OS planı

Bu stratejiye göre, ticaret sistemi her tikte MFI değerini kontrol etmeli ve belirli seviyelerle (50 ve 70) karşılaştırmalıdır. MFI değeri 50 seviyesine eşit veya daha düşükse, alış sinyali yorumu görüntülenmelidir. MFI değeri 70 seviyesine eşit veya daha yüksekse, kârı al sinyali yorumu görüntülenmelidir. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

MFI - Yükseliş trendi - Alış planı

Bu stratejiye göre, ticaret sistemi her tikte MFI değerini kontrol etmeli ve belirli seviyelerle (50 ve 30) karşılaştırmalıdır. MFI değeri 50 seviyesine eşit veya daha yüksekse, satış sinyali yorumu görüntülenmelidir. MFI değeri 30 seviyesine eşit veya daha düşükse, kârı al sinyali yorumu görüntülenmelidir. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

MFI - Düşüş trendi - Satış planı

Bu stratejiye göre, ticaret sistemi her tikte dört değeri (mevcut MFI, önceki MFI, mevcut yüksek ve önceki yüksek) kontrol etmeli ve koşullarına uygun olarak sinyali grafik üzerinde görüntülemelidir.

Mevcut MFI > Önceki MFI ve Mevcut yüksek > Önceki yüksek --> Güçlü yükseliş trendi

Mevcut MFI < Önceki MFI ve Mevcut yüksek > Önceki yüksek --> Ayı türü diverjans

Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

MFI - Yükseliş trendi veya ayı türü diverjans planı

 

Bu strateji bir önceki stratejinin tersidir. Bu stratejiye göre, ticaret sistemi her tikte yine aynı dört değeri (mevcut MFI, önceki MFI, mevcut yüksek ve önceki yüksek) kontrol etmeli ve koşullarına uygun olarak ilgili sinyali grafik üzerinde görüntülemelidir.

Mevcut MFI < Önceki MFI ve Mevcut düşük < Önceki düşük --> Güçlü düşüş trendi

Mevcut MFI > Önceki MFI ve Mevcut düşük < Önceki düşük --> Boğa türü diverjans

Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

MFI - Düşüş trendi veya boğa türü diverjans planı


MFI göstergesine dayalı ticaret sistemi

Şimdi en ilgi çekici bölüme geçiyoruz, hazırladığımız plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak MQL5 dili aracılığıyla bir ticaret sistemi oluşturacağız. İlk olarak, mevcut MFI değerini grafik üzerinde yorum olarak görüntüleyecek basit bir program oluşturarak başlayalım.

double MFIArray[];
ArraySetAsSeries(MFIArray,true);
int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
CopyBuffer(MFIDef,0,0,3,MFIArray);
double MFIValue=NormalizeDouble(MFIArray[0],5);
Comment("MFI Value is: ",MFIValue);

Mevcut MFI değerini grafikte yorum olarak görüntüleyen programın kodu aşağıdadır:

//+------------------------------------------------------------------+
//|                                                   Simple MFI.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);

//creating a comment with MFI value
   Comment("MFI Value is: ",MFIValue);
  }
//+------------------------------------------------------------------+

Uzman Danışmanı oluşturduktan sonra onu Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple MFI

Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

Simple MFI penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple MFI

Böylece, gösterge mevcut MFI değerini grafik üzerinde yorum olarak görüntüleyecektir:

Grafikte mevcut MFI değeri

Programımızdaki değerlerin MetaTrader 5'teki yerleşik MFI göstergesi tarafından görüntülenen değerlerle aynı olup olmadığını da kontrol edebiliriz:

Simple MFI ile standart MFI aynı değeri görüntülemektedir

Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                                  MFI - OB&OS.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   }   
  }
//+------------------------------------------------------------------+

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

Aşırı alış ve aşırı satış koşulları:
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   } 

Derledikten sonra, programın dosyasını Kılavuz penceresinden bulabiliriz:

Kılavuz - MFI - OB & OS

Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

MFI - OB & OS penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş MFI - OB & OS

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

Aşırı satış sinyali:

MFI - OB & OS - Aşırı satış sinyali

Aşırı alış sinyali:

MFI - OB & OS - Aşırı alış sinyali

Sinyal yok:

MFI - OB & OS - Sinyal yok

Bu strateji için ticaret sistemi kodu aşağıdaki gibi olacaktır:

//+------------------------------------------------------------------+
//|                                          MFI - Uptrend - Buy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }
   
   //TP
   if(MFIValue>=70)
   {
   Comment("Take profit");
   }
  }
//+------------------------------------------------------------------+

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

Sinyal koşulları:

Alış sinyali:

//Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }

Kârı al sinyali:

//TP
   if(MFIValue>=70)
     {
      Comment("Take profit");
     }

Derlendikten sonra, ticaret sisteminin dosyası Kılavuz penceresinde görünecektir:

Kılavuz - MFI - Uptrend - Buy

Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

MFI - Uptrend - Buy penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş MFI - Uptrend - Buy

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

Alış sinyali:

MFI - Uptrend - Buy - Alış sinyali

Kârı al sinyali:

MFI - Uptrend - Buy - Kârı al sinyali

Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                      MFI - Downtrend - Short.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);


//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }
  }
//+------------------------------------------------------------------+

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

Sinyal koşulları:

Satış sinyali:

//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

Kârı al sinyali:

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }

Derlendikten sonra, ticaret sisteminin dosyası Kılavuz penceresinde görünecektir:


Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

MFI - Downtrend - Short penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş MFI - Downtrend - Short

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

Satış sinyali:

MFI - Downtrend - Short - Satış sinyali

Kârı al sinyali:

MFI - Downtrend - Short - Kârı al sinyali

Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                  MFI - Uptrend or divergence.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the MFI array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

//conditions of strong move or divergence
//strong up
   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

//bearish divergence
   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }
  }
//+------------------------------------------------------------------+

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

Fiyat, hacim ve spread bilgilerini depolayan MqlRates fonksiyonunu kullanarak MFI ve fiyatlar için diziler oluşturuyoruz:

   double MFIArray[];
   MqlRates PriceArray[];

Dizileri sıralıyoruz:

MFI için, daha önce olduğu gibi ArraySetAsSeries fonksiyonunu kullanıyoruz.

Fiyatlar için ise MqlRates'in geçmiş verilerini almak için CopyRates fonksiyonunu kullanıyoruz. Parametreleri şunlardır: sembol adı, zaman dilimi, başlangıç ​​zamanı, bitiş zamanı ve veri dizisi.

   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

Mevcut MFI değerini ve önceki MFI değerini hesaplıyoruz:

   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

Mevcut yüksek değerini ve önceki yüksek değerini hesaplıyoruz:

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

“MFI - Yükseliş trendi veya ayı türü diverjans” stratejisinin koşulları:

Güçlü yükseliş trendi:

   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

Ayı türü diverjans:

   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }

Uzman Danışmanın kodunu derliyoruz, böylece onu MetaTrader 5 terminalinde Kılavuz penceresinde bulabiliriz:

Kılavuz - MFI - Uptrend or divergence

Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

MFI - Uptrend or divergence penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş MFI - Uptrend or divergence

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

Mevcut verilerle Veri Penceresi ve güçlü yükseliş trendi sinyali:

Mevcut verilerle Veri Penceresi ve güçlü yükseliş trendi sinyali

Önceki verilerle Veri Penceresi ve güçlü yükseliş trendi sinyali:

Önceki verilerle Veri Penceresi ve güçlü yükseliş trendi sinyali

Mevcut verilerle Veri Penceresi ve ayı türü diverjans sinyali:

Mevcut verilerle Veri Penceresi ve ayı türü diverjans sinyali

Önceki verilerle Veri Penceresi ve ayı türü diverjans sinyali:


Aşağıda bu stratejinin kodu yer almaktadır.

//+------------------------------------------------------------------+
//|                                MFI - Downtrend or divergence.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);

//conditions of strong move or divergence
//strong down
   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

//bullish divergence
   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }
  }
//+------------------------------------------------------------------+

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

Bu stratejiye dayalı olarak üretilen sinyallerin koşulları:

Güçlü düşüş trendi:

   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

Boğa türü diverjans:

   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }

Uzman Danışmanın kodunu derliyoruz, böylece onu MetaTrader 5 terminalinde Kılavuz penceresinde bulabiliriz:

Kılavuz - MFI - Downtrend or divergence

Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

MFI - Downtrend or divergence penceresi

Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş MFI - Downtrend or divergence

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

Mevcut verilerle Veri Penceresi ve güçlü düşüş trendi sinyali:

Mevcut verilerle Veri Penceresi ve güçlü düşüş trendi sinyali

Önceki verilerle Veri Penceresi ve güçlü düşüş trendi sinyali:

Önceki verilerle Veri Penceresi ve güçlü düşüş trendi sinyali

Mevcut verilerle Veri Penceresi ve boğa türü diverjans sinyali:

Mevcut verilerle Veri Penceresi ve boğa türü diverjans sinyali

Önceki verilerle Veri Penceresi ve boğa türü diverjans sinyali:

Önceki verilerle Veri Penceresi ve boğa türü diverjans sinyali

Sonuç

Bu makalede Money Flow Index (MFI) göstergesi hakkında konuştuk. Ticaret sonuçlarımızı iyileştirebilecek yeni bilgileri keşfettik: Hacmin ne olduğunu, ticarette neden çok önemli olduğunu, MFI göstergesinin ne olduğunu, neyi ölçtüğünü, manuel olarak nasıl hesaplandığını ve hazır yerleşik MFI göstergesinin nasıl kullanılacağını öğrendik. MFI göstergesinin temellerini öğrendikten ve arkasındaki konsepti kavradıktan sonra, bazı basit stratejileri ele aldık. Bu stratejileri kısaca hatırlayalım. Birinci strateji, aşırı alış ve aşırı satış bölgelerini belirten stratejiydi. İkinci strateji, yükseliş trendi sırasında alış sinyali / kârı al sinyali ve düşüş trendi sırasında satış sinyali / karı al sinyali sağlayan stratejiydi. Ve üçüncü strateji de yükseliş trendinin güçlü olup olmadığını / ayı türü diverjans meydana gelip gelmediğini ve düşüş trendinin güçlü olup olmadığını / boğa türü diverjans meydana gelip gelmediğini ifade eden stratejiydi.

Devamında, ele aldığımız stratejiler için ticaret sistemini oluştururken bize yardımcı olması adına ilgili her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırladık. Son olarak da hazırladığımız bu plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak MQL5 dili aracılığıyla bir ticaret sistemi oluşturduk. Oluşturduğumuz bu ticaret sistemi, insan müdahalesi olmadan otomatik ve hassas bir şekilde çalışacak, ticaret süreçlerini verimli hale getirecek ve bu sayede ticaretimizi kolaylaştırarak zamandan tasarruf etmemize olanak sağlayacaktır.

Umarım bu makale boyunca öğrendiklerinizi kendiniz de uygulamaya ve pratik yapmaya çalışmışsınızdır. Bu makalenin, ister mevcut konuyla ilgili ister ilgili herhangi bir konuda olsun, ticaret hakkında size yeni fikirler sağlayacağına inanıyorum. Daha önce de söylediğim gibi, herhangi bir stratejiyi bir gerçek hesapta kullanmadan önce onu tam anlamıyla test ettiğinizden emin olmalısınız. Bu makalenin temel amacı, yeni başlayanlara basit ticaret stratejilerini kendi başlarına nasıl kodlayacaklarını öğretmek amacıyla bilgi sağlamaktır. Dolayısıyla, bu makalede ele aldığımız tüm stratejilerin optimize edilmesi, üzerinde ek ayarlamalar yapılması gerekebilir. Ya da onların başka bir teknik araçla kombine edilmesi daha iyi sonuçlar verebilir. Genel olarak, farklı teknik araçların birbirleriyle kombine edilmesi, piyasayı farklı bakış açılarından değerlendirmeye olanak tanıdığından, mümkün olan en uygun kararı verebilmek adına çok etkili bir yaklaşımdır. Teknik araçların kombinasyonuyla basitten karmaşığa kadar her türde ticaret sistemleri elde edilebileceğinden kombinasyonlara dayalı ticaret sistemleri de oluşturulabilir. Bu, ticaret hedeflerine ulaşırken engel oluşturabilecek öznellik sorununun da üstesinden gelerek tam olarak ihtiyaç duyulana ulaşılmasını sağlayacaktır. Programlama, ihtiyacımız olan şeyleri kolay, hassas ve sorunsuz bir şekilde elde etmemize yardımcı olan harika bir araçtır. Diğer birçok kullanışlı özelliğinin yanı sıra, bizi her seferinde aynı görevleri yapmaktan da kurtarır.

Bu makaleyi beğendiyseniz, yararlı bulduysanız ve buna benzer daha fazla makale okumak istiyorsanız, en popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğini öğrenme konulu bu serideki diğer makaleleri de okuyabilirsiniz. Umarım, her biri ticaret sonuçlarınızı geliştirmenize yardımcı olur. Bir sonraki makalede görüşmek dileğiyle.