
Likit Grafik
Giriş
Bir keresinde, H4 zaman dilimine sahip grafiklerin her aracıda farklı göründüğünü fark etmiştim. Bunun arkasındaki sebep, aracıların farklı zaman dilimlerinde bulunmasıydı. Bazı durumlardaki zaman dilimleri arasında küçük bir fark olmasına rağmen aynı grafiklerin belirli kısımları önemli ölçüde farklıydı. Bir grafikte belirgin bir geri dönüş formasyonu vardı ancak diğerinin aynı kısmı herhangi kesin bir formasyonu temsil etmiyordu.
Sonra, H1 grafiğini yeniden çizecek bir gösterge yazmak aklıma geldi, böylece sağ tarafta her zaman tam bir kapanış çubuğu olacaktı. Fiyat kaynağı olarak M1 dönemi seçilmiştir. Sonuç olarak, her dakika bir saatlik çizelge yeniden çizildi ve bir saat içinde aynı saatlik çizelgenin 60 çeşidini elde ettim. Biçimi yumuşak ve akıcı bir şekilde değişiyordu ve ilk şeklin bir ipucu bile olmadığı gizli şekilleri ortaya çıkarıyordu.
Bu göstergeye spesifik görünümü için "likit grafik" adını verdim. Çizim moduna bağlı olarak, grafik ya temel sürecin yeni bir çubuğu göründüğünde ya da statik kaymanın değeri değiştiğinde "akar" (yeniden çizilir). Bu makalede, "likit grafik" çizim prensiplerini ele alacağız, ardından bir gösterge yazacağız ve bu teknolojinin kullanım verimliliğini göstergelerle alım satım yapan Experts formasyonlarla alım satım yapan Experts arasında karşılaştıracağız.
1. Çizim Prensibi
Başlamadan önce, terimleri tanımlayacağız.
Shift , ortaya çıkan grafik çubuklarının açılış fiyatları ile kaynak grafik çubuklarının açılış fiyatları arasındaki farktır.
Geçerli zaman dilimi, kaynak grafiğin zaman dilimidir.
Temel zaman dilimi, sonuçtaki grafiğin çubuklarını oluşturmak için kullanacağımız fiyatları içeren bir zaman dilimidir.
Temel dönem mevcut olanı aşamaz. Cari dönem, temel döneme kalansız bölünmelidir. Mevcut zaman diliminin temel olana oranı ne kadar büyük olursa, elde edilen grafikte o kadar farklı varyasyonlar elde edebiliriz. Bununla birlikte oran çok büyükse, o zaman temel zaman diliminin geçmişe yönelik verileri, sonuçta ortaya çıkan grafik çubuklarının gerekli sayıda çizilmesi için yeterli olmayabilir.
Grafik çizmenin üç türü vardır.
- Statik kaydırmalı grafik (Statik Kaydırma veya SS).
- Açılış modunda dinamik kaydırmalı grafik (Dinamik Kaydırma, sadece Aç veya DSO).
- Açılış modunda dinamik kaydırmalı grafik (Dinamik Kaydırma, sadece Aç veya DSO).
Statik kaydırma modunda, çubukların açılma süreleri ayarlanan süre kadar kaydırılır. Açılış modundaki dinamik kaydırma, çubuğun yeni açılmış gibi görünmesini ve kapanış modundaki çubuğun yakında kapanacakmış gibi görünmesini sağlar.
Daha yakından bir göz atalım.
1.1. Statik Kaydırmalı Grafik
Bu modda her çubuğun açılma süresi, ayarlanan temel zaman dilimlerine eşdeğer dakika sayısı kadar kaydırılır. Biz buna shift adını vereceğiz. Bu şekilde küme kayması 0'a eşitse, grafik kaynak olanla tamamen aynıdır. Kayma 1, temel sürenin 15 dakika olması sağlayarak 15 dakikaya eşit olur. Kayma 2, 30 dakikaya eşittir vb.
Kayma (k-1) değerini aşamaz; burada k, mevcut zaman diliminin temel zamana oranıdır. Bu, mevcut zaman dilimi H1 ve temel olan M1 ile, izin verilen maksimum kaymanın 60/1 - 1 = 59 temel zaman dilimi, yani 59 dakika olduğu anlamına gelir. Temel zaman dilimi M5 ise, izin verilen maksimum kayma, temel zaman dilimlerinin 60/5 - 1 = 11'idir, yani 55 dakikadır.
Mevcut zaman dilimi H1'de ve 15 dakikalık kaydırmada çubukların açılış zamanı 00:15, 01:15, 02:15 vb. Mevcut zaman dilimi M15'de ve 1 dakikalık kaydırmada, çubukların açılış zamanı 00:16, 00:31, 00:46, 01:01 vb.
Kaydırmalar sınır değerlere yakın olduğu zaman, bunun gibi bir grafik kaynak olandan nadiren farklı demektir. Kaydırma değeri izin verilen aralığın ortasına yakın olduğunda önemli farklılıklar ortaya çıkar.
Şek. 1. 1'e eşit kaydırma değerindeki M15 temel zaman dilimindeki saatlik çubuk biçimlendirme örneği
1.2. Açılış Modunda Dinamik Kaydırmalı Grafik
Bu modda, temel zaman diliminin yeni bir çubuğu her göründüğünde kaydırma yeniden hesaplanır. Aynı zamanda, grafiğin sonundaki çubukta var olan zamanın kaydırması (en son fiyatlar), temel zaman dilimi değerini aşmayacak şekilde hesaplanır. Mevcut zaman dilimi H1 ve temel olan M5 ise, en sağdaki çubuk beş dakikadan önce açılmamış gibi görünecektir.
Şek. 2. Açılış modunda dinamik kaydırmalı M15'in temel zaman dilimindeki saatlik çubuk biçimlendirmesi örneği
1.3. Kapanış Modunda Dinamik Kaydırmalı Grafik
Açılış modunda olduğu gibi bu modda da, temel zaman diliminin yeni bir çubuğu her göründüğünde kaydırma yeniden hesaplanır. Tek fark kaydırmanın, grafiğin sonundaki çubuğun (en son fiyatlar) var olma zamanının, mevcut ve temel zaman dilimleri arasındaki farktan büyük veya eşit olduğu şekilde hesaplanmasıdır. H1 mevcut zaman diliminde ve M5 temel zaman diliminde, en sağdaki çubuk en geç beş dakika içinde kapanacak gibi görünmektedir.
Şek. 3. M15 temel zaman diliminde saatlik çubuk biçimlendirmesi ve kapanış modunda dinamik kaydırma örneği
2. Veri Dönüşümü
GetRatesLC() işlevi, küme kaymasını hesaba katarak geçmişe dönük verileri dönüştürmek için yazılmıştır. CopyRates() işlevine benzer şekilde, MqlRates türündeki yapı dizisine değiştirilmiş geçmişe dönük verileri yazar.
int GetRatesLC( int start_pos // source for copying int len, // amount to copy MqlRates& rates[], // target array ENUM_TIMEFRAMES base_period, // basic timeframe int& shift // shift );
Parametreler
start_pos
[içinde] Geçerli zaman dilimindeki ilk öğe endeksi. Bu veri dönüştürmenin ve bir arabelleğe kopyalamanın başlangıç noktasıdır.
uzunluk
[içinde] Kopyalanan öğe sayısı.
kur[]
[dışında] MqlRates türünün dizisi.
base_period
[içinde] Temel zaman dilimi.
kaydırma
[içinde] [dışında] Kaydırma. Aşağıdaki değerleri kabul edebilir:
Değer | Açıklama |
---|---|
-2 | Açma modundaki kaydırmayı hesaplayın (çubuk biçimlendirme başlangıcı) |
-1 | Kapanış modundaki kaymayı hesaplayın (çubuk biçimlendirme sonu) |
0 ... N | Küme kaydırması uygulayın. 0'dan N'ye kadar olan değerleri kabul edebilir. N = Tcur/Tbase - 1. Tcur mevcut zaman dilimi olduğunda, Tbase temel bir zaman dilimidir. |
Tablo 1. shift parametresinin izin verilen değerleri
İşlev başarılı bir şekilde uygulanırsa shift, -2 veya -1 değerlerini geçtiyse hesaplanan kaydırma değerini alır.
Dönüş değeri
Kopyalanan öğe sayısı veya hata kodu:
Kod | Açıklama |
---|---|
-1 | Temel zaman dilimi yanlış belirtildi |
-2 | Kaydırma yanlış belirtildi |
Tablo 2. Dönüş hatası kodları
liquidchart.mqh dosyasındaki GetRatesLC() işlevinin kodu aşağıdadır.
int GetRatesLC(int start_pos,int len,MqlRates &rates[],ENUM_TIMEFRAMES base_period,int& shift) { //--- number of basic timeframes contained in the current one int k=PeriodSeconds()/PeriodSeconds(base_period); if(k==0) return(-1);//basic timeframe specified incorrectly //--- MqlRates r0[]; ArrayResize(rates,len); if(CopyRates(_Symbol,_Period,start_pos,1,r0)<1) return(0);// no data //--- int sh; if(shift>=0) { //--- fixed shift if(shift<k) sh=shift; else return(-2);//--- shift specified incorrectly } else if(shift==-1) { //--- shift to be calculated (dynamic, beginning of the bar formation) sh=int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); } else if(shift==-2) { //--- shift to be calculated (dynamic, end of the bar formation) sh=1+int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); if(sh>=k) sh = 0; } else return(-2);//shift specified incorrectly //--- opening time of the basic period bar, which is the beginning of the current period bar formation //--- synchronization of the time of opening bars takes place relative to the tO time datetime tO; //--- closing time of the bar under formation, i.e. opening time of the last bar of basic timeframe in the series datetime tC; tO=r0[0].time+sh*PeriodSeconds(base_period); if(tO>TimeCurrent()) tO-=PeriodSeconds(); tC=tO+PeriodSeconds()-PeriodSeconds(base_period); if(tC>TimeCurrent()) tC=TimeCurrent(); int cnt=0; while(cnt<len) { ArrayFree(r0); int l=CopyRates(_Symbol,base_period,tC,k,r0); if(l<1) break; //--- time of the bar with the (l-1) index does not have to be equal to tC //--- if there is no bar with the tC time, it can be the nearest bar //--- in any case its time is assigned to the tC time tC=r0[l-1].time; //--- check if tO has the correct value and modify if needed. while(tO>tC) tO-=PeriodSeconds(); //--- the time values of tO and tC have actual meaning for the bar under formation int index=len-1-cnt; rates[index].close=0; rates[index].open=0; rates[index].high=0; rates[index].low=0; rates[index].time=tO; for(int i=0; i<l; i++) if(r0[i].time>=tO && r0[i].time<=tC) { if(rates[index].open==0) { rates[index].open= r0[i].open; rates[index].low = r0[i].low; rates[index].high= r0[i].high; }else{ if(rates[index].low > r0[i].low) rates[index].low=r0[i].low; if(rates[index].high < r0[i].high) rates[index].high=r0[i].high; } rates[index].close=r0[i].close; } //--- specifying closing time of the next bar in the loop tC=tO-PeriodSeconds(base_period); // cnt++; } if(cnt<len) { //-- less data than required, move to the beginning of the buffer int d=len-cnt; for(int j=0; j<cnt; j++) rates[j]=rates[j+d]; for(int j=cnt;j<len;j++) { //--- fill unused array elements with zeros rates[j].close=0; rates[j].open=0; rates[j].high=0; rates[j].low=0; rates[j].time=0; } } shift = sh; return(cnt); }
Birkaç önemli nokta vurgulanmalıdır.
- İşlev, tick hacimlerini döndürmez. Bunun nedeni DSC modundaki işlevin, çubuğun açılışında olduğu gibi asla bire eşit olan hacmi döndürmemesidir. Bu oldukça mantıklıdır. Expert Advisor'ınız bire eşit tick hacmini yeni bir çubuk biçimlendirme sinyali olarak kullanırsa, o sinyali asla alamaz. Bu yöntem, Hareketli Ortalama Expert Advisor'da kullanılır. İşleve tick hacimlerinin bir sayımını ekleyebilirsiniz, ancak düzgün çalışmayacaktır. Karışıklığı önlemek için tick hacimlerini hiç bir zaman ölçmem.
- İşlev istenen sayıda çubuk döndürür ancak bu, ilk ve son çubuk arasındaki zamanın, kaynak grafikteki karşılık gelen zaman aralığı ile orantılı olacağı anlamına gelmez. Geçmişe dönük verilerin devamındaki bir bölümde benzerlikler olacaktır. Belirtilen bölüm hafta sonlarını içeriyorsa, sınır çizgisinde "hayalet çubuklar" görünebilir.
Aşağıdaki şekil bir "hayalet çubuk" örneğini temsil etmektedir. Bu çubuk, 26 Ekim'de 23:01 açılış saati ile birlikte çubuğa dahil olan 27 Ekim'in ilk dakikası için oluşturuldu. Bu gibi çubuklardan sonra gösterge grafiğinin kaynak grafiğe ilişkin olarak sola kaydırılmasına dikkat edilmelidir. Başlangıç zamanına karşılık gelen zamanlı çubuklar (örneğin, 21:00 -> 21:01), farklı endekslere sahip olacaktır.
Şek. 4. Hayalet çubuk 2014.10.26 23:01'de
3. Göstergenin Uygulanması
Hadi ayrı bir pencerede "likit grafiği" gösteren bir gösterge yazalım. Gösterge üç modda da çalışmalıdır: statik kaydırma modu, çubuk açılış modunda dinamik kaydırma ve çubuk kapanış modunda dinamik kaydırma. Ayrıca gösterge, modları ve kaydırma değerini gösterge parametreleri diyaloğu çağırmaya gerek kalmadan değiştirmek için kontrol öğelerine sahip olmalıdır.
Başlangıç için liquidchart.mqh dosyasındaki GetRatesLC() işlevini kullanacağız. Biz bunu RefreshBuffers() işlevinden çağıracağız ama bir de OnCalculate işlevinden de çağrılır. Moddaki bazı değişikliklerin veya gösterge arabelleklerinin kaydırması ve yeniden hesaplanmasının gerekliliğinin sağlanmasıyla, OnChartEvent öğesinden de çağrılabilir. OnChartEvent işlevi, düğmelere basmayı ve kaydırma ve mod değerlerini değiştirmeyi işleyecektir.
Göstergenin girdi parametreleri:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input int Depth=100; // Depth, bars input ENUM_LC_MODE inp_LC_mode=LC_MODE_SS; // LC mode input int inp_LC_shift=0; // LC shift
Derinlik elde edilen grafiğin çubuk sayısıdır ve ENUM_LC_MODE, göstergenin çizim modlarını açıklayan türdür:
enum ENUM_LC_MODE {//plotting mode LC_MODE_SS=0, // Static Shift LC_MODE_DSO=1, // Dynamic Shift, just Open LC_MODE_DSC=2 // Dynamic Shift, expected Close };inp_LC_mode ve inp_LC_shift parametreleri, buna göre LC_mode ve LC_shift ile çoğaltılır. Bu tasarım, değerlerin düğmeye basarak değiştirilmesine olanak tanır. Düğmelerin çizimi ve düğmelere basmayı işleme bu makalenin konusu ile ilgili olmadığı için ele alınmayacaktır. Hadi RefreshBuffers() işlevini detaylı olarak ele alalım.
bool RefreshBuffers(int total, double &buff1[], double &buff2[], double &buff3[], double &buff4[], double &col_buffer[]) { MqlRates rates[]; ArrayResize(rates,Depth); //--- int copied=0; int shift=0; if(LC_mode==LC_MODE_SS) shift = LC_shift; //static shift else if(LC_mode==LC_MODE_DSO) shift = -1; //calculate shift (beginning of the bar formation) else if(LC_mode==LC_MODE_DSC) shift = -2; //calculate shift (end of the bar formation) else return(false); //--- copied=GetRatesLC(0,Depth,rates,BaseTF,shift); //--- if(copied<=0) { Print("No data"); return(false); } LC_shift = shift; refr_keys(); //--- initialize buffers with empty values ArrayInitialize(buff1,0.0); ArrayInitialize(buff2,0.0); ArrayInitialize(buff3,0.0); ArrayInitialize(buff4,0.0); //--- int buffer_index=total-copied; for(int i=0;i<copied;i++) { buff1[buffer_index]=rates[i].open; buff2[buffer_index]=rates[i].high; buff3[buffer_index]=rates[i].low; buff4[buffer_index]=rates[i].close; //--- if(rates[i].open<=rates[i].close) col_buffer[buffer_index]=1;//bullish or doji else col_buffer[buffer_index]=0;//bearish // buffer_index++; } // return(true); }
İlk başta, moda bağlı olarak shift değişkeniyle ilgili bir değer GetRatesLC() işlevine geçirilir. Bu statik modda LC_shift parametresinin kopyası olacak ve buna göre çubuğun açılış veya kapanış modlarında -1 veya -2 olacaktır. İşlevin başarılı bir şekilde yürütülmesinden sonra, GetRatesLC() kaydırmanın geçerli değerini, shift değişkenine döndürür. Ya yeniden hesaplanır ya da olduğu gibi bırakılır. Her durumda, değeri LC_shift değişkenine atarız ve ardından grafik öğelerinin refr_keys() işleviyle yeniden çizilmesini çağırırız.
Ondan sonra, gösterge arabelleklerindeki OHLC değerlerini ve çubuk renklerini yenileriz.
Göstergenin tam kodu liquid_chart.mq5 dosyasında bulunabilir. Başlatmadan sonra gösterge aşağıdaki gibi görünür:
Şek. 5. Likit Grafik göstergesi
Kontrol öğeleri hakkında birkaç söz.
- SS düğmesi, göstergeyi statik kaydırma moduna geçirir. Bu modda oklu düğmeler aktiftir ve gereken kaydırma değerini ayarlamak için kullanılabilirler.
- DSO düğmesi, göstergeyi çubuk biçimlendirme başlangıcında dinamik kaydırma moduna geçirir. Bu moddaki kaydırma değeri hesaplanır ve manuel olarak değiştirilemez.
- DSC düğmesi, göstergeyi dinamik kaydırma modu, çubuk biçimlendirmesinin sonu olarak değiştirir. Bu modda, kaydırmanın manuel olarak değiştirilmesi de mümkün değildir.
SS modundaki kaydırma değeri 0 olduğunda, gösterge ilk grafiğin değerlerini çoğaltır. Kaydırmayı değiştirirseniz, grafiğin yeniden çizildiğini göreceksiniz. Zaten 28 değerinde gözle görülür bir fark ortaya çıkar. Zayıf "raylar" yerine belirgin bir "çekiç" vardır. Satın alma zamanı geldi mi?
Şek. 6. Likit Tablo göstergesi, kaydırma 28
Göstergeyi DSO moduna getirin ve yeni oluşturulmuş bir çubuk her zaman sağda olacaktır. DSC modunda, temel zaman dilimi değerinden daha geç olmamak üzere kapanacak bir çubuk vardır.
4. Expert oluşturma
Şimdi iki Expert oluşturacağız. İlki Hareketli Ortalama ve ikincisi "pin çubuğu" formasyonu ile işlem görecektir.
Standart örneklerden (Experts\Examples\Moving Average klasörü) Hareketli Ortalama Expert'i şablon olarak alalım. Bu yolla, statik veya dinamik kaydırmayı kullanırken anlamak için temelde farklı iki stratejinin optimizasyon sonuçlarını karşılaştırabileceğiz.
4.1. Hareketli Ortalamaya Göre Expert Alım Satım
İlk önce girdi parametreleri tanımlanmalıdır. Bunlardan dört tanedir:
input double MaximumRisk = 0.1; // Maximum Risk in percentage input double DecreaseFactor = 3; // Decrease factor input int MovingPeriod = 12; // Moving Average period input int MovingShift = 6; // Moving Average shift
Modernizasyondan sonra üç parametre daha eklenecektir:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input bool LC_on = true; // LC mode ON input int LC_shift = 0; // LC shift
LC_on parametresi, GetRatesLC()'nin düzgün çalışıp çalışmadığını kontrol etmek için faydalı olacaktır. (LC_on == true && LC_shift == 0) kombinasyonu, (LC_on == false) ile aynı sonuca sahip olmalıdır.
Hazır Expert Hareketli Ortalamanın kaydırma ile modernizasyonu için liquidchart.mqh dosyasının eklenmesi ve kaydırma özelliğinin etkinleştirildiği durumlarda GetRatesLC() işlevleriyle CopyRates() işlevlerinin değiştirilmesi gerekmektedir ( LC_on girdi parametresi true'dır):
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,2,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,2,rt); if(copied!=2) { Print("CopyRates of ",_Symbol," failed, no history"); return; }
Bunun hem CheckForOpen() hem de CheckForClose() işlevlerinde yapılması gereklidir. Gösterge tanıtıcılarını kullanmayı reddedip ve Hareketli Ortalamaları manuel olarak hesaplayacağız. Bunun için CopyMABuffer() işlevini ekledik:
int CopyMABuffer(int len,double &ma[]) { if(len<=0) return(0); MqlRates rates[]; int l=len-1+MovingPeriod; int copied; if(LC_on==true) { int shift = LC_shift; ArrayResize(rates,l); copied=GetRatesLC(MovingShift,l,rates,BaseTF,shift); } else copied=CopyRates(_Symbol,_Period,MovingShift,l,rates); // if(copied<l) return(0); // for(int i=0;i<len;i++) { double sum=0; for(int j=0;j<MovingPeriod;j++) { if(LC_on==true) sum+=rates[j+i].close; else sum+=rates[copied-1-j-i].close; } ma[i]=sum/MovingPeriod; } return(len); }
Herhangi bir nedenle elde edilemezse, ma[] arabelleğinde gerekli sayıda değer veya 0 döndürür.
Açılan çubukların kontrolü de dikkat edilmesi gereken bir diğer önemli noktadır. Hareketli Ortalama Expert Advisor orijinal versiyonunda, tick değerleri kullanılarak uygulanmıştır:
if(rt[1].tick_volume>1) return;
Bizim durumumuzda tick hacmi yoktur. Bu nedenle, çubuğun açılmasını kontrol etmek için newbar() işlevini yazacağız:
bool newbar(datetime t) { static datetime t_prev=0; if(t!=t_prev) { t_prev=t; return(true); } return(false); }
Çalışma prensibi, çubuğun açılma zamanının önceki değer ile karşılaştırılmasında yatmaktadır. CheckForOpen() ve CheckForClose() işlevlerindeki newbar() işlevinin çağrısı için tick hacminin kontrolünü değiştirelim:
if(newbar(rt[1].time)==false) return;
Hazır Expert'in tam kodu moving_average_lc.mq5 dosyasında bulunabilir.
4.2. "Pin Çubuğu" Formasyonuyla Expert Advisor Alım Satım İşlemi
Pin çubuğu veya Pinokyo çubuğu, üç çubuktan oluşan bir formasyondur. Orta çubuk, fiyat hareketinin olası tersine döndüğünü gösteren uzun bir gölgeye veya "buruna" sahip olmalıdır. Kenarlardaki çubuklara "göz" denir. Uç noktalar komşu çubuğun gölgesinden çıkmamalıdır. Bu formasyon, şamdan formasyonuyla alım satım yapan yatırımcılar arasında popülerdir.
Pin çubuğumuz, fiyatı aşağı yönde tersine çevirmek için aşağıdaki koşulları yerine getirmelidir:
- r[0] çubuğu yükselişte olmalıdır.
- r[2] çubuğu düşüşte olmalıdır.
- A ve C fiyatlarının en büyük değeri B değerini aşmamalıdır, burada A ve C sırasıyla r[0] ve r[2] çubuklarının Yüksek değerleridir. B, r[1] çubuğunun Yüksek fiyatıdır.
- Orta çubuğun gövdesi, yani r[1] çubuğunun Açık veKapalı (şekildeki OC) arasındaki farkın modülüdür, harici parametre ile ayarlanan nokta sayısını geçmemelidir.
- Orta çubuğun gölgesi veya r[1] çubuğunun Yüksek fiyat ile Açık ve Kapalı değerlerin en büyüğünün farkı, harici parametre ile ayarlanan nokta sayısından az olmamalıdır.
- Orta çubuk gölgesinin gövdesine oranı, harici parametre ile ayarlanan değerden az olmamalıdır.
Formasyon kontrolü, r[3] çubuğunun açılma anında gerçekleştirilecektir.
Şek. 7. "Pin Çubuğu" formasyonu
Aşağıya tersine dönüş için pin çubuğunun iletişim durumunu tanımlayan kod şu şekilde görünmelidir:
if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); }
Yukarıya tersine dönüş için de aynı şekildedir. Bu nedenle, pin çubuğunun iletişim durumunu kontrol etme işlevi aşağıdaki gibi görünecektir:
int IsPinbar(MqlRates &r[]) { //--- there must be 4 values in the r[] array if(ArraySize(r)<4) return(0); if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); } else if(r[0].open>r[0].close && r[2].open<r[2].close && r[1].low<MathMin(r[0].low,r[2].low)) { //--- eyes of the lower pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(MathMin(r[1].open,r[1].close)-r[1].low)/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(-1); } return(0); }
Geçirilen geçmiş veri dizisi dörtten az öğeye sahip olmamalıdır. Yukardaki pin çubuğunun algılanması durumunda (yani aşağıya tersine dönüşü gösteren pin çubuğu), işlev 1 değerini döndürür. Daha aşağıda bir pin çubuğu olması durumunda (yukarı tersine döndürüldüğü varsayılır), işlev -1 değerini döndürür. Hiç pin çubuğu yoksa işlev 0 döndürür. İşlev ayrıca aşağıdaki girdi parametrelerini de kullanır:
input uint inp_pb_min_shdw = 40; // Pin bar min shadow, point input uint inp_pb_max_OC = 20; // Pin bar max OC, point input double inp_pb_min_ratio = 2.0; // Pin bar shadow to OC min ratio
Pin çubuğundaki en basit alım satım stratejisi ile alım satım işlemi yapacağız. Beklenen aşağıya tersine dönüş ise satar, yukarıya tersine dönüş ise alırız. Normalde, gösterge doğrulamaları gereklidir ancak bu sefer deneysel bütünlüğü korumak için bunları kullanmayacağız. Sadece pin çubuğu kullanacağız.
"Pin Çubuğu" formasyonuyla Expert Advisor alım satım işlemi, Hareketli Ortalama ile Expert işlemine dayalı olacaktır. CopyMABuffer() işlevi ikincisinden silinmeli hem de bu işlevi CheckForOpen() ve CheckForClose() işlevlerinden çağırmalıdır. Talep edilen geçmişe dönük veri sayısı ikiden dörde çıkarılacaktır. r[3] çubuğunun zamanı, yeni çubuğun açılması için kontrollü şekilde kullanılacaktır.
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,4,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,4,rt); if(copied!=4) { Print("CopyRates of ",_Symbol," failed, no history"); return; } if(newbar(rt[3].time)==false) return;
Pozisyon açılış sinyali kontrolü şu şekilde görünecektir:
int pb=IsPinbar(rt); if(pb==1) // upper pin bar signal=ORDER_TYPE_SELL; // sell conditions else if(pb==-1) // lower pin bar signal=ORDER_TYPE_BUY; // buy conditions
Karşıt pin çubuğu ile pozisyonu kapatmak için:
if(type==(long)POSITION_TYPE_BUY && pb==1) signal=true; if(type==(long)POSITION_TYPE_SELL && pb==-1) signal=true;
Lütfen girdi parametrelerinin katı koşullarında, pin çubuğunun seyrek oluştuğunu unutmayın. Bu nedenle pozisyonu sadece karşıt pin çubuğu ile kapatırken, kar kaybetme veya zararla kapama riski vardır.
Bu bağlamda Kar Al ve Zarar Durdur seviyeleri ekleriz. Sırasıyla inp_tp_pp ve inp_sl_pp harici parametreleri tarafından ayarlanacaklardır:
double sl=0,tp=0,p=0; double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if(signal==ORDER_TYPE_SELL) { p=bid; if(inp_sl_pp!=0) sl=NormalizeDouble(ask+inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(ask-inp_sl_pp*_Point,_Digits); } else { p=ask; if(inp_sl_pp!=0) sl=NormalizeDouble(bid-inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(bid+inp_sl_pp*_Point,_Digits); } CTrade trade; trade.PositionOpen(_Symbol,signal,TradeSizeOptimized(),p,sl,tp);
inp_tp_pp veya inp_sl_pp değeri sıfırsa, o zaman karşılık gelen Kar Al veya Zarar Durdur seviyesi ayarlanmayacaktır.
Modifikasyon tamamlandı. Expert hazır. Kodun tamamı pinbar_lc.mq5 dosyasında bulunabilir.
5. Expert Optimizasyonu
Farklı stratejilerdeki kaydırma grafiklerinin verimliliğini değerlendirmek için, Expert optimizasyonunu en iyi sonuçların daha ileri karşılaştırılmasıyla kullanacağız. Buradaki en önemli parametreler kar, alçalma ve işlem sayısıdır. Hareketli Ortalama ile Expert Advisor alım satım işlemi, bir gösterge stratejisi örneği sunacak ve "Pin Çubuğu" formasyonuyla Expert alım satım işlemi, gösterge olmayan bir strateji durumu temsil edecektir.
Optimizasyon, son yarım yıl boyunca MetaQuotes-Demo sunucusundaki tekliflerle gerçekleştirilecektir. Deneme EURUSD, GBPUSD ve USDJPY için yapılacaktır. Başlangıç mevduatı, 1:100 kaldıracıyla 3000 USD'dir. Test modu "Tüm tickler"dir. Optimizasyon modu - hızlı (genel algoritma), Denge Max.
5.1. Hareketli Ortalamaya Göre Expert Alım Satım İşlemi Optimizasyon Sonuçlarının Analizi
Expert farklı modlarda çalışırken optimize etme sonuçlarını karşılaştıralım: sıfır kaydırmalı, statik kaydırmalı ve dinamik kaydırmalı (DSO ve DSC).
2014.04.01 - 2014.10.25 (son altı ay) döneminde EURUSD, GBPUSD ve USDJPY için test yapılacaktır. Süre H1.
Expert giriş parametreleri:
Parametre | Değer |
---|---|
Yüzde olarak Maksimum Risk | 0.1 |
Kurtarma Faktörü | 3.0 |
Dönem | 12 |
Hareketli Ortalama kaydırma | 6 |
BaseTF | 1 dakika |
LC_on | doğru |
LC_shift | 0 |
Tablo 3. Hareketli Ortalama LC Expert'in giriş parametreleri
5.1.1. Devre Dışı Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Dönem | 12 | 1 | 90 |
Hareketli Ortalama kaydırma | 6 | 1 | 30 |
Tablo 4. Hareketli Ortalama LC Expert'in sıfır kaydırma modunda optimize edilmiş parametreleri
Devre dışı kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 8. Hareketli Ortalama LC Expert'in sıfır kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift |
---|---|---|---|---|---|
3796,43 | 796,43 | 16,18 | 111 | 24 | 12 |
3776,98 | 776,98 | 17,70 | 77 | 55 | 22 |
3767,45 | 767,45 | 16,10 | 74 | 59 | 23 |
3740,38 | 740,38 | 15,87 | 78 | 55 | 17 |
3641,16 | 641,16 | 15,97 | 105 | 12 | 17 |
Tablo 5. Hareketli Ortalama LC Expert'in EURUSD için sıfır kaydırma modundaki en iyi sonuçları
Sıfır kaydırma modunda Expert optimizasyonunu gösteren grafik, GBPUSD:
Şek. 9. Hareketli Ortalama LC Expert'in sıfır kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift |
---|---|---|---|---|---|
4025,75 | 1025,75 | 8,08 | 80 | 18 | 22 |
3857,90 | 857,90 | 15,04 | 74 | 55 | 13 |
3851,40 | 851,40 | 18,16 | 80 | 13 | 24 |
3849,48 | 849,48 | 13,05 | 69 | 34 | 29 |
3804,70 | 804,70 | 16,57 | 137 | 25 | 8 |
Tablo 6. Hareketli Ortalama LC Expert'in GBPUSD için sıfır kaydırma modundaki optimizasyonunun en iyi sonuçları
Devre dışı kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 10. Hareketli Ortalama LC Expert'in sıfır kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift |
---|---|---|---|---|---|
5801,63 | 2801,63 | 11,54 | 48 | 65 | 23 |
5789,17 | 2789,17 | 14,03 | 50 | 44 | 27 |
5539,06 | 2539,06 | 17,14 | 46 | 67 | 27 |
5331,34 | 2331,34 | 15,05 | 61 | 70 | 9 |
5045,19 | 2045,19 | 12,61 | 48 | 83 | 15 |
Tablo 7. Hareketli Ortalama LC Expert'in USDJPY için sıfır kaydırma modundaki en iyi sonuçları
5.1.2. Statik Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Dönem | 12 | 1 | 90 |
Hareketli Ortalama kaydırma | 6 | 1 | 30 |
LC_shift | 1 | 1 | 59 |
Tablo 8. Hareketli Ortalama LC Expert'in statik kaydırma modundaki optimize edilmiş parametreleri
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 11. Hareketli Ortalama LC Expert'in statik kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4385,06 | 1385,06 | 12,87 | 100 | 32 | 11 | 8 |
4149,63 | 1149,63 | 14,22 | 66 | 77 | 25 | 23 |
3984,92 | 984,92 | 21,52 | 122 | 12 | 11 | 26 |
3969,35 | 969,35 | 16,08 | 111 | 32 | 11 | 24 |
3922,95 | 922,95 | 12,29 | 57 | 77 | 25 | 10 |
Tablo 9. Hareketli Ortalama LC Expert'in EURUSD için statik kaydırma modundaki en iyi optimizasyon sonuçları
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, GBPUSD:
Şek. 12. Hareketli Ortalama LC Expert'in statik kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4571,07 | 1571,07 | 14,90 | 79 | 12 | 25 | 42 |
4488,90 | 1488,90 | 15,46 | 73 | 12 | 25 | 47 |
4320,31 | 1320,31 | 9,59 | 107 | 12 | 16 | 27 |
4113,47 | 1113,47 | 10,96 | 75 | 12 | 25 | 15 |
4069,21 | 1069,21 | 15,27 | 74 | 12 | 25 | 50 |
Tablo 10. Hareketli Ortalama LC Expert'in GBPUSD için statik kaydırma modundaki en iyi optimizasyon sonuçları
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 13. Hareketli Ortalama LC Expert'in statik kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6051,39 | 3051,39 | 15,94 | 53 | 76 | 12 | 31 |
5448,98 | 2448,98 | 10,71 | 54 | 44 | 30 | 2 |
5328,15 | 2328,15 | 11,90 | 50 | 82 | 13 | 52 |
5162,82 | 2162,82 | 10,46 | 71 | 22 | 26 | 24 |
5154,71 | 2154,71 | 14,34 | 54 | 75 | 14 | 58 |
Tablo 11. Hareketli Ortalama LC Expert'in USDJPY için statik kaydırma modundaki en iyi optimizasyon sonuçları
5.1.3. Dinamik Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Dönem | 12 | 1 | 90 |
Hareketli Ortalama kaydırma | 6 | 1 | 30 |
LC_shift | -2 | 1 | -1 |
Tablo 12. Hareketli Ortalama LC Expert'in dinamik kaydırma modundaki optimize edilmiş parametreleri
Dinamik kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 14. Hareketli Ortalama LC Expert'in dinamik kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
3392,64 | 392,64 | 27,95 | 594 | 15 | 13 | -2 |
3140,26 | 140,26 | 23,35 | 514 | 12 | 17 | -2 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 23 | -1 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 12 | -1 |
2826,25 | -173,75 | 20,12 | 350 | 85 | 22 | -1 |
Tablo 13. Hareketli Ortalama LC Expert'in EURUSD için dinamik kaydırma modundaki en iyi optimizasyon sonuçları
Dinamik kaydırma modundaki Expert optimizasyonunu gösteren grafik, GBPUSD:
Şek. 15. Hareketli Ortalama LC Expert'in dinamik kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
5377,58 | 2377,58 | 19,73 | 391 | 12 | 26 | -2 |
3865,50 | 865,50 | 18,18 | 380 | 23 | 23 | -2 |
3465,63 | 465,63 | 21,22 | 329 | 48 | 21 | -2 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 16 | -1 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 15 | -1 |
Tablo 14. Hareketli Ortalama LC Expert'in GBPUSD için dinamik kaydırma modundaki en iyi optimizasyon sonuçları
Dinamik kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 16. Hareketli Ortalama LC Expert'in dinamik kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6500,19 | 3500,19 | 17,45 | 244 | 42 | 28 | -2 |
6374,18 | 3374,18 | 19,91 | 243 | 54 | 24 | -2 |
6293,29 | 3293,29 | 19,30 | 235 | 48 | 27 | -2 |
5427,69 | 2427,69 | 17,65 | 245 | 90 | 8 | -2 |
5421,83 | 2421,83 | 16,30 | 301 | 59 | 12 | -2 |
Tablo 15. Hareketli Ortalama LC Expert'in USDJPY çin dinamik kaydırma modundaki en iyi optimizasyon sonuçları
5.2. "Pin Çubuğu" Formasyonu ile Yapılan Expert Alım Satım İşlemi Optimizasyon Sonuçlarının Analizi
Expert farklı modlarda çalışırken optimize etme sonuçlarını karşılaştıralım: sıfır kaydırmalı, statik kaydırmalı ve dinamik kaydırmalı (DSO ve DSC). 2014.04.01 - 2014.10.25 döneminde EURUSD, GBPUSD ve USDJPY için test yapılacaktır. Süre H1.
Expert giriş parametreleri:
Parametre | Değer |
---|---|
Yüzde olarak Maksimum Risk | 0.1 |
Azaltma faktörü | 3.0 |
Pin çubuğu minimum gölge, puan | 40 |
Pin çubuğu maksimum OC, puan | 110 |
Pin çubuğu gölgesi OC min oranı | 1.4 |
SL, puan (KAPALI için 0) | 150 |
TP, puan (KAPALI için 0) | 300 |
LC Baz Dönemi | 1 dakika |
LC modu AÇIK | doğru |
LC kaydırma | 0 |
Tablo 16. Pin Çubuğu LC Expert'in girdi parametreleri
Pin çubuğu şeklini tanımlayan parametreleri optimize edeceğiz: "burun" uzunluğu, "burun" uzunluğunun orta çubuğun gövdesine oranı ve gövdenin maksimum boyutu. Kar Alma ve Zarar Durdurma seviyeleri de optimize edilmelidir.
5.2.1. Devre Dışı Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Pin çubuğu minimum gölge, puan | 100 | 20 | 400 |
Pin çubuğu maksimum OC, puan | 20 | 20 | 100 |
Pin çubuğu gölgesi OC min oranı | 1 | 0.2 | 3 |
SL, puan (KAPALI için 0) | 150 | 50 | 500 |
TP, puan (KAPALI için 0) | 150 | 50 | 500 |
Tablo 17. Devre dışı bırakma modundaki Pin Çubuğu LC Expert'in optimize edilmiş parametreleri
Devre dışı kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 17. Pin Çubuğu LC Expert'in sıfır kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP |
---|---|---|---|---|---|---|---|---|
3504,59 | 504,59 | 9,82 | 33 | 100 | 60 | 1.8 | 450 | 500 |
3428,89 | 428,89 | 8,72 | 21 | 120 | 60 | 2.8 | 450 | 350 |
3392,37 | 392,37 | 9,94 | 30 | 100 | 60 | 2,6 | 450 | 250 |
3388,54 | 388,54 | 9,93 | 31 | 100 | 80 | 2,2 | 450 | 300 |
3311,84 | 311,84 | 6,84 | 13 | 140 | 60 | 2,2 | 300 | 450 |
Tablo 18. Pin Çubuğu LC Expert'in EURUSD için sıfır kaydırma modundaki en iyi optimizasyon sonuçları
Sıfır kaydırma modunda Expert optimizasyonunu gösteren grafik, GBPUSD:
Şek. 18. Pin Çubuğu LC Expert'in sıfır kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin Çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP |
---|---|---|---|---|---|---|---|---|
3187,13 | 187,13 | 11,10 | 13 | 160 | 60 | 2,6 | 500 | 350 |
3148,73 | 148,73 | 3,23 | 4 | 220 | 40 | 2,8 | 400 | 400 |
3142,67 | 142,67 | 11,27 | 17 | 160 | 100 | 1,8 | 500 | 350 |
3140,80 | 140,80 | 11,79 | 13 | 180 | 100 | 2 | 500 | 500 |
3094,20 | 94,20 | 1,62 | 1 | 260 | 60 | 1,6 | 500 | 400 |
Tablo 19. Pin Çubuğu LC Expert'in GBPUSD için sıfır kaydırma modundaki en iyi optimizasyon sonuçları
Devre dışı kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 19. Pin Çubuğu LC Expert'in sıfır kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP |
---|---|---|---|---|---|---|---|---|
3531,99 | 531,99 | 9,00 | 6 | 160 | 60 | 2.2 | 450 | 500 |
3355,91 | 355,91 | 18,25 | 16 | 120 | 60 | 1,6 | 450 | 400 |
3241,93 | 241,93 | 9,11 | 4 | 160 | 40 | 2,8 | 450 | 500 |
3180,43 | 180,43 | 6,05 | 33 | 100 | 80 | 1,8 | 150 | 450 |
3152,97 | 152,97 | 3,14 | 6 | 160 | 80 | 2,8 | 150 | 500 |
Tablo 20. Pin Çubuğu LC Expert'in USDJPY için sıfır kaydırma modundaki en iyi optimizasyon sonuçları
5.2.2. Statik Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Pin çubuğu minimum gölge, puan | 100 | 20 | 400 |
Pin çubuğu maksimum OC, puan | 20 | 20 | 100 |
Pin çubuğu gölgesi OC min oranı | 1 | 0.2 | 3 |
SL, puan (KAPALI için 0) | 150 | 50 | 500 |
TP, puan (KAPALI için 0) | 150 | 50 | 500 |
LC kaydırma | 1 | 1 | 59 |
Tablo 21. Pin Çubuğu LC Expert'in statik kaydırma modundaki optimize edilmiş parametreleri
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 20. Pin Çubuğu LC Expert'in statik kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
4843,54 | 1843,54 | 10,14 | 19 | 120 | 80 | 1,6 | 500 | 500 | 23 |
4714,81 | 1714,81 | 10,99 | 28 | 100 | 100 | 1,6 | 500 | 500 | 23 |
4672,12 | 1672,12 | 10,16 | 18 | 120 | 80 | 1,8 | 500 | 500 | 23 |
4610,13 | 1610,13 | 9,43 | 19 | 120 | 80 | 1,6 | 450 | 450 | 23 |
4562,21 | 1562,21 | 13,94 | 27 | 100 | 100 | 1,6 | 500 | 400 | 25 |
Tablo 22. Pin Çubuğu LC Expert'in EURUSD için statik kaydırma modundaki en iyi optimizasyon sonuçları
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, GBPUSD:
Şek. 21. Pin Çubuğu LC Expert'in statik kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
4838,10 | 1838,10 | 5,60 | 34 | 100 | 40 | 2,4 | 450 | 500 | 24 |
4797,09 | 1797,09 | 5,43 | 35 | 100 | 40 | 2,6 | 400 | 500 | 24 |
4755,57 | 1755,57 | 7,36 | 42 | 100 | 100 | 2 | 400 | 500 | 24 |
4725,41 | 1725,41 | 8,35 | 45 | 100 | 80 | 1 | 400 | 500 | 24 |
4705,61 | 1705,61 | 8,32 | 41 | 100 | 100 | 2 | 450 | 500 | 24 |
Tablo 23. Pin Çubuğu LC Expert'in GBPUSD için statik kaydırma modundaki en iyi optimizasyon sonuçları
Statik kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 22. Pin Çubuğu LC Expert'in statik kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
4108,83 | 1108,83 | 6,45 | 9 | 140 | 40 | 1,4 | 500 | 450 | 55 |
3966,74 | 966,74 | 7,88 | 12 | 140 | 60 | 2,8 | 450 | 500 | 45 |
3955,32 | 955,32 | 9,91 | 21 | 120 | 80 | 2 | 500 | 500 | 45 |
3953,80 | 953,80 | 6,13 | 10 | 140 | 60 | 2,8 | 450 | 450 | 47 |
3944,33 | 944,33 | 6,42 | 6 | 160 | 100 | 2,6 | 500 | 400 | 44 |
Tablo 24. Pin Çubuğu LC Expert'in USDJPY için statik kaydırma modundaki en iyi optimizasyon sonuçları
5.2.3. Dinamik Kaydırma Modunda Expert Optimizasyonu
Optimize edilmiş parametreler:
Parametre | Başlat | Adım | Durdur |
---|---|---|---|
Pin çubuğu minimum gölge, puan | 100 | 20 | 400 |
Pin çubuğu maksimum OC, puan | 20 | 20 | 100 |
Pin çubuğu gölgesi OC min oranı | 1 | 0.2 | 3 |
SL, puan (KAPALI için 0) | 150 | 50 | 500 |
TP, puan (KAPALI için 0) | 150 | 50 | 500 |
LC kaydırma | -2 | 1 | -1 |
Tablo 25. Pin Çubuğu LC Expert'in dinamik kaydırma modundaki optimize edilmiş parametreleri
Dinamik kaydırma modunda Expert optimizasyonunu gösteren grafik, EURUSD:
Şek. 23. Pin Çubuğu LC Expert'in dinamik kaydırma modundaki optimizasyonu, EURUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
4185,65 | 1185,65 | 13,22 | 49 | 200 | 100 | 1,8 | 450 | 500 | -2 |
4011,80 | 1011,80 | 13,75 | 49 | 200 | 100 | 2 | 400 | 500 | -2 |
3989,28 | 989,28 | 12,01 | 76 | 140 | 20 | 1,2 | 350 | 200 | -1 |
3979,50 | 979,50 | 16,45 | 157 | 100 | 20 | 1 | 450 | 500 | -1 |
3957,25 | 957,25 | 16,68 | 162 | 100 | 20 | 1 | 400 | 500 | -1 |
Tablo 26. Pin Çubuğu LC Expert'in EURUSD için statik kaydırma modundaki en iyi optimizasyon sonuçları
GBPUSD için dinamik kaydırma modundaki Expert optimizasyonunu gösteren grafik:
Şek. 24. Pin Çubuğu LC Expert'in dinamik kaydırma modundaki optimizasyonu, GBPUSD
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
4906,84 | 1906,84 | 10,10 | 179 | 120 | 40 | 1,8 | 500 | 500 | -2 |
4316,46 | 1316,46 | 10,71 | 151 | 120 | 20 | 2,4 | 450 | 500 | -1 |
4250,96 | 1250,96 | 12,40 | 174 | 120 | 40 | 1,8 | 500 | 500 | -1 |
4040,82 | 1040,82 | 12,40 | 194 | 120 | 60 | 2 | 500 | 200 | -2 |
4032,85 | 1032,85 | 11,70 | 139 | 140 | 40 | 2 | 400 | 200 | -1 |
Tablo 27. Pin Çubuğu LC Expert'in GBPUSD için dinamik kaydırma modundaki en iyi optimizasyon sonuçları
Dinamik kaydırma modunda Expert optimizasyonunu gösteren grafik, USDJPY:
Şek. 25. Pin Çubuğu LC Expert'in dinamik kaydırma modundaki optimizasyonu, USDJPY
En iyi sonuçlar:
Sonuç | Kar | Düşüş % | Yapılan işlem sayısı | Pin çubuğu minimum gölge | Pin çubuğu maksimum OC | Pin çubuğu gölgesi OC minumum oranı | SL | TP | LC kaydırma |
---|---|---|---|---|---|---|---|---|---|
5472,67 | 2472,67 | 13,01 | 138 | 100 | 20 | 2,4 | 500 | 500 | -1 |
4319,84 | 1319,84 | 15,87 | 146 | 100 | 20 | 2,2 | 400 | 500 | -1 |
4259,54 | 1259,54 | 19,71 | 137 | 100 | 20 | 2,4 | 500 | 500 | -2 |
4197,57 | 1197,57 | 15,98 | 152 | 100 | 20 | 1 | 350 | 500 | -1 |
3908,19 | 908,19 | 16,79 | 110 | 120 | 40 | 3 | 400 | 400 | -1 |
Tablo 28. Pin Çubuğu LC Expert'in USDJPY için dinamik kaydırma modundaki en iyi optimizasyon sonuçları
6. Optimizasyon Sonuçlarının Karşılaştırılması
Bir karşılaştırma tablosu yapmak için, her en iyi sonuç tablosundan maksimum kar, düşüş ve bir dizi işlem değerlerini seçelim. Statik veya dinamik kaydırma modlarında alınan değerin yanına sıfır kaydırma modunda aynı değere ilişik değişimi (yüzde olarak) veya bu değeri yazacağız.
6.1. Hareketli Ortalamaya Göre Expert Alım Satım
Kar:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 796,43 | 1385,06 (+74%) | 392,64 (-51%) |
GBPUSD | 1025,75 | 1571,07 (+53%) | 2377,58 (+132%) |
USDJPY | 2801,63 | 3051,39 (+9%) | 3500,19 (+25%) |
Tablo 29. Hareketli Ortalama LC Expert'in en iyi optimizasyon sonuçları tablosundan maksimum kar değerlerinin karşılaştırılması
Alçalma:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 17,7 | 21,52 (+22%) | 27,95 (+58%) |
GBPUSD | 18,16 | 15,46 (-15%) | 24,55 (+35%) |
USDJPY | 17,14 | 15,94 (-7%) | 19,91 (+16%) |
Tablo 30. Hareketli Ortalama LC Expert'in en iyi optimizasyon sonuçları tablosundaki maksimum alçalma değerlerinin karşılaştırılması
Yapılan işlem sayısı:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 111 | 122 (+10%) | 594 (+435%) |
GBPUSD | 137 | 107 (-22%) | 574 (+319%) |
USDJPY | 61 | 71 (+16%) | 301 (+393%) |
Tablo 31. Hareketli Ortalama LC Expert'in en iyi optimizasyon sonuçları tablosundaki maksimum işlem sayısı değerinin karşılaştırılması
Hemen göze çarpan ilk şey, dinamik kaydırma modundaki giriş noktalarında önemli bir artış olmasıdır. Aynı zamanda bununla birlikte, alçalma gözle görülür şekilde artmıştır ve EURUSD için de kar iki kat azalmıştır.
Statik kaydırma modu, bu Expert Advisor için daha karlıdır. Burada GBPUSD ve USDJPY için alçalmanın azaldığını ve EURUSD ve GBPUSD için kârda önemli bir artış olduğunu görebiliriz.
6.2. "Pin Çubuğu" Formasyonuyla Expert İşlemi
Kar:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 504,59 | 1843,54 (+265%) | 1185,65 (+135%) |
GBPUSD | 187,13 | 1838,10 (+882%) | 1906,84 (+919%) |
USDJPY | 531,99 | 1108,83 (+108%) | 2472,67 (+365%) |
Tablo 32. Pin Çubuğu LC Expert'in en iyi optimizasyon sonuçları tablosundaki maksimum kar değerlerinin karşılaştırılması
Alçalma:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 9,94 | 13,94 (+40%) | 16,68 (+68%) |
GBPUSD | 11,79 | 8,35 (-29%) | 12,4 (+5%) |
USDJPY | 18,25 | 9,91 (-46%) | 19,71 (+8%) |
Tablo 33. Pin Çubuğu LC Expert'in en iyi optimizasyon sonuçları tablosundaki maksimum alçalma değerlerinin karşılaştırılması
Yapılan işlem sayısı:
Kaydırma yok | Statik kaydırma | Dinamik kaydırma | |
---|---|---|---|
EURUSD | 33 | 28 (-15%) | 162 (+391%) |
GBPUSD | 17 | 45 (+165%) | 194 (+1041%) |
USDJPY | 33 | 21 (-36%) | 152 (+361%) |
Tablo 34. Pin Çubuğu LC Expert'in en iyi optimizasyon sonuçları tablosundaki maksimum işlem sayısı değerlerinin karşılaştırılması
Ayrıca burada dinamik kaydırma modundaki işlem sayısında önemli bir artış görüyoruz. Ancak bu durumda önemli alçalma artışı, Hareketli Ortalama LC Expert ile benzer durumdaki gibi sadece EURUSD için gerçekleşir. Diğer çiftler için alçalma önemsiz bir şekilde, yaklaşık yüzde 5-8 oranında artar.
Statik kaydırma modunda, optimizasyon GBPUSD ve USDJPY için sınırlı kar göstermiştir. Yine de aynı çiftler için önemli bir alçalma düşüşü ve bunun EURUSD için arttığını görebiliriz. Statik kaydırma modu, bu Expert Advisor için daha az karlı görünmektedir.
Sonuç
Bu makalede, "likit grafiğinin" çizim prensiplerini ele aldık ve gösterge ve gösterge olmayan stratejilere dayalı olarak çalışma modlarının Expert'in optimizasyon sonucu üzerindeki etkisini karşılaştırdık.
Dolayısıyla aşağıdaki sonuçlar:
- Gösterge stratejileri kullanan Expert için (örneğin Hareketli Ortalama ile alım satım) statik kaydırma modu daha uygundur. Alçalmada azalmaya ve kârda artışa neden olan daha kesin bir piyasa girişi sağlar.
- Dinamik kaydırma modu, formasyonlarla alım satım yapan Expert için daha iyidir. Bu mod, alçalma aynı anda artmasına rağmen giriş noktalarının sayısını artırır.
- Dinamik kaydırma modu, iyi organize edilmiş para yönetimi ile birlikte etkileyici sonuçlar verebilir.
- Statik kaydırma modunun gösterge stratejileri için çok umut verici görünse de, önemli bir dezavantajı vardır. En iyi sonucu sağlayan kaydırma değeri, girdi parametreleri listesinde doğru tahmin edilmesi gereken bir diğer değişkendir.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/1208





- Ü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