English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Yatırımcıların Altın Kuralı

Yatırımcıların Altın Kuralı

MetaTrader 4Ticaret sistemleri | 14 Ocak 2022, 13:37
337 0
Genkov
Genkov

Giriş

Bir yatırımcının ana görevi, yalnızca piyasaya girmek için doğru zamanı bulmak değildir. Çıkmak için doğru anı bulmak da gereklidir. Alım satımın altın kuralı şöyle der: "Zarardan her zaman erken dönün ve kârınızın artmasına izin verin".

Yüksek bir matematiksel beklentiye dayalı kar elde etmek için iyi alım satımın üç temel ilkesini anlamamız gerekir.

  1. Piyasaya girerken riskinizi bilin (bu, ilk Zarar Durdurma değeridir);
  2. Zarardan her zaman erken dönün ve kârınızın artmasına izin verin (sisteminiz gerektirmeden önce pozisyonunuzu kapatmayın);
  3. Sisteminizin matematiksel beklentisini bilin; düzenli olarak test edin ve ayarlayın.


Karınızın Artmasına İzin Veren Adım Adım Pozisyon Takip Yöntemi

Pek çoğu, piyasanın nereye gideceğini bilmediğimiz için kar elde etmenin imkansız olduğunu düşünüyor. Ancak başarılı şekilde alım satım yapmak için bunu gerçekten bilmemiz gerekiyor mu? Başarılı alım satım, çoğunlukla piyasaya girmek için uygun anları göz önünde bulundurarak uygun şekilde tasarlanmış bir sisteme dayanır. Bu tür değerlendirmeler, beklentinin gücü ve kârın mümkün olan en yüksek seviyeye ulaşmasını sağlayan adım adım pozisyon takibi kuralları kullanılarak yapılır.

Piyasa giriş anı, örneğin mum grafik modelleri, dalga modelleri vb. kullanılarak birçok şekilde bulunabilir. Aynı zamanda kar faktörü de dikkate alınmalıdır (kar/zarar oranı).

Bu yöntem aşağıdaki gereksinime dayanmaktadır: bir yatırımcı, bir pozisyon açarken mümkün olan en düşük Zarar Durdurma değerini seçer. Bu değer çeşitli yöntemlerle belirlenebilir, örneğin mevduatın %1,5'ine eşit olabilir. Piyasa Zarar Durdur değerine eşit bir kâra ulaştığında, lotun yarısı kapanır ancak Zarar Durdur değişmez!

Bu nedenle, piyasanın aksi yöne gitmesi ihtimaline karşılık bir tür güvenlik ağı oluşturuyoruz. Yani minimum kayıpları sabitleyerek riskimizi azaltıyoruz. Piyasa bir süre olumlu hareket edip tekrar olumsuz yönde ilerlerse Zarar Durdur tetiklenir (Şek. 1-3).


Şek. 1. Pozisyon açma


Şek. 2. Zarar Durdurmayı Ayarlama

Piyasa geri giderse:


Şek. 3. Piyasa geri hareket ettiyse başabaş seviyesindesiniz

Pozisyon Takip Program Kodu

Açık pozisyonları takip eden ve ikinci altın prensibi gerçekleştiren bir program kodu sunuyoruz, çünkü bu, kârın mümkün olan en yüksek seviyede artmasına izin verir.

Piyasa hala olumlu yönde hareket ediyorsa ve önceden belirlenmiş bir değere, örneğin 100 pip'e ulaşırsa Zararı Durdur bir başabaş seviyesine sıfırlanır. Önceden belirlenmiş aralıklarla, örneğin 50 pip'te kar elde edildiğinde daha fazla sıfırlama yapılır. Stop Loss'u sonraki her çubukta hareket ettirebiliriz, ancak komisyoncular, özellikle alım satım daha düşük zaman dilimlerinde yapıldığında, sık sıfırlamalardan hoşlanmazlar. Kitaplıklar klasöründeki hata dosyasında (stdlib.mq4), tam olarak bu durum için # 8 hata="çok sık istek" hatası bile var.

Her bir sonraki Zarar Durdurma seviyesini belirleme yöntemi, Fibonacci seviyelerine bağlı olarak kar elde etme anında bir fiyat pozisyonu tarafından seçilir. Uygulamalı Fibonacci seviyeleri burada Vegas Tüneli yöntemine göre oluşturulmuştur.

Fibonacci seviyeleri hesaplaması, LevelFibo() seviye oluşturma işlevi tarafından gerçekleştirilir:

//+------------------------------------------------------------------+
   void LevelFibo()
   {
   double Fb1,Fb2,Fb3,Fb4,Fb5,Fb6,Fb7,Fb8,Fb9,Fb10,Fb11,Fb12,Fb13;
   // "Vegas" channel
   double Ma144_1 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);
   double Ma169_1 = iMA(NULL,0,169,0,MODE_EMA,PRICE_CLOSE,1);
   // "Vegas" channel median
   double MedVegas=NormalizeDouble((Ma144_1+Ma169_1)/2,Digits); 
   // calculate Fibo levels values using "Vegas" method
   Fb1=MedVegas-377*Point;     Fb12=MedVegas+377*Point;
   Fb2=MedVegas-233*Point;     Fb11=MedVegas+233*Point;
   Fb3=MedVegas-144*Point;     Fb10=MedVegas+144*Point;
   Fb4=MedVegas-89*Point;      Fb9=MedVegas+89*Point;
   Fb5=MedVegas-55*Point;      Fb8=MedVegas+55*Point;
   Fb6=MedVegas-34*Point;      Fb7=MedVegas+34*Point;
   }
//+------------------------------------------------------------------+

SATIN AL pozisyonları için Zarar Durdurma hesaplanırken, kar, ilk Yüksek[1] çubuğunun Maks fiyatı ile pozisyon açma seviyesi OrderOpenPrice() arasındaki farktır. Zararı Durdur seviyesi, ilk çubuğun Düşük[1] Min değerine göre "en yakın" Fibonacci seviyesi olarak tanımlanır (Şekil 4).


Şek. 4. SATIN AL pozisyonu için Zarar Durdur hesaplaması

SATIŞ pozisyonları için Zarar Durdurma hesaplanırken kar, pozisyon açılış seviyesi OrderOpenPrice() ile ilk Yüksek [1] çubuğunun Maks fiyatı arasındaki farktır (Şek. 5).


Şek. 5. SATIŞ pozisyonu için Zarar Durdur hesaplaması

Alış pozisyonları için Zarar Durdur değerleri Fibo seviyelerine dayanmaktadır. İlk mum grafik çubuğunun en düşük değerine bağlı olarak ayrı bir işlev olarak sunulur.

İşlev kodu aşağıda gösterilmiştir:

//+---------------------------------------------------------------------+
//| Function (table) for specifying Stop Loss values for BUY position   |
//| by Fibo levels according to the lowest value of the first candle    |
//+---------------------------------------------------------------------+
 void StopLevelFiboBuy()
   {
   if(Low[1]>Fb12)                                newSL_B=Fb12-100*Point;
   if(Low[1]<=Fb12 && Low[1]>(Fb12+Fb11)/2)       newSL_B=(Fb12+Fb11)/2;
   if(Low[1]<=(Fb12+Fb11)/2 && Low[1]>Fb11)       newSL_B=Fb11;
   if(Low[1]<=Fb11 && Low[1]>(Fb11+Fb10)/2)       newSL_B=(Fb11+Fb10)/2;
   if(Low[1]<=(Fb10+Fb11)/2 && Low[1]>Fb10)       newSL_B=Fb10;
   if(Low[1]<=Fb10 && Low[1]>(Fb10+Fb9)/2)        newSL_B=Fb9;
   if(Low[1]<=(Fb10+Fb9)/2 && Low[1]>Fb9)         newSL_B=Fb8;
   if(Low[1]<=Fb9  && Low[1]>Fb8)                 newSL_B=Fb7;
   if(Low[1]<=Fb8  && Low[1]>Fb7)                 newSL_B=(Fb7+MedVegas)/2;
   if(Low[1]<=Fb7  && Low[1]>MedVegas)            newSL_B=Fb6;
   if(Low[1]<=MedVegas && Low[1]>(MedVegas+Fb6)/2)newSL_B=Fb6;
   if(Low[1]<=(MedVegas+Fb6)/2 && Low[1]>Fb6)     newSL_B=Fb5;
   if(Low[1]<=Fb6  && Low[1]>Fb5)                 newSL_B=Fb4;
   if(Low[1]<=Fb5  && Low[1]>Fb4)                 newSL_B=(Fb3+Fb4)/2;
   if(Low[1]<=Fb4  && Low[1]>Fb3)                 newSL_B=Fb3;
   if(Low[1]<=Fb3  && Low[1]>(Fb3+Fb2)/2)         newSL_B=(Fb3+Fb2)/2;
   if(Low[1]<=(Fb3+Fb2)/2  && Low[1]>Fb2)         newSL_B=Fb2;
   if(Low[1]<=Fb2  && Low[1]>(Fb2+Fb1)/2)         newSL_B=(Fb1+Fb2)/2;
   if(Low[1]<=(Fb2+Fb1)/2 && Low[1]>Fb1)          newSL_B=Fb1;
   if(Low[1]<=Fb1)                                newSL_B=Fb1-100*Point;
   }
//+------------------------------------------------------------------+

Satış pozisyonları için ilk StopLevelFiboSell() işlevi mum grafiğinin maksimum değerine bağlı olarak Fibo seviyelerine göre Zararı Durdur değerleri tablosu aşağıdaki kodla temsil edilir:

//+----------------------------------------------------------------------+
//| Function (table) for specifying Stop Loss values for SELL position   |
//| by Fibo levels according to the highest value of the first candle    |
//+----------------------------------------------------------------------+
 void StopLevelFiboSell()
   {
   if(High[1]<=Fb12 && High[1]>(Fb12+Fb11)/2)        newSL_S=Fb12+100*Point;
   if(High[1]<=Fb12 && High[1]>Fb11)                 newSL_S=Fb12;
   if(High[1]<=Fb11 && High[1]>Fb11+Fb10)            newSL_S=Fb11;
   if(High[1]<=Fb10 && High[1]>(Fb10+Fb9)/2)         newSL_S=(Fb11+Fb10)/2;
   if(High[1]<=Fb9  && High[1]>Fb8)                  newSL_S=(Fb10+Fb9)/2;
   if(High[1]<=Fb8  && High[1]>Fb7)                  newSL_S=Fb9;
   if(High[1]<=Fb7  && High[1]>MedVegas)             newSL_S=Fb8;
   if(High[1]<=MedVegas && High[1]>MedVegas)         newSL_S=Fb7;
   if(High[1]<=(MedVegas+Fb6)/2 && High[1]>Fb6)      newSL_S=MedVegas;
   if(High[1]<=Fb6  && High[1]>Fb5)                  newSL_S=MedVegas;
   if(High[1]<=Fb5  && High[1]>Fb4)                  newSL_S=Fb6;
   if(High[1]<=Fb4  && High[1]>Fb3)                  newSL_S=Fb5;
   if(High[1]<=Fb3  && High[1]>Fb2)                  newSL_S=Fb4;
   if(High[1]<=Fb2  && High[1]>(Fb2+Fb1)/2)          newSL_S=(Fb2+Fb3)/2;
   if(High[1]<(Fb2+Fb1)/2   && High[1]>Fb1)          newSL_S=Fb2;
   if(High[1]<Fb1)                                   newSL_S=(Fb2+Fb1)/2;
   }
//+------------------------------------------------------------------+

Bahsedilen iki bağımlılık işlevinin her birine LevelFibo Fibonacci seviyeleri hesaplama işlevinin eklenmesi uygun olacaktır. Bu, ekteki demo dosyalarında yapılmıştır.

Şimdi, iki işlevin kombinasyonu ile ilgili olarak veya daha doğrusu bu seviyelere odaklanan Zarar Durdurma seviyelerinin tanımlama işlevinde LevelFibo() seviyeleri hesaplama işlevinin etkinleştirilmesi. İşlevler birlikte çalıştığı için bu kombinasyon mantıklıdır. Bu nedenle, takip sırasında çağrılan işlev sayısı azalacaktır; iki yerine sadece biri kalacaktır.

Birleştirdikten sonra, aşağıdaki gibi görünecekler:

//+----------------------------------------------------------------------+
//| Function (table) for specifying Stop Loss values for BUY position    |
//| by Fibo levels according to the lowest value of the first candle     |
//+----------------------------------------------------------------------+
   void StoplevelFiboBuy()
   {
   double Fb1,Fb2,Fb3,Fb4,Fb5,Fb6,Fb7,Fb8,Fb9,Fb10,Fb11,Fb12,Fb13;
   double Ma144_1 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);
   double Ma169_1 = iMA(NULL,0,169,0,MODE_EMA,PRICE_CLOSE,1);
   double MedVegas=NormalizeDouble((Ma144_1+Ma169_1)/2,Digits); 
   Fb1=MedVegas-377*Point;     Fb12=MedVegas+377*Point;
   Fb2=MedVegas-233*Point;     Fb11=MedVegas+233*Point;
   Fb3=MedVegas-144*Point;     Fb10=MedVegas+144*Point;
   Fb4=MedVegas-89*Point;      Fb9=MedVegas+89*Point;
   Fb5=MedVegas-55*Point;      Fb8=MedVegas+55*Point;
   Fb6=MedVegas-34*Point;      Fb7=MedVegas+34*Point;
   if(Low[1]>Fb12)                                newSL_B=Fb12-100*Point;
   if(Low[1]<=Fb12 && Low[1]>(Fb12+Fb11)/2)       newSL_B=(Fb12+Fb11)/2;
   if(Low[1]<=(Fb12+Fb11)/2 && Low[1]>Fb11)       newSL_B=Fb11;
   if(Low[1]<=Fb11 && Low[1]>(Fb11+Fb10)/2)       newSL_B=(Fb11+Fb10)/2;
   if(Low[1]<=(Fb10+Fb11)/2 && Low[1]>Fb10)       newSL_B=Fb10;
   if(Low[1]<=Fb10 && Low[1]>(Fb10+Fb9)/2)        newSL_B=Fb9;
   if(Low[1]<=(Fb10+Fb9)/2 && Low[1]>Fb9)         newSL_B=Fb8;
   if(Low[1]<=Fb9  && Low[1]>Fb8)                 newSL_B=Fb7;
   if(Low[1]<=Fb8  && Low[1]>Fb7)                 newSL_B=(Fb7+MedVegas)/2;
   if(Low[1]<=Fb7  && Low[1]>MedVegas)            newSL_B=Fb6;
   if(Low[1]<=MedVegas && Low[1]>(MedVegas+Fb6)/2)newSL_B=Fb6;
   if(Low[1]<=(MedVegas+Fb6)/2 && Low[1]>Fb6)     newSL_B=Fb5;
   if(Low[1]<=Fb6  && Low[1]>Fb5)                 newSL_B=Fb4;
   if(Low[1]<=Fb5  && Low[1]>Fb4)                 newSL_B=(Fb3+Fb4)/2;
   if(Low[1]<=Fb4  && Low[1]>Fb3)                 newSL_B=Fb3;
   if(Low[1]<=Fb3  && Low[1]>(Fb3+Fb2)/2)         newSL_B=(Fb3+Fb2)/2;
   if(Low[1]<=(Fb3+Fb2)/2  && Low[1]>Fb2)         newSL_B=Fb2;
   if(Low[1]<=Fb2  && Low[1]>(Fb2+Fb1)/2)         newSL_B=(Fb1+Fb2)/2;
   if(Low[1]<=(Fb2+Fb1)/2 && Low[1]>Fb1)          newSL_B=Fb1;
   if(Low[1]<=Fb1)                                newSL_B=Fb1-100*Point;
   }
// ----------------------------------------------------------------------+

Takip eden pozisyonların ana komut kodu, mevcut çubukların fiyat değerlerine göre yukarıda belirtilen işlevlerin yürütülmesi için eylem sırası ile bir Expert Advisor parçası olarak temsil edilir. Uygun bir açık talimat seçildikten sonra adım adım takip başlar.

Takip kodunun küçük bir parçası aşağıda gösterilmiştir:

//+------------------------------------------------------------------+
//| TRAILING OPEN POSITIONS                                          |
//+------------------------------------------------------------------+
for(int i=OrdersTotal()-1; i>=0; i--)
  {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {Print("Order selection error = ",GetLastError());}
   if(OrderSymbol()==Symbol())
     {
      if(OrderType()==OP_BUY)
        {
         if(OrderMagicNumber()==Magic)
           {
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())>=SL_B*Point && OrderLots()==0.2)Close_B_lot();
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())/Point>=100 && OrderLots()==0.1 && OrderStopLoss()<OrderOpenPrice())
              {
               Print(" 1 - StopLoss shift");
               if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+2*Point,OrderTakeProfit(),0,Aqua))
                 {
                  Print(" at Modif.ord.# ",OrderTicket()," Error # ",GetLastError());
                 }
               return;
              }
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())>=120*Point && OrderOpenPrice()>Ma144_1-144*Point)
              {
               StoplevelFiboBuy();
               newSL_B=newSL_B+21*Point;
               if((Bid-newSL_B)/Point<StopLevel)newSL_B=Bid-StopLevel*Point;
               if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel)
                 {
                  Print("2nd shift of StopLoss ");
                  Modyf_B_lot();
                 }
              }
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())>=200*Point && (High[1]-OrderOpenPrice())<=250*Point)
              {
               StoplevelFiboBuy();
               if((Bid-newSL_B)/Point<StopLevel)newSL_B=Bid-StopLevel*Point;
               if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel)
                 {
                  Print(" 3rd shift by level order # ",OrderTicket());
                  Modyf_B_lot();
                 }
              }
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())>=250*Point && OrderOpenPrice()>Ma144_1-144*Point)
              {
               StoplevelFiboBuy();
               newSL_B=newSL_B+10*Point;
               if((Bid-newSL_B)/Point<StopLevel) newSL_B=Bid-StopLevel*Point;
               if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel)
                 {
                  Print(" 4th shift by level order # ",OrderTicket());
                  Modyf_B_lot();
                 }
              }
            // ----------------------------------------------------------------------+
            if((High[1]-OrderOpenPrice())>=300*Point && (High[1]-OrderOpenPrice())<=350*Point)
              {
               StoplevelFiboBuy();
               newSL_B=newSL_B+20*Point;
               if((Bid-newSL_B)/Point<StopLevel) newSL_B=Bid-StopLevel*Point;
               if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel)
                 {
                  Print(" 5th shift by level order # ",OrderTicket());
                  Modyf_B_lot();
                 }
              }
            // ----------------------------------------------------------------------+
            ...
           }
        }
     }
  }

Adım adım takip dizisi, ekteki demo Expert Advisor sürümünde 8 adımdan oluşur.

Aşağıda, Satın Alma pozisyonu takibi için demo Expert Advisor'ın çalışma adımlarını gösteren ekran görüntüsü yer almaktadır. Pozisyon "üç mum grafiğin birleşme" modelinin oluşması nedeniyle açıldı. Ayrıca, "ters çekiç" mum grafikler arasındadır. Bu durum, sinyalin alım pozisyonu açma gücünü pekiştiriyor.


Şek. 6. Satın alma pozisyonu takibi örneği

Aydınlık bir ekran görüntüsünde olduğu gibi Fibo çizgilerini görmek için "Vegas" göstergesi kullanılmalıdır. MQL4 web sitesinde görülebilir: https://www.mql5.com/tr/code/7148

"Karanlık" ekrandan aynı küçük uzatılmış ekran görüntüsü:

Şek. 7. Monitör ekranından ekran görüntüsü (Satın Alma için demo sürümü)

Şek. 8. Satış pozisyonu takibi örneği

Aşağıdaki Şekil 9-10'da gösterildiği gibi, Expert Advisorlar'ın demo çalışmalarını görüntülemek için geçici test parametreleri kurulmalıdır:


Şek. 9. Demo_trail_Buy.mql Expert Advisor test parametreleri


Şek. 10. Demo_trail_Sell.mql Expert Advisor test parametreleri

Not: Demo Expert Advisorlar olan dosyalar, alım ve satım pozisyonlarını takip etmek için mini robotlar olarak makaleye eklenmiştir. Pozisyonlar burada çift lotta açılır. Ancak Zarar Durdurma başa baş bir seviyeye taşındığında, gelecekte doğru yönde fiyat hareketi olmasına güven duyulur ve başka bir pozisyon eklemek mümkündür.


Sonuç

Sunulan talimat örnekleri, Fibo dinamik seviyelerine odaklanan Zarar Durdur talimatları taşıma yönteminin olumlu sonuçlar verebileceğini göstermektedir. Açıklanan yöntem, alım satımda pratik kullanım için önerilebilir.

Dinamik Fibo seviyeleri tanımlama işlevleri:

  • LevelFiboKgd.mq4
  • StopLevelFiboBuy.mq4
  • StopLevelFiboSell.mq4
  • Demo dosyaları:
  • Demo_trail_Buy_v1.mq4 – Satın Alma için demo dosyası
  • Demo_trail_Sell_v1.mq4 - Satış için demo dosyası


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

Teknik Analiz ve Piyasa Tahmini Yöntemleri Üzerine Teknik Analiz ve Piyasa Tahmini Yöntemleri Üzerine
Makale, görsel düşünme ve "kullanıma hazır" bir pazar görünümü ile birleştirilmiş iyi bilinen bir matematiksel yöntemin yeteneklerini ve potansiyelini göstermektedir. Bir yandan, yaratıcı zihinlerin alım satım paradigmasını yeniden gözden geçirmesini sağlayabildiği için geniş bir kitlenin dikkatini çekmeye hizmet eder. Öte yandan, analiz ve tahmin için çok çeşitli araçlarla ilgili alternatif geliştirmelere ve program kodu uygulamalarına yol açabilir.
Test (Optimizasyon) Tekniği ve Expert Advisor Parametrelerinin Seçiminde Bazı Kriterler Test (Optimizasyon) Tekniği ve Expert Advisor Parametrelerinin Seçiminde Bazı Kriterler
Testin Kutsal Kasesini bulmakta hiçbir sorun yoktur ancak ondan kurtulmak çok daha zordur. Bu makale, Terminal performans özelliklerinin maksimum kullanımı ve minimum son kullanıcı yükü üzerine optimizasyon ve test sonuçlarının otomatik grup işlemesi ile Expert Advisor işletim parametrelerinin seçimini ele almaktadır.
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.
CCanvas Sınıfını incelemek. Şeffaf Nesneler Nasıl Çizilir CCanvas Sınıfını incelemek. Şeffaf Nesneler Nasıl Çizilir
Hareketli ortalamaların garip grafiklerinden daha fazlasına mı ihtiyacınız var? Terminalinizde basit ve içi dolu bir dikdörtgenden daha güzel bir şey çizmek ister misiniz? Terminalde etkileyici grafikler çizilebilir. Bu, özel grafikler oluşturmak için kullanılan CСanvas sınıfı aracılığıyla uygulanabilir. Bu sınıfla, saydamlığı uygulayabilir, renkleri karıştırabilir ve üst üste binen ve karışan renkler aracılığıyla saydamlık yanılsaması oluşturabilirsiniz.