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

Mohamed Abdelmaaboud | 15 Şubat, 2023

Giriş

En popüler teknik göstergelere dayalı ticaret sistemleri geliştirdiğimiz serimizin yeni makalesindeyiz. Bu makalede de piyasaya farklı bir perspektiften bakmamıza olanak sağlayacak önemli bir teknik göstergeyle tanışacağız - Volumes göstergesi. Aşağıda bu göstergeyi kapsayacak konular yer almaktadır:

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

Makalemize Volumes göstergesinin ne olduğu ve neyi ölçtüğü hakkında konuşarak başlayacağız. Devamında, arkasındaki fikre dayanan bazı basit stratejileri ele alarak onu ticaretimizde bize fayda sağlayacak şekilde nasıl kullanabileceğimizden bahsedeceğiz. 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. Bu, herhangi bir ticaret sisteminin geliştirilme sürecinde çok önemli bir adımdır. Son olarak da makalenin en ilgi çekici bölümüne geçeceğiz - hazırladığımız plan çerçevesinde, ele aldığımız stratejilere dayalı olarak MQL5 dili aracılığıyla bir ticaret sistemi oluşturacağız. Bu ticaret sistemi, ilgili stratejilerin koşullarına uygun şekilde otomatik olarak sinyaller üretecek ve böylece ticaretimizi daha kolay ve daha verimli hale getirecektir.

Bu makale boyunca da yine MetaTrader 5 işlem platformunu ve platformda yerleşik olan MetaQuotes Language 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. Ayrıca, her zaman üzerinde durduğum bir şeyi burada yine hatırlatmak istiyorum: Okuduğunuz konulara ilişkin anlayışınızı artırmak ve derinleştirmek amacıyla, gördüğünüz tüm kavramları, kodları vb. içerikleri kendi başınıza sürekli olarak pratik yapmalı ve tekrar etmelisiniz. Pratik yapmak ve tekrar etmek, her türlü öğrenme sürecinin en önemli parçalarındandır.

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.

Ticaretimizde bize yararlı olabilecek yeni bir aracı daha öğrenmek adına konularımızı irdelemeye başlayalım.


Volumes göstergesinin tanımı

Forex piyasasında Volumes göstergesi, belirli bir süre içerisindeki fiyat değişikliklerinin sayısını, yani sözleşme, para, birim vb. cinsinden fiilen işlem gören hacmi gösterir. Hacim, piyasadaki arz, talep ve likidite hakkında bilgi sağlar. Piyasada yüksek düzeyde hacim mevcutken, fiyat yükseliyorsa talebin, fiyat düşüyorsa arzın yüksek olduğu anlaşılabilir. Hacim trendin teyidi açısından bize oldukça önemli yol gösterdiğinden, Volumes göstergesini bu konuda kullanabiliriz. 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.

Hacim trende eşlik eder. Dolayısıyla, Volumes göstergesi, mevcut trendin güçlü olup olmadığını doğrulamak veya zayıflık meydana gelip gelmediğini tespit etmek için kullanılacak çok yararlı bir araçtır. Yükseliş trendi sırasında, hacmin yukarı yönlü fiyat hareketlerinde arttığını ve aşağı yönlü düzeltmelerde de azaldığını görmek, mevcut yükseliş trendinin güçlü olduğu ve devamlılığı açısından daha iyidir. Düşüş trendi sırasında ise hacmin aşağı yönlü fiyat hareketlerinde arttığını ve yukarı yönlü düzeltmelerde de azaldığını görmek, mevcut düşüş trendinin güçlü olduğu ve devamlılığı açısından daha iyidir. Ancak düşüş trendi sırasında şöyle bir ayrıntıdan da söz edilebilir: Hacim olmadan da fiyatlar düşebileceğinden, düşüş trendi sırasında yüksek hacim olmadan da aşağı yönlü fiyat hareketleri meydana gelebilir.

Hacim, diverjansların varlığı durumunda mevcut trendde zayıflık meydana geldiğini işaret edebilir. Diverjans, hacmin mevcut trende eşlik etmediği, yani mevcut trende uygun şekilde değil, trendin tersi yönünde hareket ettiği anlamına gelir.

Göstergenin hesaplanması:

Forex piyasasında:

Hacim = belirli bir süre içerisindeki fiyat değişikliklerinin sayısı.

Borsa piyasasında:

Hacim = fiyat * işlem hacmi.

Örneğin, 10$ fiyatında 1000 hisse işlem hacmi gerçekleştiğini varsayalım. Buna göre hacim şu şekilde olacaktır:

Hacim = 10$ * 1000 = 10.000$

Hesaplamalardaki farklılık, forex piyasasının borsa piyasasından farklı olarak merkezi olmayan yapısından kaynaklanmaktadır.

MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, hacmi manuel olarak hesaplamamıza gerek yoktur. Tek yapmamız gereken mevcut göstergeler arasından onu seçmektir:

Ekle --> Göstergeler --> Hacim --> Volumes

Volumes göstergesini ekleme

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

Volumes göstergesi parametreleri

1. Artan Volumes çubuğunun rengi.

2. Azalan Volumes çubuğunun rengi.

3. Uygulanan hacim (Tik veya Gerçek).

4. Çubuğun kalınlığı. 

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

Grafikte Volumes göstergesi

Yeşil, mevcut çubuğun bir önceki çubuktan daha büyük olduğu, kırmızı ise mevcut çubuğun bir önceki çubuktan daha küçük olduğu anlamına gelir.


Volumes göstergesi stratejileri

Bu bölümde, Volumes göstergesinin arkasındaki fikre dayanan birkaç basit stratejiyi ele alacağız. Elbette, bu stratejilerin optimizasyona ihtiyacı vardır, ki bu normaldir çünkü bu stratejilerin burada sunulmasının ana amacı, Volumes göstergesinin ticarette nasıl kullanılabileceğini ve ona dayalı olarak bir ticaret sisteminin nasıl tasarlanacağını anlamaktır. Dolayısıyla, bu stratejilerden herhangi birini gerçek hesabınızda kullanmadan önce, onu tam anlamıyla test ettiğinizden emin olmalısınız.

Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle karşılaştıracağız ve uygun sinyali belirleyeceğiz. Mevcut Volumes değeri önceki Volumes değerinden daha yüksekse, bu, Volumes yükseliyor anlamına gelir. Tam tersi şekilde, eğer mevcut Volumes değeri önceki Volumes değerinden daha düşükse, bu da Volumes düşüyor demektir.

Yani daha basit ifadeyle,

Mevcut Volumes > Önceki Volumes --> Volumes yükseliyor

Mevcut Volumes < Önceki Volumes --> Volumes düşüyor

Bu stratejiye göre, mevcut Volumes değerini önceki beş Volumes değerinin ortalamasıyla karşılaştıracağız ve uygun sinyali belirleyeceğiz. Mevcut Volumes değeri önceki beş Volumes değerinin ortalamasından daha yüksekse, bu, Volumes güçlü anlamına gelir. Tam tersi şekilde, eğer mevcut Volumes değeri önceki beş Volumes değerinin ortalamasından daha düşükse, bu da Volumes zayıf anlamına gelir.

Böylece,

Mevcut Volumes > Önceki beş Volumes değerinin ortalaması --> Volumes güçlü

Mevcut Volumes < Önceki beş Volumes değerinin ortalaması --> Volumes zayıf

Bu stratejiye göre, yükseliş trendi sırasında, mevcut Volumes değerini önceki Volumes değeriyle ve ayrıca mevcut yüksek değerini de önceki yüksek değeriyle karşılaştıracağız. Mevcut Volumes değeri önceki Volumes 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ş trendi sırasında alış sinyali anlamına gelir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha düşükken mevcut yüksek değeri önceki yüksek değerinden daha yüksekse, bu, herhangi bir sinyal ifade etmeyecektir.

Mevcut Volumes > Önceki Volumes ve Mevcut yüksek > Önceki yüksek --> Yükseliş trendi sırasında alış sinyali

Bu strateji bir önceki stratejinin tersidir. Dolayısıyla bu stratejiye göre, düşüş trendi sırasında, mevcut Volumes değerini önceki Volumes değeriyle ve ayrıca mevcut düşük değerini de önceki düşük değeriyle karşılaştıracağız. Mevcut Volumes değeri önceki Volumes değerinden daha yüksekse ve bununla birlikte mevcut düşük değeri de önceki düşük değerinden daha düşükse, bu, düşüş trendi sırasında satış sinyali anlamına gelir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha düşükken mevcut düşük değeri önceki düşük değerinden daha düşükse, bu, herhangi bir sinyal ifade etmeyecektir.

Mevcut Volumes > Önceki Volumes ve Mevcut düşük < Önceki düşük --> Düşüş trendi sırasında satış sinyali

Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle karşılaştıracağız ve aynı zamanda da kısa ve uzun olmak üzere farklı periyotlara sahip iki Moving Average’ın birbirleriyle olan ilişkisini inceleyeceğiz. Bu iki değerlendirmenin sonucunu göre de uygun sinyali belirleyeceğiz. Mevcut Volumes değeri önceki Volumes değerinden daha yüksekken kısa MA uzun MA’yı yukarı doğru çaprazlıyorsa, bu, alış sinyali olacaktır. Mevcut Volumes değeri önceki Volumes değerinden daha yüksekken kısa MA uzun MA’yı aşağı doğru çaprazlıyorsa, bu da satış sinyali olacaktır.

Mevcut Volumes > Önceki Volumes ve Kısa MA < Uzun MA iken ardından Kısa MA > Uzun MA --> Alış sinyali

Mevcut Volumes > Önceki Volumes ve Kısa MA > Uzun MA iken ardından Kısa MA < Uzun MA --> Satış sinyali


Volumes göstergesine dayalı ticaret sisteminin planı

Bu bölümde, her strateji için olmak üzere bir plan hazırlayacağız. Bu, çok önemli ve gerekli bir aşamadır. Fikirlerin sistemleştirilmesine ve ticaret sistemi oluştururken nelerin gerektiğinin adım adım ifadelerle belirlenmesine olanak sağlar. Bu sayede, kodlama sırasında yapacaklarımız daha açık ve net hale gelir ve işimiz kolaylaşarak hızlanır.

Öncelikle, mevcut Volumes değerini grafik üzerinde yorum olarak görüntüleyecek basit bir ticaret sisteminin planını oluşturalım. Bu amaçla sistem her tikte Volumes değerini kontrol etmeli ve sonrasında da bu değeri grafikte yorum olarak görüntülemelidir. İşte bu program için plan:

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


Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle karşılaştırarak Volumes göstergesinin hareketi (hacmin hareketi) hakkında bizi bilgilendirecek sinyaller üretecek basit bir ticaret sistemi oluşturmamız gerekiyor. Bu amaçla sistem her tikte mevcut Volumes değerini ve önceki Volumes değerini kontrol etmelidir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: Volumes yükseliyor sinyali, mevcut Volumes değeri ve önceki Volumes değeri. Tersi şekilde, eğer mevcut Volumes değeri önceki Volumes değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: Volumes düşüyor sinyali, mevcut Volumes değeri ve önceki Volumes değeri. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

Volumes hareketi planı


Bu stratejiye göre, mevcut Volumes değerini önceki beş Volumes değerinin ortalamasıyla karşılaştırarak Volumes göstergesinin gücü (hacmin gücü) hakkında bizi bilgilendirecek sinyaller üretecek basit bir ticaret sistemi oluşturmamız gerekiyor. Bu amaçla sistem her tikte tüm bu değerleri kontrol etmeli ve ilgili karşılaştırmayı gerçekleştirmelidir. Eğer mevcut Volumes değeri önceki beş Volumes değerinin ortalamasından daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: Volumes güçlü sinyali, mevcut Volumes değeri, önceki beş Volumes değeri ve önceki beş Volumes değerinin ortalaması. Tersi şekilde, eğer mevcut Volumes değeri önceki beş Volumes değerinin ortalamasından daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: Volumes zayıf sinyali, mevcut Volumes değeri, önceki beş Volumes değeri ve önceki beş Volumes değerinin ortalaması. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan bulunmaktadır:

Volumes gücü planı


Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle ve ayrıca mevcut yüksek değerini de önceki yüksek değeriyle karşılaştırarak yükseliş trendi sırasında alış sinyalinin olup olmadığına dair bizi bilgilendirecek sinyal üretecek basit bir ticaret sistemi oluşturmamız gerekiyor. Bu amaçla sistem her tikte dört değeri (mevcut Volumes, önceki Volumes, mevcut yüksek ve önceki yüksek) kontrol etmeli ve koşuluna uygun olarak sinyali grafik üzerinde yorum olarak görüntülemelidir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha yüksekse ve bununla birlikte mevcut yüksek değeri de önceki yüksek değerinden daha yüksekse, bu durumda, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: yükseliş trendi sırasında alış sinyali, mevcut Volumes değeri, önceki Volumes değeri, mevcut yüksek değeri ve önceki yüksek değeri. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan bulunmaktadır:

Volumes - Yükseliş trendi planı

Bu strateji bir önceki stratejinin tersidir. Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle ve ayrıca mevcut düşük değerini de önceki düşük değeriyle karşılaştırarak düşüş trendi sırasında satış sinyalinin olup olmadığına dair bizi bilgilendirecek sinyal üretecek basit bir ticaret sistemi oluşturmamız gerekiyor. Bu amaçla sistem her tikte dört değeri (mevcut Volumes, önceki Volumes, mevcut düşük ve önceki düşük) kontrol etmeli ve koşuluna uygun olarak sinyali grafik üzerinde yorum olarak görüntülemelidir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha yüksekse ve bununla birlikte mevcut düşük değeri de önceki düşük değerinden daha düşükse, bu durumda, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir: düşüş trendi sırasında satış sinyali, mevcut Volumes değeri, önceki Volumes değeri, mevcut düşük değeri ve önceki düşük değeri. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan bulunmaktadır:

Volumes - Düşüş trendi planı


Bu stratejiye göre, mevcut Volumes değerini önceki Volumes değeriyle karşılaştırarak ve aynı zamanda da kısa ve uzun olmak üzere farklı periyotlara sahip iki Moving Average’ın birbirleriyle olan ilişkisini inceleyerek alış ya da satış sinyalinin olup olmadığına dair bizi bilgilendirecek sinyaller üretecek basit bir ticaret sistemi oluşturmamız gerekiyor. Bu amaçla sistem her tikte Volumes ve MA göstergelerinin ilgili verilerini kontrol etmeli ve koşullarına uygun olarak sinyali grafik üzerinde yorum olarak görüntülemelidir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha yüksekken kısa MA uzun MA’yı yukarı doğru çaprazlıyorsa, bu durumda, alış sinyalini grafik üzerinde yorum olarak görüntülemelidir. Eğer mevcut Volumes değeri önceki Volumes değerinden daha yüksekken kısa MA uzun MA’yı aşağı doğru çaprazlıyorsa, bu durumda da satış sinyalini grafik üzerinde yorum olarak görüntülemelidir. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan bulunmaktadır:

Volumes - MA planı


Volumes göstergesine dayalı ticaret sistemi

Bu makalenin en ilgi çekici bölümüne geldik. Şimdi, hazırladığımız plan çerçevesinde, ele aldığımız stratejilere dayalı olarak bize otomatik ve hassas sinyaller sağlayacak bir ticaret sistemi oluşturacağız. Ancak öncesinde, temel olması adına, mevcut Volumes değerini grafik üzerinde yorum olarak görüntüleyecek basit bir program oluşturarak başlayalım.

double VolArray[];
ArraySetAsSeries(VolArray,true);
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
CopyBuffer(VolDef,0,0,3,VolArray);
int VolValue=NormalizeDouble(VolArray[0],5);
Comment("Volumes Value is: ",VolValue);

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

//+------------------------------------------------------------------+
//|                                               Simple Volumes.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 Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   int VolValue=NormalizeDouble(VolArray[0],5);

//creating a comment with current vol value
   Comment("Volumes Value is: ",VolValue);
  }
//+------------------------------------------------------------------+

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

Kılavuz - Simple Volumes

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

Simple Volumes penceresi

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

Grafiğe eklenmiş Simple Volumes

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

Grafikte mevcut Volumes değeri

Mevcut Volumes değerini önceki Volumes değeriyle karşılaştırarak Volumes göstergesinin hareketi (hacmin hareketi) hakkında bizi bilgilendirecek sinyaller üretecek Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                               Vol - Movement.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 Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of vol movements
//Volume increasing
   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

//Volume decreasing
   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

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

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

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Stratejinin koşulları:

Volumes yükseliyor:

   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

Volumes düşüyor:

   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

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

Kılavuz - Vol - Movement

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

Vol - Movement penceresi

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Vol - Movement

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

Mevcut verilerle Veri Penceresi ve Volumes yükseliyor sinyali:

Mevcut verilerle Veri Penceresi ve Volumes yükseliyor sinyali

Önceki verilerle Veri Penceresi ve Volumes yükseliyor sinyali:

Önceki verilerle Veri Penceresi ve Volumes yükseliyor sinyali

Mevcut verilerle Veri Penceresi ve Volumes düşüyor sinyali:

Mevcut verilerle Veri Penceresi ve Volumes düşüyor sinyali

Önceki verilerle Veri Penceresi ve Volumes düşüyor sinyali:

Önceki verilerle Veri Penceresi ve Volumes düşüyor sinyali

Mevcut Volumes değerini önceki beş Volumes değerinin ortalamasıyla karşılaştırarak Volumes göstergesinin gücü (hacmin gücü) hakkında bizi bilgilendirecek sinyaller üretecek Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                               Vol - Strength.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 Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,11,VolArray);

//calculating current vol && 5 previous volume values
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);


//calculating AVG of 5 previous volume values
   double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

//conditions of Volume strength based on comparing current to AVG
//strong volume
   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

//weak volume
   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }
  }
//+------------------------------------------------------------------+

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

Mevcut Volumes değerini ve önceki beş Volumes değerini hesaplıyoruz:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);

 Önceki beş Volumes değerinin ortalamasını hesaplıyoruz:

double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

Stratejinin koşulları:

Volumes güçlü:

   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Volumes zayıf:

   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

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

Kılavuz - Vol - Strength

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

Vol - Strength penceresi

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

Grafiğe eklenmiş Vol - Strength

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

Volumes güçlü:

Vol - Strength - Volumes güçlü sinyali

Volumes zayıf:

Vol - Strength - Volumes zayıf sinyali

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

//+------------------------------------------------------------------+
//|                                          Price&Vol - Uptrend.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 price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating the current and previous values of highs and volume
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of buy signal
//Buy signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

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

Uygun fonksiyonları kullanarak Volumes ve fiyat dizileri oluşturuyoruz: Volumes dizisi için daha önce yaptığımız gibi double fonksiyonunu ve fiyat dizisi için ise fiyat, hacim ve spread bilgilerini depolayan MqlRates fonksiyonunu kullanacağız.

   MqlRates PriceArray[];
   double VolArray[];

Veriler için int türü değişken oluşturulduktan sonra, CopyRates fonksiyonu kullanılarak fiyat dizisini dolduruyoruz:

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

Mevcut Volumes değerini, önceki Volumes değerini, 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);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Stratejinin koşulları:

Yükseliş trendi sırasında alış sinyali:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Sinyal yok:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

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

Kılavuz - Price&Vol - Uptrend

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

Price&Vol - Uptrend penceresi

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

Grafiğe eklenmiş Price&Vol - Uptrend

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

Mevcut verilerle Veri Penceresi ve yükseliş trendi sırasında alış sinyali:

Mevcut verilerle Veri Penceresi ve yükseliş trendi sırasında alış sinyali

Önceki verilerle Veri Penceresi ve yükseliş trendi sırasında alış sinyali:

Önceki verilerle Veri Penceresi ve yükseliş trendi sırasında alış sinyali

Mevcut verilerle Veri Penceresi ve sinyal yok:

Mevcut verilerle Veri Penceresi ve sinyal yok

Önceki verilerle Veri Penceresi ve sinyal yok:

Önceki verilerle Veri Penceresi ve sinyal yok

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

//+------------------------------------------------------------------+
//|                                        Price&Vol - Downtrend.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 price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current and previous of lows and volume
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of short signal
//short signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

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

Stratejinin koşulları:

Düşüş trendi sırasında satış sinyali:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

 Sinyal yok:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

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

Kılavuz - Price&Vol - Downtrend

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

Price&Vol - Downtrend penceresi

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

Grafiğe eklenmiş Price&Vol - Downtrend

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

Mevcut verilerle Veri Penceresi ve düşüş trendi sırasında satış sinyali:

Mevcut verilerle Veri Penceresi ve düşüş trendi sırasında satış sinyali

Önceki verilerle Veri Penceresi ve düşüş trendi sırasında satış sinyali:

Önceki verilerle Veri Penceresi ve düşüş trendi sırasında satış sinyali

Mevcut verilerle Veri Penceresi ve sinyal yok:

Mevcut verilerle Veri Penceresi ve sinyal yok

Önceki verilerle Veri Penceresi ve sinyal yok:

Önceki verilerle Veri Penceresi ve sinyal yok

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

//+------------------------------------------------------------------+
//|                                              MA&Vol Strategy.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 MA & Volume
   double MAShortArray[],MALongArray[];
   double VolArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

//defining MA & Volume
   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling arrays
   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating MA && current volume values
   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//conditions of buy and short signals
//buy signal
   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

//short signal
   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }
  }
//+------------------------------------------------------------------+

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

Volumes, kısa Moving Average ve uzun Moving Average için diziler oluşturuyoruz:

   double MAShortArray[],MALongArray[];
   double VolArray[];

Bu dizileri sıralıyoruz:

   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

MA göstergesinin tanıtıcısını geri döndüren iMA fonksiyonunu kullanarak kısa MA ve uzun MA'yı tanımlıyoruz. Parametreleri şunlardır: sembol, periyot, ortalama periyot, yatay kayma, MA'nın türü olan yumuşatma türü, uygulanan fiyat. Ve ayrıca daha önce yaptığımız gibi iVolumes fonksiyonunu kullanarak Volumes’u da tanımlıyoruz.

   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Dizileri dolduruyoruz:

   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

Mevcut Volumes değerini, önceki Volumes değerini, mevcut kısa MA değerini, mevcut uzun MA değerini, önceki kısa MA değerini ve önceki uzun MA değerini hesaplıyoruz:

   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Stratejinin koşulları:

Alış sinyali:

   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

Satış sinyali:

   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }

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

Kılavuz - MA&Vol Strategy

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

Grafiğe eklenmiş MA&Vol Strategy

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

Alış sinyali:

MA&Vol Strategy - Alış sinyali

Satış sinyali:

MA&Vol Strategy - Satış sinyali

 


Sonuç

Umarım bu faydalı teknik göstergeyi size yeterince iyi bir şekilde anlatabilmişimdir ve böylece siz de ticaretinizi geliştirmesi için onu nasıl uygun şekilde kullanabileceğinizi öğrenmişsinizdir. Makalemize Volumes göstergesinin arkasındaki konsepti kavrayarak başladık: Volumes göstergesinin ne olduğunu, neyi ölçtüğünü, onu nasıl okuyabileceğimizi ve nasıl kullanabileceğimizi inceledik, ayrıca forex ve borsa piyasaları arasındaki farkını tanımladık. Devamında, Volumes göstergesine dayalı bazı basit stratejileri ele aldık:

Sonrası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. Ardından da makalenin son ve en ilgi çekici bölümüne geçtik. 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şturduk.

Şunu her zaman olduğu gibi tekrar hatırlatmak istiyorum: Sizin için uygun olup olmadıklarını değerlendirmek adına, ticarette kullanmadan önce tüm stratejileri kapsamlı olarak test ettiğinizden emin olmalısınız. Sonuçta, başkaları için işe yarayan şey, sizin için mutlaka işe yaramayabilir. Umarım makale sizin için faydalı olur ve ticaret hedeflerinize ulaşmanıza, bu veya başka herhangi bir konuda yeni fikirler bulmanıza yardım sağlar. Ayrıca şunu da ifade etmek istiyorum, daha anlamlı hale getirmek için bu göstergeyi diğer teknik araçlarla kombine etmeyi de deneyebilirsiniz. Makalede bunun bir örneğini gerçekleştirmiştik - Volumes göstergesini Moving Average göstergesiyle kombine etmiştik. Bu makaleyi beğendiyseniz 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. Bir sonraki makalede görüşmek üzere.