English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Fiyat Yönüne ve Hareket Hızına Dayalı Alım Satım Fikirleri

Fiyat Yönüne ve Hareket Hızına Dayalı Alım Satım Fikirleri

MetaTrader 4Örnekler | 14 Ocak 2022, 13:46
555 0
Alexander Fedosov
Alexander Fedosov

Giriş

Bir fiyat hareket ettiğinde, tüm likit piyasaların önce yükselen ve sonra aşağı inen bir tür dalga döngüsel doğası ortaya çıkardığı uzun zamandır bilinmektedir. Daha yüksek zaman dilimlerinin grafiklerinde açıkça görülmektedir. Sinüzoidal doğa, fiyatın belirli bir kalıcılığa sahip olduğu gerçeğinin bir yansımasıdır. Aksi takdirde bir zikzak gibi görünürdü: kısa süreler içinde ani yukarı ve aşağı hareketler. Bu olgunun nedenlerini ve alım satımda kullanmanın yollarını bulmaya çalışalım.


Hareket Başlangıcı ve Kalıcılık

Dünyamızdaki herhangi bir hareket yönü, ivmesi ve hızı ile karakterize edilebilir. Bu, likit piyasalarda da işe yarar. Bu, fiyatın tek bir güçlü yönlü hareketinin asla sert bir şekilde sona eremeyeceğini söyleyen önemli bir kuralı ima eder. Bir trene benzetilebilir: Bütün bir tren tam hızda fren yaptığında, fren mesafesi bir kilometreye kadar çıkabilir.

Peki bir trend ne zaman başlar? Piyasa katılımcılarının çoğunluğu, küresel yön değişikliği veya piyasayı veya haberleri etkileyen bazı önemli faktörlerin değişmesi ile ilgili bazı nedenlerle görüşlerini aksi yönde değiştirdiğinde. Bununla birlikte, dikkate alınan bir kolektif fikir oluşur ve trend başlar. Piyasa katılımcıları, hareketin güçlendiğine ve daha da devam edeceğine dair artan bir inanca sahiptir. Büyük oyuncular piyasaya büyük pozisyonlarla girdiği için bir yönü, ivmesi ve belli bir hızı vardır. Hareketin en başında giren ve ona ivme ve hız kazandıranların kazanç elde etmeye başladıkları yer burasıdır. Diğer yatırımcılar piyasaya daha geç ve daha az cazip fiyatlarla girer. Ancak ilk yatırımcıların aksine, fiyat hareketi yönünü kullanmaya çalışırlar.

Trend, değişiklikler meydana geldiğinde sona erer. Ama neden fiyat hala aynı şekilde hareket ediyor? Neden aniden değişmiyor? Bu davranışın nedeni, fiyatı istenen yönde hızlandıran ve itenlerin pozisyonlarını kapatmaya başlaması ve böylece trendi bastırmasıdır. Ayrıca sadece "rüzgarı arkasına alanlar" hala hiçbir şeyin değişmediğine inanıyor ve hatta fiyatı hareket ettirmeye çalışıyorlar. Ancak bu "tren" sadece durmaz. Ters yönde hareket etmeye başlar ve hikaye burada biter.


Alım Satım Fikri ve "Tren" Tarafından Ezilmeme

Hareketi kullanma ve kar elde etme fikri, mevcut trend derinliğinin, yani boyutunun ve süresinin analizine dayanır.

Canlı bir örnek sağlamak için standart göstergeler kullanıyoruz: RSI (Göreceli Güç Endeksi) ve AC (Hızlanma/Yavaşlama).

1. Pazara giriş koşulları

Fiyatın şu anda ne kadar ileri ve derin hareket ettiğini göstermek için ilk göstergeyi kullanacağız.

Bir mesafe ve derinlik belirlemek için seviyeler yerleştireceğiz:

Şek. 1 RSI osilatör seviyeleri

Şek. 1. RSI osilatör seviyeleri

Fiyat hareketi derinliği değerlendirme kriterleri:

  • 40 - 60 seviyeleri arasındaki bir alan düz bölge (yan bölge) olarak kabul edilir. Fiyat bu bölgedeyken herhangi bir trend bulunmaz. Yönlendirilmiş bir hareketin olmamasına indeks 0 atayalım.

Satın alma fiyat hareketi bölgeleri:

  • Bölge 60-70 - bu, yukarı doğru hareketin olası bir başlangıcıdır. Bu harekete indeks 1 atayalım.
  • Bölge 70-80 - yukarı doğru hareket daha belirgindir. Hareket hız kazanır. İndeks 2 atayın.
  • Bölge 80-90 - hareketin stabil bir yönü vardır. Hız kazanıldı. İndeks 3 atayın.
  • Bölge 90-100. Kural olarak bu, geri çekilmeleri olmayan güçlü tek yönlü bir harekettir. Çok nadir. Hareket indeksi 4 olacaktır.

Benzer şekilde satış fiyatlarını endeksleyelim:

  • Bölge 30-40. Hareket aşağı doğru inmeye başlar. İndeks -1.
  • Bölge 20-30. Hareket hız kazanır. İndeks -2.
  • Bölge 10-20. Stabil aşağı yön. İndeks -3.
  • Bölge 0-10. Güçlü tek yönlü hareket bölgesi. İndeks -4.

Bu durumu MQL4 dilinde şu şekilde tanımlayabiliriz:

//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if( rsi > 80.0 ) 
   index_rsi = 3;
   else if( rsi > 70.0 ) 
   index_rsi = 2;
   else if( rsi > 60.0 ) 
   index_rsi = 1;
   else if( rsi < 10.0 ) 
   index_rsi = -4;
   else if( rsi < 20.0 ) 
   index_rsi = -3;
   else if( rsi < 30.0 ) 
   index_rsi = -2;
   else if( rsi < 40.0 ) 
   index_rsi = -1;

Bill Williams'ın AC göstergesini amacına uygun olarak kullanacağız, yani mevcut hareketin hızını ve ivmesini ölçeceğiz.

Şek. 2. AC göstergesi

Şek. 2. AC göstergesi

Hız değerlendirme kriterleri:

Büyüme.

  • İlk kriter, mevcut ve önceki histogramların karşılaştırılmasıdır. Mevcut histogram öncekini aşarsa fiyat artışında olası bir hızlanma vardır. 1'e eşit hız indeksi olarak tanımlayalım.
  • İkinci kriter, 3 komşu çubuğun karşılaştırılmasıdır (sıfır çubuğundan ikinci çubuğa). Sonraki her çubuğun değeri bir önceki çubuğun değerini aşarsa artan ivmeden bahsedebiliriz. Hız indeksi 2'ye eşit olacaktır.
  • Önceki her çubuğun sonrakinden daha küçük olup olmadığını kontrol etmek için 4 çubuğun benzer bir karşılaştırması vardır. Hız indeksi 3'tür.
  • Aynı durumu kontrol etmek için son 5 çubuğun mevcut olana göre karşılaştırılması. Hız indeksi 4'tür.

Düşüş.

  • Aynı şekilde. Mevcut çubuğun ve öncekinin karşılaştırılması. Mevcut çubuk öncekinden daha küçükse hız endeksi -1'e eşittir.
  • Öncekinden mevcut olana 3 çubuk azaltma karşılaştırması. İndeks -2'dir.
  • 4 çubuğun karşılaştırılması. İndeks -3'tür.
  • 5 çubuğun karşılaştırılması. İndeks -4'tür.

MQL4'te aşağıdaki gibi görünecektir:

double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;

Hareket derinliği indekslerimiz varsa ve hareket hızını biliyorsak bazı giriş koşullarını ortaya koyabilir ve sınıflandırabiliriz.

Piyasaya giriş seçenekleri vardır:

//--- buy signal
if(index_rsi==1 && index_ac>=1) //possible buy movement
if(index_rsi==2 && index_ac>=1) //weak buy movement
if(index_rsi==3 && index_ac==1) //weak buy movement
if(index_rsi==3 && index_ac>=2) //moderate buy movement
if(index_rsi==4 && index_ac>=1) //strong buy movement

//--- sell signal  
if(index_rsi==-1 && index_ac<=-1) //possible sell movement
if(index_rsi==-2 && index_ac<=-1) //weak sell movement
if(index_rsi==-3 && index_ac==-1) //weak sell movement
if(index_rsi==-3 && index_ac<=-2) //moderate sell movement
if(index_rsi==-4 && index_ac<=-1) //strong sell movement

//--- flat 
if(index_rsi==0) 


2. Piyasadan çıkış koşulları

Giriş parametrelerini tanımladık ve sınıflandırdık. Piyasa çıkış koşullarının nasıl oluştuğunu açıklamak için aşağıdaki benzetmeyi yapacağız.

Örneğin bir çocuğun lastik topunu düşünün. Şimdi biri bu topu çok yüksek bir yerden suya atarsa ne olacağını düşünelim. İlk önce yerçekimi ivmesi nedeniyle düşüyor ve hız kazanıyor. Sonra suya çarpıyor. Ama belli bir derinliğe dalıp hızını kaybedecek ve negatif bir değere sahip olacak kadar hıza sahiptir. Top, Arşimet ilkesi tarafından etkilenir, bu nedenle yüzeye itilir.

Şimdi bu örneği detaylandıracağız:

  • Zaten anladığınız gibi, topumuz fiyattır.
  • Topu atan bir kişi, trendi başlatan piyasa katılımcılarını temsil eder.
  • Yerçekimi ivmesine neden olan yerçekimi kuvveti, trend başladıktan sonra fiyat yönüne katılan yatırımcıları temsil eder.
  • Su, yön değişikliğini etkileyen önemli faktörleri temsil eder.
  • Arşimet ilkesi, trendi başlatanların kapalı pozisyonlarını temsil eder.

Kar elde etmek için iki ana hedef aşağıdaki gibidir:

  1. Topun zaten atıldığı bir anı zamanında belirleyin ve satın alın veya satın.
  2. Top suya daldığında ve yavaşladığında bir pozisyonu kapatın.

Finans piyasalarında ne topu fırlatan kişiyi ne de suyu göremediğimiz için süreyi ve topun tam düşme mesafesini belirlemek zor olabilir. Sadece topun hızını ve yönünü görebiliriz.

Fiyat hareket derinliği ve hız değerlendirme kriterlerini yukarıda inceledik.

Şimdi çıkış koşullarını tanımlayacağız:

//--- possible downward reversal
if(index_rsi>2 && index_ac<0) 

Fiyat yeterince uzun bir süredir yükseliyorsa ivmesi negatif olur (aşağı yönde). Bu, trend değişikliğinin oldukça mümkün olduğu gerçeğine işaret ediyor.

//--- possible upward reversal
if(index_rsi<-2 && index_ac>0) 

Verilen örneğe benzer şekilde: top yeterince uzun süre düşüyordu ancak suya düştü ve su topu ters yönde dışarı itti. Pozisyonların kapanma anını gösterir.


3. Giriş ve çıkış verimliliğinin arttırılması

Bazı alım satım göstergelerinin, daha büyük bir dönem kullandığımızda trend değişikliğine tepki verme hızlarını artırdığı bilinmektedir. Ancak daha fazla yanlış sinyal de ortaya çıkıyor.

Alternatif yol, hesaplama dönemini alt tarafa değiştirmek değil, birkaç zaman diliminde takip etmektir.

Şek. 3. RSI ve AC sinyallerine dayalı farklı zaman dilimlerindeki trend

Şek. 3. RSI ve AC sinyallerine dayalı farklı zaman dilimlerindeki trend

Fiyat hareketi trendi, kriterlerimiz ve RSI ve AC göstergeleri nedeniyle şekilde açıkça görülebilir. Gelin detaylı bir şekilde inceleyelim.

M1'de hareket ve hız: güçlü hareket, AC indeksi 4, RSI indeks derinliği 2'dir. M5 aynı derinliğe sahiptir ancak hız 1'e eşittir. Aynı hareket M15'te de belirlendi ancak alt grafiklere göre daha az görülüyor. 30 dakika ve bir saatlik grafikten bahsetmişken, M30'un zaten bir sinyale sahip olduğunu ve H1'in yavaşlama ve hatta olası bir geri dönüş sinyali olduğunu görmek etkileyici.

Bu örnek bize önemli bir sonuç veriyor:

yalnız H1 olarak düşünürsek geri dönüşü bekleyen bir satış talimatı verirdik. Ancak, daha düşük zaman dilimlerinin analizini yaparken filtrelediğimiz yanlış bir sinyal olacaktır.


4. Alım satım stratejisinin bir expert advisor şeklinde uygulanması

Expert advisor kodu:

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                                                Alexander Fedosov |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property strict
#include <trading.mqh>      //Support library for trade operations
//+------------------------------------------------------------------+
//| Parameters                                                       |
//+------------------------------------------------------------------+
input int             SL = 40;               // Stop loss
input int             TP = 70;               // Take profit
input bool            Lot_perm=true;         // Lot of balance?
input double          lt=0.01;               // Lot
input double          risk = 2;              // Risk of deposit, %
input int             slippage= 5;           // Slippage
input int             magic=2356;            // Magic number
input int             period=8;              // RSI indicator period
input ENUM_TIMEFRAMES tf=PERIOD_CURRENT;     // Working timeframe
int dg,index_rsi,index_ac;
trading tr;
//+------------------------------------------------------------------+
//| Expert Advisor initialization function                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- determining variables for auxiliary class of trading functions
//--- language for displaying errors, Russian of by default.
   tr.ruErr=true;
   tr.Magic=magic;
   tr.slipag=slippage;
   tr.Lot_const=Lot_perm;
   tr.Lot=lt;
   tr.Risk=risk;
//--- number of attempts.
   tr.NumTry=5;
//--- determining decimal places on the current chart
   dg=tr.Dig();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Main calculation function                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
   depth_trend();
   speed_ac();
//--- check for presence of open orders
   if(OrdersTotal()<1)
     {
      //--- check of buy conditions
      if(Buy())
         tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg);
      //--- check of sell conditions
      if(Sell())
         tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg);
     }
//--- are there open orders?
   if(OrdersTotal()>0)
     {
      //--- check and close sell orders which meet closing conditions.
      if(Sell_close())
         tr.ClosePosAll(OP_SELL);
      //--- check and close buy orders which meet closing conditions.
      if(Buy_close())
         tr.ClosePosAll(OP_BUY);
     }

  }
//+------------------------------------------------------------------+
//| Function for determining the trend depth                         |
//+------------------------------------------------------------------+
void depth_trend()
  {
//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if(rsi>80.0)
      index_rsi=3;
   else if(rsi>70.0)
      index_rsi=2;
   else if(rsi>60.0)
      index_rsi=1;
   else if(rsi<10.0)
      index_rsi=-4;
   else if(rsi<20.0)
      index_rsi=-3;
   else if(rsi<30.0)
      index_rsi=-2;
   else if(rsi<40.0)
      index_rsi=-1;
  }
//+------------------------------------------------------------------+
//| Function for determining the trend speed                         |
//+------------------------------------------------------------------+
void speed_ac()
  {
   double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;
  }
//+------------------------------------------------------------------+
//| Function for checking buy conditions                             |
//+------------------------------------------------------------------+
bool Buy()
  {
   bool res=false;
   if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell conditions                            |
//+------------------------------------------------------------------+
bool Sell()
  {
   bool res=false;
   if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking buy position closing conditions            |
//+------------------------------------------------------------------+
bool Buy_close()
  {
   bool res=false;
   if(index_rsi>2 && index_ac<0)
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell position closing conditions           |
//+------------------------------------------------------------------+
bool Sell_close()
  {
   bool res=false;
   if(index_rsi<-2 && index_ac>0)
      res=true;
   return (res);
  }

Yalnızca iki parametre kullanarak küçük bir optimizasyon gerçekleştirdik: tf (çalışma zaman dilimi) ve dönem (RSI gösterge dönemi).

M15'te aşağıdaki sonuçları elde ettik:


Şek. 4. Expert Advisor geriye dönük test sonuçları

Dikkat! Bu sadece bir demo versiyonu. Testler için ve gerçek hesaplarda kullanmanızı önermiyoruz.

Sonuç

Piyasa davranışını tahmin etmek imkansız olduğundan, trendin başlangıcını ve sonunu belirlemek tüm dünyadaki yatırımcılar için karmaşık görevlerden biridir.

Ancak mevcut trendde giriş ve çıkış anlarını belirlemek ve buna bağlı olarak oldukça yüksek kar elde etmek son derece mümkündür. Ayrıca hareket hızının genel tespiti ve dinamik takibi bu konuda yardımcı olabilir.

Başarılı alım satımlar dilerim.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/1747

Ekli dosyalar |
trading.mqh (48.16 KB)
tester.mq4 (11.59 KB)
Piyasadan Ürün Satın Alma İpuçları. Adım Adım Rehber Piyasadan Ürün Satın Alma İpuçları. Adım Adım Rehber
Bu adım adım kılavuz, gerekli bir ürünü daha iyi anlamak ve aramak için ipuçları ve püf noktaları sağlar. Makale, uygun bir ürünü aramanın, istenmeyen ürünleri ayırmanın, ürün verimliliğini ve sizin için gerekliliğini belirlemenin farklı yöntemlerini çözmeye çalışıyor.
MetaTrader 5'te RSS Beslemelerini Görüntülemek için Etkileşimli Bir Uygulama Oluşturma MetaTrader 5'te RSS Beslemelerini Görüntülemek için Etkileşimli Bir Uygulama Oluşturma
Bu makalede RSS beslemelerinin görüntülenmesi için bir uygulama oluşturma olasılığına bakıyoruz. Makale, MetaTrader 5 için etkileşimli programlar oluşturmak için Standart Kitaplığın özelliklerinin nasıl kullanılabileceğini gösterecektir.
Daha İyi Bir Programcı Nasıl Olunur? (1. Bölüm): Başarılı bir MQL5 programcısı olmak için bu 5 şeyi yapmayı bırakmalısınız Daha İyi Bir Programcı Nasıl Olunur? (1. Bölüm): Başarılı bir MQL5 programcısı olmak için bu 5 şeyi yapmayı bırakmalısınız
Yeni başlayanların ve hatta ileri düzey programcıların yaptığı, kodlama kariyerlerinde olabileceklerinin en iyisi olmalarını engelleyen birçok kötü alışkanlık vardır. Bu yazıda bunları ele alacağız ve tartışacağız. Bu makale, başarılı bir MQL5 geliştiricisi olmak isteyen herkesin okuması gereken bir makaledir.
MQL5 Cookbook: ОСО Talimatları MQL5 Cookbook: ОСО Talimatları
Her bir yatırımcının alım satım faaliyeti, talimatlar arasındaki ilişkiler de dahil olmak üzere çeşitli mekanizmalar ve karşılıklı ilişkiler içerir. Bu makale, OCO talimatlarının işlenmesi için bir çözüm önerir. Standart kitaplık sınıfları kapsamlı bir şekilde dahil edilir ve burada yeni veri türleri oluşturulur.