
Yatırımcıların Altın Kuralı
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.
- Piyasaya girerken riskinizi bilin (bu, ilk Zarar Durdurma değeridir);
- Zarardan her zaman erken dönün ve kârınızın artmasına izin verin (sisteminiz gerektirmeden önce pozisyonunuzu kapatmayın);
- 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





- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz