English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
Relative Vigor Index göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

Relative Vigor Index göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

MetaTrader 5Ticaret | 5 Ekim 2023, 09:40
329 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

Yeni teknik araçları detaylı bir şekilde öğrenme ve bu araçlarla basit ticaret sistemleri tasarlama konulu serimizin yeni makalesine hoş geldiniz. Bu kez Relative Vigor Index (RVI) göstergesine odaklanacağız ve onu aşağıdaki başlıklar üzerinden inceleyeceğiz:

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

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. Yeni başlayan biri olarak kodlama becerilerinizi geliştirmek istiyorsanız öğreneceklerinizi kendi başınıza uygulamaya çalışmanızı tavsiye ederim çünkü pratik yapmak çok önemlidir. 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.

Bahsedilecek tüm stratejiler yalnızca eğitim amaçlıdır, bu nedenle optimizasyona ihtiyaç duyduklarını görebilirsiniz, ki bu normaldir, çünkü bu makalenin ve bu basit stratejilerin ana amacı göstergenin arkasındaki ana konsepti öğrenmektir. Dolayısıyla, bu stratejileri gerçek hesabınızda kullanmadan önce, ticaretinizde yararlı olacaklarından emin olmak için onları çok iyi bir şekilde test ettiğinizden emin olmalısınız.

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.


Relative Vigor Index göstergesinin tanımı

Bu bölümde, Relative Vigor Index (RVI) göstergesi nedir, bunu detaylı olarak konuşacağız. Bu bir momentum ve osilatör teknik göstergesidir. Bu gösterge, kapanış fiyatını açılış seviyesiyle karşılaştırarak trendin gücünü ölçer. Yükseliş trendinde kapanış fiyatı açılış fiyatının üzerinde kapanır, düşüş trendinde ise kapanış fiyatı açılış fiyatının altında kapanır. Buna ek olarak Simple Moving Average kullanılarak sonuçlar yumuşatılır. RVI göstergesi, doğası gereği trend olan piyasalarda yatay piyasalara göre daha iyi performans göstermektedir. RVI'ın hesaplanmasının Stochastic Oscillator’a benzer olduğunu ancak RVI'ın kapanış fiyatını açılış fiyatıyla karşılaştırdığını, Stochastic Oscillator’ın da kapanış fiyatını belirli bir periyottaki fiyat aralığıyla karşılaştırdığını görebiliriz. RVI'ı manuel olarak hesaplamak istiyorsak bunu aşağıdaki adımlarla yapabiliriz:

RVI = (CLOSE - OPEN) / (HIGH - LOW)

Tanımlamalar:

CLOSE = kapanış fiyatı

OPEN = açılış fiyatı

YÜKSEK = yüksek fiyatı

DÜŞÜK = düşük fiyatı

Ancak genellikle kullandığımız RVI, hesaplamada farklı bileşenlere sahip iki çizgi olarak görünür. Aşağıda onları nasıl hesaplayabileceğimiz anlatılmaktadır.

1- 1. çizginin hesaplanması:

  • Payın hesaplanması:

MovAverage = (CLOSE - OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

Tanımlamalar:

CLOSE = mevcut kapanış fiyatı

CLOSE 1, CLOSE 2, CLOSE 3 = 1,2 ve 3 periyot önceki kapanış fiyatları

OPEN = mevcut açılış fiyatı

OPEN 1, OPEN 2, OPEN 3 = 1,2 ve 3 periyot önceki açılış fiyatları

  • Paydanın hesaplanması:

RangeAverage = (HIGH - LOW) + 2 * (HIGH-1 - LOW-1) + 2 * (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

Tanımlamalar:

HIGH = mevcut yüksek fiyatı

HIGH, HIGH 2, HIGH 3 = 1, 2 ve 3 periyot önceki yüksek fiyatları

LOW = mevcut düşük fiyatı

LOW 1, LOW 2, LOW 3 = 1, 2 ve 3 periyot önceki düşük fiyatları

  • Bu ortalamaların toplamını aşağıdaki şekilde hesaplarız:

RVI ortalaması

2- 2. çizginin hesaplanması:

RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3) / 6

Bu şekilde, RVI göstergesini manuel olarak hesaplayabiliriz. Günümüzde, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, RVI’ı manuel olarak hesaplamamıza gerek yoktur. Tek yapmamız gereken mevcut göstergeler arasından onu seçmektir:

MetaTrader 5'i açın --> Ekle sekmesine tıklayın --> Göstergeler --> Osilatörler --> Relative Vigor Index

RVI göstergesini ekleme

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

RVI göstergesi parametreleri

1 - periyodu ayarlamak için.

2- RVI çizgisinin rengini ayarlamak için.

3- RVI çizgisinin stilini ayarlamak için.

4- RVI çizgisinin kalınlığını ayarlamak için.

5- Sinyal çizgisinin rengini ayarlamak için.

6- Sinyal çizgisinin stilini ayarlamak için.

7- Sinyal çizgisinin kalınlığını ayarlamak için.

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

Grafikte RVI göstergesi

Yukarıdaki görüntüden görebileceğimiz gibi, RVI göstergesi grafiğe eklenmiştir ve sıfır seviyesi etrafında salınan iki çizgiye sahiptir.


Relative Vigor Index göstergesi stratejileri

Bu bölümde, RVI göstergesini ana konseptine uygun olarak bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. Burada şunu tekrar teyit etmem gerekiyor: herhangi bir stratejiyi gerçek hesabınızda kullanmadan önce, ticaretinize uygun ve kârlı olduğundan emin olmak için onu detaylıca test ettiğinizden emin olmalısınız, çünkü burada sunulan basit stratejiler yalnızca eğitim amaçlı olarak paylaşılmaktadır ve bu nedenle onların optimizasyona ihtiyaç duyabileceğini görmeniz normaldir.

  • Birinci strateji: RVI - Çaprazlama - Yükseliş trendi:

Bu stratejiye dayanarak, yükseliş trendi sırasında belirli bir koşula göre alış ve kapanış sinyalleri alacağız. Mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, bu, alış sinyali olacaktır. Tersi şekilde, mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, bu da kapanış sinyali olacaktır.

Daha basit ifadeyle,

Mevcut RVI > 0 ve Mevcut RVI sinyal > 0 ve Mevcut RVI > Mevcut RVI sinyal --> Alış

Mevcut RVI < 0 ve Mevcut RVI sinyal < 0 ve Mevcut RVI < Mevcut RVI sinyal --> Kapanış

  • Birinci strateji: RVI - Çaprazlama - Düşüş trendi:

Bu stratejiye dayanarak, önceki RVI - Çaprazlama - Yükseliş trendi stratejisinin zıt sinyallerini alacağız: satış ve kapanış. Mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, bu, satış sinyali olacaktır. Tersi şekilde, mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, bu da kapanış sinyali olacaktır.

Daha basit ifadeyle,

Mevcut RVI < 0 ve Mevcut RVI sinyal < 0 ve Mevcut RVI < Mevcut RVI sinyal --> Satış

Mevcut RVI > 0 ve Mevcut RVI sinyal > 0 ve Mevcut RVI > Mevcut RVI sinyal --> Kapanış 

  • İkinci strateji: RVI - MA çaprazlama:

Bu stratejiye dayanarak, belirli koşullara göre alış ve satış sinyalleri alacağız. Mevcut kapanış fiyatı 100 periyotluk hareketli ortalamanın üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, bu, alış sinyali olacaktır. Diğer senaryoda, mevcut kapanış fiyatı 100 periyotluk hareketli ortalamanın altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, bu da satış sinyali olacaktır.

Daha basit ifadeyle,

Mevcut kapanış > 100 periyotluk hareketli ortalama ve Mevcut RVI > Mevcut RVI sinyal --> Alış

Mevcut kapanış < 100 periyotluk hareketli ortalama ve Mevcut RVI < Mevcut RVI sinyal --> Satış


Relative Vigor Index 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.

  • Birinci strateji: RVI - Çaprazlama - Yükseliş trendi:

Bu stratejiye göre, aşağıdaki değerleri sürekli olarak kontrol ederek yükseliş trendi sırasında alış ve kapanış sinyalleri veren bir ticaret sistemi oluşturmamız gerekiyor:

  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri
  • RVI göstergesinin sıfır seviyesi

Mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, ticaret sistemi şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Alış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Tersi şekilde, mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Kapanış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

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

RVI - Çaprazlama - Yükseliş trendi planı

  • Birinci strateji: RVI - Çaprazlama - Düşüş trendi:

Bu stratejiye göre, önceki stratejinin aynı değerlerini sürekli olarak kontrol ederek, düşüş trendi sırasında bize satış ve kapanış sinyalleri verebilecek bir ticaret sistemi oluşturmamız gerekiyor:

  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri
  • RVI göstergesinin sıfır seviyesi

Ancak istenen sinyallere göre koşullar biraz farklı olacaktır. Mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, ticaret sistemi şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Satış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Tersi şekilde, mevcut RVI değeri ve mevcut RVI sinyal değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Kapanış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

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

RVI - Çaprazlama - Düşüş trendi planı

  • İkinci strateji: RVI - MA çaprazlama:

Bu stratejiye göre, aşağıdaki değerleri sürekli olarak kontrol ederek alış ve satış sinyalleri veren bir ticaret sistemi oluşturmamız gerekiyor:

  • Mevcut kapanış fiyatı
  • 100 periyotluk hareketli ortalama
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Mevcut kapanış fiyatı 100 periyotluk hareketli ortalamanın üzerindeyse ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha yüksekse, ticaret sistemi şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Alış sinyali
  • Mevcut kapanış fiyatı
  • Mevcut MA değeri
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Diğer senaryoda, mevcut kapanış fiyatı 100 periyotluk hareketli ortalamanın altındaysa ve bununla birlikte mevcut RVI değeri mevcut RVI sinyal değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

  • Satış sinyali
  • Mevcut kapanış fiyatı
  • Mevcut MA değeri
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

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

RVI - MA çaprazlama planı

Relative Vigor Index göstergesine dayalı ticaret sistemi

Bu bölümde, hazırladığımız plan çerçevesinde ele aldığımız stratejilere dayalı olarak bir ticaret sistemi oluşturacağız. İlk olarak, stratejilerimizin programlarına temel olması adına mevcut RVI ve mevcut RVI sinyal değerlerini grafik üzerinde yorum olarak görüntüleyecek basit bir program yazalım. Adım adım nasıl yapılacağını görelim:

double fonksiyonunu kullanarak RVI ve RVI sinyal için iki dizi oluşturalım:

   double rviArray[];
   double rviSignalArray[];

ArraySetAsSeries fonksiyonunu kullanarak dizileri mevcut veriden başlayarak sıralayalım - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü):

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

rviDef için int türü değişken oluşturduktan sonra iRVI fonksiyonunu kullanarak RVI’ı tanımlayalım. iRVI fonksiyonu RVI göstergesinin tanıtıcısını geri döndürür. Parametreleri şunlardır:

  • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız. 
  • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız. 
  •  Moving Average periyodu - 10 ayarlayacağız.
int rviDef = iRVI(_Symbol,_Period,10);

CopyBuffer fonksiyonunu kullanarak oluşturduğumuz dizileri rviDef’in istediğimiz değerleriyle dolduralım. Parametreleri şunlardır: 

  • Gösterge tanıtıcısı - rviDef, rviDef gösterge tanımını kullanacağız.
  • Gösterge arabellek numarası - 0, 1 ayarlayacağız.
  • Başlangıç konumu - 0, 0 ayarlayacağız.
  • Kopyalanacak veri miktarı - 3, 3 ayarlayacağız.
  • Hedef dizi - rviArray, rviSignalArray ayarlayacağız.
   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

rviVal ve rviSignalVal için double türü değişkenler oluşturduktan sonra, double türünde değer geri döndüren NormalizeDouble fonksiyonunu kullanarak mevcut RVI ve mevcut RVI sinyal değerlerini hesaplayalım. Parametreleri şunlardır:

  • Normalleştirilmiş sayı - rviArray[0], rviSignalArray[0] kullanacağız.
  • Ondalık basamak sayısı - 3, 3 ayarlayacağız.
   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

Comment fonksiyonunu kullanarak mevcut RVI ve mevcut RVI sinyal değerlerini grafikte yorum olarak görüntüleyelim:

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

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

//+------------------------------------------------------------------+
//|                                                   Simple RVI.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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

  }
//+------------------------------------------------------------------+

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

Kılavuz - Simple RVI

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

Simple RVI 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ş Simple RVI

Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Böylece, program mevcut RVI ve mevcut RVI sinyal değerlerini grafik üzerinde yorum olarak gösterecektir:

Grafikte mevcut RVI ve mevcut RVI sinyal değerleri

Yukarıdaki görüntüden görebileceğimiz gibi, Uzman Danışman mevcut RVI ve mevcut RVI sinyal değerlerini grafiğin sol üst köşesinde yorum olarak görüntülemektedir.

  • Birinci strateji: RVI - Çaprazlama - Yükseliş trendi:

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

//+------------------------------------------------------------------+
//|                                      RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

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

Stratejinin koşulları:

Alış sinyali:

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Kapanış sinyali:

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Uzman Danışmanın kodunu derliyoruz ve grafiğe ekliyoruz:

Grafiğe eklenmiş RVI Crossover - Uptrend

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

Alış sinyali:

RVI Crossover - Uptrend - Alış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program alış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Alış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Kapanış sinyali:

RVI Crossover - Uptrend - Kapanış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program kapanış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Kapanış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

  • Birinci strateji: RVI - Çaprazlama - Düşüş trendi:

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

//+------------------------------------------------------------------+
//|                                    RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
  }
//+------------------------------------------------------------------+  

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

Stratejinin koşulları:

Satış sinyali:

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Kapanış sinyali:

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Uzman Danışmanın kodunu derliyoruz ve grafiğe ekliyoruz:

Grafiğe eklenmiş RVI Crossover - Downtrend

Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

Satış sinyali:

RVI Crossover - Downtrend - Satış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program satış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Satış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri 

Kapanış sinyali:

RVI Crossover - Downtrend - Kapanış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program kapanış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Kapanış sinyali
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

  • İkinci strateji: RVI - MA çaprazlama:

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

//+------------------------------------------------------------------+
//|                                           RVI & MA Crossover.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()
  {
   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

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

Dört dizi oluşturuyoruz (pArray, maArray, rviArray ve rviSignalArray). pArray dışındaki diziler için double fonksiyonunu kullanacağız, pArray için ise fiyat, hacim ve makas bilgilerini depolayan MqlRates fonksiyonunu kullanacağız:

   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

ArraySetAsSeries fonksiyonunu kullanarak maArray, rviArray ve rviSignalArray dizilerini mevcut veriden başlayarak sıralıyoruz - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü). pArray için MqlRates geçmiş verilerini almak adına CopyRates fonksiyonunu kullanacağız. CopyRates fonksiyonunun parametreleri şunlardır:

  • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
  • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
  • Başlangıç konumu - 0 ayarlayacağız. 
  • Kopyalanacak veri miktarı - 1 ayarlayacağız.
  • Hedef dizi - pArray ayarlayacağız.
   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Öncesinde yaptığımız gibi iRVI fonksiyonunu kullanarak RVI'ı tanımlıyoruz ve ayrıca şimdi iMA fonksiyonunu kullanarak da MA’yı tanımlıyoruz. iMA fonksiyonunun parametreleri şunlardır:

  • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız. 
  • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
  • Moving Average periyodu - 100 ayarlayacağız. 
  • Moving Average kayma miktarı - 0 ayarlayacağız. 
  • Moving Average yöntemi - Exponential Moving Average (MODE_EMA) kullanacağız. 
  • Uygulanacak fiyat - Kapanış fiyatını (PRICE_CLOSE) kullanacağız. 
   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

CopyBuffer fonksiyonunu kullanarak oluşturduğumuz dizileri rviDef ve maDef değerleriyle dolduruyoruz:

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

NormalizeDouble fonksiyonunu kullanarak RVI, RVI sinyal ve MA değerlerini tanımlıyoruz:

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

Stratejinin koşulları:

Alış sinyali:

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Satış sinyali:

   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Uzman Danışmanın kodunu derliyoruz ve grafiğe ekliyoruz:

Grafiğe eklenmiş RVI & MA Crossover

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

Alış sinyali:

RVI & MA Crossover - Alış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program alış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Alış sinyali
  • Mevcut kapanış fiyatı
  • Mevcut MA değeri
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri

Satış sinyali:

RVI & MA Crossover - Satış sinyali

Yukarıdaki görüntüden görebileceğimiz gibi, program satış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

  • Satış sinyali
  • Mevcut kapanış fiyatı
  • Mevcut MA değeri
  • Mevcut RVI değeri
  • Mevcut RVI sinyal değeri


Sonuç

Bu makaledeki konuğumuz Relative Vigor Index göstergesiydi. İlk olarak, RVI göstergesinin ne olduğu, neyi ölçtüğü ve manuel olarak nasıl hesaplandığı hakkında konuştuk. Devamında, bazı basit stratejileri ele alarak onu ticaretimizde nasıl kullanabileceğimizi gördük. Bu basit stratejiler şunlardı:

  • RVI - Çaprazlama - Yükseliş trendi: yükseliş trendi sırasında alış ve kapanış sinyalleri almak için.
  • RVI - Çaprazlama - Düşüş trendi: düşüş trendi sırasında satış ve kapanış sinyalleri almak için.
  • RVI - MA çaprazlama: belirli bir çaprazlama koşuluna dayalı olarak alış ve satış sinyalleri almak için.

Ardından, 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, makalenin en ilginç bölümüne geldik ve hazırladığımız plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak bir ticaret sistemi oluşturduk.

Bu makaledeki bilgilerden maksimum faydayı elde etmek ve programlama becerilerinizi geliştirmek adına öğrendiklerinizi kendi başınıza tekrarlı bir şekilde pratik etmeye çalışmalısınız. 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. Bu makaleyi beğendiyseniz ve buna benzer makaleler 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üşünceye kadar hoşça kalın.

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

Awesome Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? Awesome Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
Serimizin bu yeni makalesinde, ticaretimizde faydalı olabilecek yeni bir teknik araç hakkında bilgi edineceğiz. Bu, Awesome Oscillator (AO) göstergesidir. Bu göstergeyi kullanarak bir ticaret sisteminin nasıl tasarlayacağını öğreneceğiz.
Popülasyon optimizasyon algoritmaları: Balık sürüsü arama (Fish School Search, FSS) Popülasyon optimizasyon algoritmaları: Balık sürüsü arama (Fish School Search, FSS)
Balık sürüsü arama (Fish School Search, FSS) algoritması, %80'e varan çoğunluğu türdeş organize topluluklar halinde yüzen balıkların sürü içerisindeki davranışlarından esinlenen yeni bir optimizasyon algoritmasıdır. Balık kümelerinin, yiyecek arama ve avcılardan korunma verimliliğinde önemli bir rol oynadığı kanıtlanmıştır.
Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 22): Yeni emir sistemi (V) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 22): Yeni emir sistemi (V)
Bugün yeni emir sistemini geliştirmeye devam edeceğiz. Yeni bir sistemi uygulamak o kadar da kolay değildir, zira sık sık süreci büyük ölçüde zorlaştıran sorunlarla karşılaşırız. Bu sorunlar ortaya çıktığında durmalı ve ilerlediğimiz yönü yeniden analiz etmeliyiz.
DeMarker göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? DeMarker göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
En popüler teknik göstergelere dayalı ticaret sistemlerini nasıl tasarlayacağımızı öğrendiğimiz serimizin yeni makalesindeyiz. Bu makalemizde, DeMarker göstergesiyle bir ticaret sisteminin nasıl geliştirileceğini öğreneceğiz.