English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Bill Williams'ın "Yeni Ticaret Boyutları" kitabına dayanan Uzman Danışman

Bill Williams'ın "Yeni Ticaret Boyutları" kitabına dayanan Uzman Danışman

MetaTrader 5Ticaret sistemleri | 9 Aralık 2021, 11:14
220 0
Alexey Klenov
Alexey Klenov


Giriş

Bu makalede B. Williams’ın New Trading Dimensions: How to Profit from Chaos in Stocks, Bonds and Commodities (Yeni Ticaret Boyutları: Hisse Senetleri, Tahviller ve Emtialardaki Kaostan Nasıl Kar Edilir) kitabına dayanarak MQL5 dilinde MetaTrader 5 platformunda bir alım satım Uzman Danışmanının geliştirilmesini ele alacağım. Stratejinin kendisi iyi bilinmektedir ve kullanımı yatırımcılar arasında hala tartışmalıdır. 

Örneğin Elliott dalga teorisinin yorumlanmasının aksine, öznel bir taraftan "neredeyse tamamen" yoksun sinyaller üzerine hazır çalışmasıyla yeni katılanları cezbeder. Ancak bu sadece ilk bakışta böyledir, bazı yerlerde kararların yatırımcı tarafından alınması gerekecektir. Bu konu bu makalede daha ayrıntılı tartışılacaktır.

Bu makalenin amaçları şunlardır:
  • Alım satımı B. Williams stratejisine dayanarak uygulayan bir EA sınıfı olan OOP paradigmasını (Nesne yönelimli programlama) kullanarak geliştirmek. Buna C_TS_BWdiyeceğiz;
  • C_TS_BW sınıfında mümkün olduğunda, Standart Kitaplıktaki hazır kodlar kullanmak.
  • C_TS_BW sınıfını kullanan bir EA yazmak;
  • Geliştirilen EA'yı Strateji Test Cihazında çeşitli Forex ve CFD enstrümanlarında test etmek;
  • Son olarak, mevcut piyasa koşullarında bu stratejinin kapasitesini onaylamak veya çürütmek.


1. Göstergeler

Alım satım sisteminin temelinde 4 göstergeden sinyaller vardır:

  1. Timsah;
  2. Fraktallar;
  3. Harika Osilatör;
  4. Hızlanma/Yavaşlama.

1.1. Timsah

Timsah teknik göstergesi, fraktal geometri ve doğrusal olmayan dinamikleri kullanan Denge Çizgilerinin (Hareketli Ortalamalar) kombinasyonudur.

  • Mavi çizgi (Timsahın Çenesi) - bir grafik oluşturmak için kullanılan zaman diliminin Denge Çizgisidir (13 dönemlik düzleştirilmiş hareketli ortalama, 8 çubukla geleceğe kaydırılır);
  • Kırmızı çizgi (Timsah Dişleri) - önemli bir süre için Denge Çizgisidir, bir emir daha düşüktür (8 dönem düzleştirilmiş hareketli ortalama, geleceğe 5 çubuk kaydırılır);
  • Yeşil çizgi (Timsah Dudakları) - önemli bir süre için Denge Çizgisidir, bir emir daha da düşüktür (5 dönem düzleştirilmiş hareketli ortalama, geleceğe 3 çubuk kaydırılır).

Timsahın Dudaklar, Dişler ve Çene çizgileri farklı zaman dönemlerinin etkileşimini göstermektedir. Piyasa trendleri sadece yüzde 15-30 oranında belirlenebildiğinden trendleri takip etmeli, sadece belirli fiyat dönemlerinde dalgalanan piyasalarda çalışmamalıyız.

Çeneler, Dişler ve Dudaklar kapalı veya iç içe geçtiğinde, Timsah uyuyacak veya zaten uyuyor. Uyuduğunda, açlığı büyür - böylece ne kadar çok uyursa uyandığında o kadar aç olur. Uyandığında ilk yaptığı şey ağzını açıp esnemeye başlamasıdır. Sonra yiyecek kokusunu duymaya başlar: bir boğa veya ayının eti ve onu avlamaya başlar. Timsah açlığını giderdiğinde gıda-fiyat öğesine olan ilgisini kaybetmeye başlar (Denge Çizgileri birleşir) - bu, kârı sabitlemenin zamanıdır.

1.2. Fraktallar

Tüm piyasalar, çoğu zaman fiyatların çok fazla dalgalanmaması ve sadece kısa bir süre için (yüzde 15-30) trend değişikliklerinin görülebilmesi özelliğindedir. Kâr elde etmek için en uygun dönemler, piyasa fiyatlarının belirli bir trende göre değiştiği dönemlerdir.

Fraktallar (Fraktallar) - Bill Williams'ın alım satım sisteminin, alt veya üst kısmı algılamaya izin veren 4 göstergesinden biridir. Yukarı doğru fraktalın teknik tanımı, en yüksek maksimumdan önce ve sonra daha düşük maksimumlara sahip iki çubuğun bulunduğu en az beş ardışık çubuk serisidir. Karşıt yapılandırma (en düşük minimumdan önce ve sonra daha yüksek minimumlara sahip iki çubuğun bulunduğu beş çubuk serisi) aşağı doğru bir fraktaldır. Grafikte fraktallar Yüksek ve Düşük değerlerine sahiptir ve yukarı veya aşağı oklarla gösterilir.

Fraktalların teknik göstergesinin sinyalleri, Timsah teknik göstergesi kullanılarak filtre edilmelidir. Başka bir deyişle, Timsahın dişlerinin altında bir fraktal bulunursa satın almak için bir sözleşme yapmamalıyız ve Timsah Dişlerinin üzerinde bir fraktal bulunursa satmak için bir sözleşme yapmamalıyız. Fraktal sinyali oluştuktan ve Timsah çenelerinin ötesindeki pozisyonuna göre belirlenen pozisyonda kaldıktan sonra, ulaşılana kadar veya daha yeni bir fraktal sinyalinin ortaya çıkmasına kadar bir sinyal olarak kalır.

1.3. AO (Harika Osilatör)

Bill Williams'ın Harika Osilatör teknik göstergesi Harika Osilatör, AO) çubukların ortalama noktaları (H + L)/2 tarafından oluşturulan ve çubukların merkezi noktaları (H + L)/2 tarafından oluşturulan 5 dönemlik basit hareketli ortalamadan çıkarılan 34 dönemlik basit bir hareketli ortalamadır. Piyasanın itici gücüyle şu anda neler olduğunu bilmemizi sağlar.

1.4. AO (Hızlandırıcı Osilatör)

Fiyat, değişen son öğedir. Fiyat değişmeden önce piyasanın itici gücü değişir ve itici güç yönünü değiştirmeden önce itici gücün hızlanması yavaşlamalı ve sıfıra ulaşmalıdır. Daha sonra fiyat yön değiştirmeye başlayana kadar hızlanmaya başlar.

Hızlanma/Yavaşlama teknik göstergesi (Hızlandırıcı/Yavaşlatıcı Osilatör, AC) mevcut itici kuvvetin hızlanmasını ve yavaşlamasını ölçer. Bu gösterge, itici gücün değişimi gerçekleşmeden önce yön değiştirecek ve buna karşılık fiyat değişikliği gerçekleşmeden önce yönünü değiştirecektir. AC'nin daha önceki bir uyarı sinyali olduğunu anlamanın bariz avantajları vardır.


2. Sinyaller

B. Williams'ın "New Trading Dimensions” (Yeni Ticaret Boyutları) kitabında açıklanan alım satım sistemi, beş alım satım boyutundan sinyaller kullanır.

  • İlk boyut: Timsahın çenesinin ötesindeki fraktalın üstesinden gelmek;
  • İkinci boyut: AO göstergesinden gelen sinyaller (Harika Osilatör);
  • Üçüncü boyut: AC göstergesinden gelen sinyaller (Hızlandırıcı Osilatör);
  • Dördüncü boyut: bölgelerde alım satım;
  • Beşinci boyut: denge çizgisi alım satımı.

Her boyuttan gelen sinyaller hakkında daha fazla bilgi.


2.1. İlk boyutun sinyalleri ile alım satımın tanımı

"A" fraktalı (satın alma sinyali) yanlıştır çünkü fiyat kırılması Timsahın Çene çizgisinin altında gerçekleşir. "B" fraktalı yürütülür ve açık bir kısa pozisyonumuz vardır. "C" fraktalı görünümü ile kısa pozisyonumuzu kapatırız ve zaten net uzun bir pozisyona sahibiz.

"D" fraktalının kırılmasıyla, pozisyonu tekrar almaktan satmaya değiştiriyoruz.  Satın almak için "E" fraktalının üstesinden gelen piyasa, bir kez daha pozisyonun satmaktan almaya değişmesi gerektiğini söylüyor. "G" ve "J" fraktallarından gelen sinyallerin yürütülmesiyle, uzun pozisyona bir sözleşme daha ekliyoruz.

Şekil 1. İlk boyutun sinyallerinde alım satım örneği

Şekil 1. İlk boyutun sinyallerinde alım satım örneği

2.2. İkinci boyutun sinyalleri ile alım satımın tanımı

İkinci boyutun iki tür sinyali uygulandı. Bu AO (Harika Osilatör) göstergesi sıfır çizgi kesişmesi ve "Çay Tabağı" sinyalidir. Çubukların indislemesini MetaTrader 5'te yaptığımız gibi yani zaman serisi olarak kabul edelim. Sinyalin kontrolü sıfırın altındaki çubukta yapılacaktır.

"Sıfır çizgi kesişmesi" deseninin oluşumu için göstergenin iki çubuğu olmalıdır.

Satın alma sinyali, göstergenin ikinci çubuğu sıfır çizgisinin altında olduğunda ve ilk çubuk sıfır çizgisinin üzerinde olduğunda oluşur. İlk çubuğun maksimum fiyatı sinyal olacaktır ve bunu aşarsa, alım emri geçerli fiyat kullanılarak sunucuya gönderilir. Satış sinyali ters durum kesişmesi olarak oluşturulur.

Bir "Çay Tabağı" deseninin oluşumu için ardışık üç çubuk olmalıdır ve ikincisi kırmızı renk ve sıfır çizgisinin üzerinde, ilkinin yeşil ve ikincisinden daha yüksek olması gereklidir.  Sinyal fiyatı il çubuğun en yüksek fiyatı olacaktır ve bu ilk çubuk, mevcut fiyat tarafından aşılana veya yeni bir alım sinyali oluşana kadar geçerli olacaktır.  "Çay tabağı" deseninin satış sinyalleri benzer şekilde ancak göstergenin karşı tarafında oluşturulur.

Bir "Çay Tabağı" deseninin oluşumu için ardışık üç çubuk olmalıdır ve ikincisi kırmızı bir renk ve sıfır çizgisinin üzerinde olmalıdır, birincisi yeşil ve ikincisinden daha yüksek olmalıdır. Sinyal fiyatı, mevcut fiyat tarafından aşılana veya yeni bir alış sinyali oluşana kadar geçerli olacak ilk çubuğun en yüksek fiyatı olacaktır. "Çay tabağı" deseninin satış sinyalleri benzer şekilde ancak göstergenin karşı tarafında oluşturulur.

"İkiz Tepeler" ve "İkiz dipler" sinyalleri bu makalede dikkate alınmaz ve oluşumlarının, hemen hemen her zaman Timsahın karşı tarafında meydana gelmesi nedeniyle EA'da programlanmayacaktır: ikiz dipler çene çizgisinin altındadır ve ikiz tepeler bu çizginin üzerindedir. Bu tür sinyallerle alım satım yapmak sistemle çelişir çünkü Timsahı beslememek için çenelerin altından satın alamıyoruz ve Timsahın çenelerinin üzerinde satış yapamıyoruz.

Sinyallerin daha ayrıntılı bir açıklaması için orijinal kaynağı görmenizi teşvik ettim.

Şekil 2. İkinci boyutun alım satım sinyallerinin bir örneği

Şekil 2. İkinci boyutun alım satım sinyallerinin bir örneği


2.3. Üçüncü boyutun alım satım sinyallerinin açıklaması

Üçüncü boyutta, AC göstergesi (Hızlandırıcı Osilatör) tarafından oluşturulan "sıfır çizgisinin üzerinde satın al" ve "sıfır çizgisinin altında satın al" sinyalleri vardır.

İlk önce Şekil 3'te belirtilen desene bakıyoruz. Sıfır çubuğu için kontrol yapılır. İlk çubuk, bir histogramın iki yeşil ve bir kırmızı çubuğundan oluşan sıfır çizgisinin ("A" durumu) üzerindeyse yapılır. Bu arada, sıfır çizgisine göre ikinci ve üçüncü çubukların pozisyonu önemli değildir.

İlk çubuk, sıfır çizgisinin ("B" durumu) altındaysa alış sinyalinin oluşumu için üç yeşil ve bir kırmızı çubuğa ihtiyacımız olacaktır. Ayrıca, sıfır çizgisine göre kalan çubukları dikkate almaz. Üçüncü boyutun satış sinyalleri ters şekilde benzerdir.

Daha ayrıntılı bir açıklama ve örnekler için orijinal kaynağa bakın.

Şekil 3. Üçüncü boyut sinyallerinin alım satım örneği

Şekil 3. Üçüncü boyut sinyallerinin alım satım örneği


2.4. Dördüncü boyutun alım satım sinyallerinin açıklaması ("Bölge Alım Satımı")

Yeşil bölge, iki gösterge (AO +AC) bir çubuk için yeşil olduğunda oluşur.

Bir alım satım sinyalinin oluşturulması iki ardışık yeşil bölge gerektirir ve ilk çubuğun kapanış fiyatı ikinci çubuğun kapanış fiyatından daha yüksek olmalıdır.

Yürütme, yeni bir çubuk açıldıktan sonra uygulanır. Orijinalde, yürütme bir çubuğun kapatılmasında olmalıdır. Çubuk kapanışının son tikinin AO veya AC çubuklarının rengini değiştirebileceği durumlar vardır ve bu gerçekleşirse yeşil bölgenin sinyaline göre satın almanın yanlış olduğu ortaya çıkar. Bu nedenlerden dolayı alış için yeni bir çubuk açtım.

Ayrıca dördüncü boyutta, uzun pozisyon için bir durdurma emrini takip etme sinyali vardır.

Bu, ardışık beş yeşil bölge gerektirir. İlk bölgenin fiyatının minimum değeri Zararı Durdur emrini ayarlamak için kullanılır. Durdurma emri bir sonraki çubukta tetiklenmezse (kapatıldıktan sonra), önceki çubukta bölge rengini dikkate almadan, yenisinin açılmasıyla birlikte Zararı Durdur emrini son tamamlanan çubuğun minimum fiyatına (durdurma emrinden daha yüksek olmalıdır) ayarlıyoruz.

Ayrıca, ardışık yeşil bölge sayısına göre açılan uzun pozisyona ek olarak bir sınırlama kullanırız: B. Williams 6 veya 8 bölge önerir. Bundan sonra, yeşil bölgeden satın alma pozisyonunu doldurmaya izin verecek bir gri (bu, AO ve AC için sütunların renkleri farklı olduğundadır) veya kırmızı bölgelerin görünmesini beklemeliyiz.

Satış sinyali bir "kırmızı bölge" oluşturur - yeşil bölgenin bir ayna görüntüsüdür. Bölgenin rengi, "Denge Çizgisi Alım Satımı"ndan (beşinci boyut) gelen sinyali oluşturan çubukların sayısını da etkiler. Bu çizgi için B. Williams, Timsahın "dişlerini" seçti.

Bu sinyalde, sıfırıncı çubuğun OHLC fiyatlarının, sinyalin oluşumuna katıldığını vurgulamak istiyorum.

Şekil 4. Dördüncü boyut sinyallerinin alım satım örneği

Şekil 4. Dördüncü boyut sinyallerinin alım satım örneği


2.5. Beşinci boyut alım satım sinyallerinin açıklaması

"Denge çizgisinin üstünden satın al" deseni (bölge yeşilse) iki çubukla oluşturulur. Bir sıfır çubuğunun açılış fiyatı (aynı zamanda şu anda çubuğun en yüksek fiyatı) çubuğun son en yüksek fiyatından daha düşükse (birkaç çubuk geride bulunabilir), o zaman bulunan maksimum fiyat, yeşil bölgede bir satın alma pozisyonu açma fiyatı olacaktır.

Kırmızı veya gri bölgeler, yeşil bölgeye girme fiyatından daha yüksek olan başka bir maksimum gerektirir. Bulur bulmaz (genellikle Timsahın dişlerinin arkasında ve üstünde 10 çubuktan daha az mesafededir [yazarın metninde böyle bir desen için kaç çubuk geriye bakılması gerektiğini bulamadım]) bunu satın alma yönünde kırmızı veya gri bölgeye girme fiyatı olarak hatırlayın.

"Denge çizgisinin üzerinde satın al" sinyaliyle pozisyon açmak için her yeni çubuktaki (yeşil/kırmızı/gri bölgeler için) fiyatı aşan geçerli fiyatı kontrol ediyoruz.

Şekil 5. Beşinci boyut sinyallerinin alım satım örneği

Şekil 5. Beşinci boyut sinyallerinin alım satım örneği


3. C_TS_BW sınıfı

3.1. Sınıfın amacı:
  • Mümkünse Standart Kitaplık sınıflarını kullanmak;
  • Yapılarda büyük miktarlarda "benzer verileri" saklamak;
  • Ayarları özelleştirmek;
  • Analiz için göstergelerden gerekli sayıda hesaplanan veri elde etmek;
  • Yeni bir çubuk olduğunda, beş alım satım boyutundan gelen sinyalleri kontrol etmek;
  • Yeni bir tik olduğunda, bir pozisyon açma sinyalini kontrol etmek;
  • Sabit veya "piramitleme" olsun lotu hesaplamak (bu algoritmayı bu sınıfın CalcLot yönteminde öğreneceksiniz);
  • Her sinyal türü için doğrudan EA'nın lotunu değiştirmesine izin vermek. Para yönetimi algoritmalarının özel ihtiyacını uygulamak;
  • Açılan pozisyonun durdurma emrini takip etmek. Gerekirse kullanıcı tarafından EA'dan hesaplanan Zararı Durdur fiyatını değiştirmek;
  • Alım satım sunucusuna emri göndermek ve hata varsa ikinci bir istekte bulunmak;
  • Alım satım sinyallerinin çoğaltılmasını yasaklamak (her bir sinyale yalnızca bir kez girmek);
  • Genel sınıf yöntemlerinin sayısını en aza indirmek;
3.2. C_TS_BW sınıfının uygulanması
  • ... Mümkünse, Standart kitaplıktaki sınıfları ve yöntemleri kullanmak;

Bu görevi gerçekleştirmek için önce Standart Kitaplıkiçinden uygun dosyaları eklemeniz gerekir.

Bu, aşağıdaki kod tarafından uygulanır.

#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh

Sınıfın özel bölümünde, alım satım isteklerinin organizasyonu için nesneleri bildirin, sembol ve açılan pozisyon hakkındaki bilgileri elde etmenin yanı sıra emirlerin geçmişine erişin.

CTrade            exp_trade;    // trading methods from the Standard Library
CSymbolInfo       s_info;       // methods of accessing the information on symbol
CPositionInfo     pos_info;     // methods of obtaining the information on position
CHistoryOrderInfo h_info;       // methods of accessing the history of orders
  • ... Yapılarda büyük miktarlarda "benzer veriler" saklanır.

Bu sınıfta dört yapı kullanılır, bunlardan ikisi özel bölümde bildirilir. Yapılar şunlardır:

struct l_signals            // structure of signals and time of the bar, on which they appeared
struct l_trade              // structure of the time of the last triggered signals

Ayrıca genel bölümde iki yapı vardır:

struct  s_input_parametrs   // structure of the tuning parameters
struct  s_actual_action     // structure of the appropriate trading order

Bu tür yapıların nesneleri:

l_signals         last_signals;     // signals
l_trade           last_trade;       // processed signals
s_input_parametrs inp_param;        // internal structure of the accepted settings
s_input_parametrs inp_param_tmp;    // receiving structure of the settings (received through a link with the initialization of the class)
s_actual_action   actual_action;    // orders on the serve

Yapıların kodu hakkında daha fazla ayrıntı ekli başlık dosyasında bulunabilir.

  • ... ayarları özelleştirmek;

Bu görev, genel bölümden Init yöntemi kullanılarak uygulanır. EA'dan gelen çağrılar için parametreler:

string Symbol_for_trade             // symbol, on which the class will trade
ENUM_TIMEFRAMES Period_for_trade     // the period of the chart symbol, on which the search for signals and its processing will occur
s_input_parametrs &inp_param_tmp   // receiving structure of the class settings

Bu yöntemde ayrıca ilgili göstergelerin başlatılması ve onlardan veri almak için gerekli tamponların düzenlenmesi de gerçekleşir.

  • ... analiz için göstergelerden gerekli sayıda hesaplanan veri elde etmek;

Bu, özel bölümden CopyIndValue yöntemi kullanılarak yapılabilir, parametreler

int type       // what we request  (0- Alligator, 2 - АО, 3 - АС  )
int countValue // amount of data

Parametre türüne bağlı olarak, alıcı tamponlar sınıfın başlatılmasında bir zaman serisi olarak düzenlenen, hesaplanan veriler için otomatik olarak değiştirilir.

  • ... yeni bir çubuğun açılışı sırasında ...

Yeni bir çubuk açıldıktan sonra sinyal araması yalnızca bir kez gerçekleştirilecektir. Bunu yapmak için o anı belirlememiz gereklidir. NewBar yöntemi bunu yapar, giriş parametreleri yoktur ve alınan bir tik, yeni bir çubuk açtığında true döndürür, aksi takdirde false döndürür.

  • ... beş alım satım boyutundan gelen sinyalleri kontrol etmek;

Her bir alım satım boyutu için ayrı bir yöntemi başlattım. İlk boyutun sinyalleri FindSignal_1_dimensiontarafından kontrol edilir.

Parametrelerin çağrılması:

int type               // direction of the fractal for the search (0- to buy, 1 to sell)
double &price_out[]   // this array, after a successful search, will contain the fractal price 
datetime &time_out[]  // in this array, after a successful search, will contain the time of the bar on which the fractal is found

İkinci boyutun analizi FindSignal_2_dimensionyöntemi ile yapılacaktır. Parametrelerin çağrılması:

int type               // direction of the search (0-in the direction of to buy, 1-in the direction to sell)
int sub_type         // subtype of the search (0- signal of transferring the zero line, 1- sign "saucer")
double &price_out[]   // this array, after a successful search, will contain the signal price 
datetime &time_out[]  // this array, after a successful search, will contain the time of the bar signal

Üçüncü boyutun analizi, giriş/çıkış parametreleriyle FindSignal_3_dimension yöntemi kullanılarak yapılır:

int type              // direction of the search (0-in the direction of to buy, 1-in the direction of to sell)
int sub_type           // subtype of the search (0-  signal on two identical bars, 1- signal for "three identical bars)
double &price_out[]    // this array, after a successful search, will contain the signal price
datetime &time_out[]   // this array, after a successful search, will contain the time of the bar signal

Dördüncü boyutun işlenmesi, giriş/çıkışparametreleriyle FindSignal_4_dimension yöntemiyle yapılır:

int type               // direction of the search (0-in the direction to buy, 1-in the direction to sell)
int sub_type          // what we are looking for (0- signal from the zones, 1- tailing stop for five consecutive zones of one color)
double &price_out[]   // this array, after a successful search, will contain the signal price
datetime &time_out[]  // this array, after a successful search, will contain the time of the signal bar

Beşinci boyut FindSignal_5_dimension tarafından izlenir. Bu yöntemin parametreleri:

int type               // direction of the search (0-in the direction to buy, 1-in the direction to sell)
int sub_type          // subtype of the search (0-  signal for two bars, 1- signal for three bars)
double &price_out[]   // this array, after a successful search, will contain the signal price
datetime &time_out[]  // this array, after a successful search, will contain the time of the bar signal

Tüm kontrol CheckSignal yöntemiyle birleştirilir, giriş parametreleri yoktur ve şunları içerir:

  • Göstergelerden verilerin kopyalanması;
  • Timsahın bir çizgisi için bir pozisyonun (kullanılıyorsa) kapatılmasına yönelik kontrol;
  • Önceki çubuğun sinyallerini sıfırlama;
  • Her iki yönde de aktif fraktallar arama;
  • Bir pozisyonun kullanılabilirliğine bağlı olarak, sinyalleri ikinciden beşinci boyuta kadar açık bir pozisyon yönünde arayın.

Bu yöntem genel bölümde bildirilir, EA'dan çağrılması gerekir.

  • ... yeni bir tikin gelişi ile pozisyon açılışı için sinyal tetikleme olasılığını kontrol edin;

Bu sınıfta, geçerli fiyata göre bir pozisyon girme olasılıklarını aramayı yürüten CheckForTradeSignal yöntemi uygulanır.

Parametrelerin çağrılması:

int dimension        // number of the dimension (from the first to the fifth)
int type            // direction of the trade (0- buy, 1- sell)
int sub_type         // signal subtype from the trading dimension (described in the signal search)
double &price_out[]  // signal price
datetime &time_out[] // time of the signal bar

Bir sinyalin etkinleştirilmesi için tüm düzenlemelere uyulursa o zaman true, aksi takdirde - false döndürürüz.

Tüm sinyalleri işleme yeteneklerinin kontrolü, genel bölümünde duyurulan, EA’dan çağrılması gereken CheckActionOnTick yöntemiyle birleştirilir. Çağrı için parametre yoktur. Her başarılı sinyal actual_action nesnesinde saklanır, daha sonra TradeActualSignals yönteminde işlenecektir.

  • ... lotu hesaplayın; sabit veya "piramitleme" kullanılarak

CalcLot yöntemi genel bölümde bildirilir ve EA'dan çağrılabilir. Lotun hesaplanması ve sınıfın özel bölümünde bildirilen Lot değişkeninin daha fazla değiştirilmesi için tasarlanmıştır. Parametrelerin çağrılması:

bool external // for the installation of the external calculated lot, you need to direct to this variable true, 
              // then the lot will be set by the value ext_lot. 
              // Inside this class (calculate the lot), the method is called with the parameter false.
double ext_lot // external size of the lot
int type // type of lot calculation 
         //(0- starting lot (use the value that was transferred during the initialization of the class, 
         //-1 turn over lot (the sum of the lot of the current position and the starting lot), 
         // the values from 5 to 2 are used if the aggressive trading mode is turned on (meaning "pyramiding").
         // In this mode: 5 – starting,  multiply by 5, 
         // 4 – starting,  multiply by 4,
         // 3 – starting,  multiply by 3, 
         // 2 – starting,  multiply by 2,
         // 1 - the filling lot is equal to the starting lot

Şimdi sabit lotu ele aldığımızda göre, "piramitleme" lotu hakkında biraz daha fazla konuşalım.

Başlangıç lotunun 0,1'e eşit olmasını sağlayalım. Örneğin, Timsahın çenelerinin dışında fraktaldan gelen sinyal için başlangıç lotundan açın, toplam pozisyon 0,1 lot olacaktır. Daha sonra gelen sinyalleri ikinci boyuttan beşinciye kadar analiz etmeye başlarız. Sinyal tetiklenir tetiklenmez, açık pozisyona 0,5 lot (başlangıç, 5 ile çarpılır) doldurun ve pozisyonun toplam hacmini 0,6 lot olarak elde edin. Açık pozisyon yönünde bir sonraki sinyal sırasında 0,4 lot doldurun ve toplam pozisyon 1,0 lota eşit olacaktır.

Pozisyon yönünde bir sonraki sinyal bize ek 0,3 lot verecek ve hacmi 1,3 lot olacak. Beşinci doldurma 0,2 lot için yapılacak ve pozisyonun toplam hacmi 1,5 lot olacak. Pozisyon yönünde sonraki doldurmalar sadece 0,1 lot olacaktır.

Bu para yönetimi algoritması (ММ), B. Williams tarafından Trading Chaos (Ticareti Kaosu) içinde açıklanmıştı. Bir kullanıcı lotunun kurulum olasılığı, herhangi bir sermaye yönetimini pratik olarak uygulamamızı sağlar.

Bir sözleşmedeki emir sırasının doğru bir şekilde belirlenmesi için çeşitli Sihirli sayıları kullanıyorum.

Sayı

Emrin açıklaması

999

Devir emri

1000

Başlangıç emri

1001

Dolum emri (başlangıç X 1)

1002

Dolum emri (başlangıç X 2)

1003

Dolum emri (başlangıç X 3)

1004

Dolum emri (başlangıç X 4)

1005

Dolum emri (başlangıç X 5)


Sınıf, daha sonra yeni bir emri göndermeden önce sunucudaki alım satım işlemini tanımlayacak olan gerekli sayıyı (CalcMagic yöntemini kullanarak) hesapladı.

  • ... Her sinyal türü için doğrudan EA'dan lotun değiştirilmesine izin verin.

İsterseniz EA'da, alım satım sinyallerinin bool değişkenleri biçiminde saklandığı actual_action yapısının bir sorgusunu uygulayabilirsiniz. Her tür ve yöne bir değişken karşılık gelir. True değerimiz varsa sınıf, bu tik için belirtilen alım satım sinyaline göre bir alım satım işlemi üretmeye çalışacaktır, bundan sonra bu sinyalin lotu değiştirilebilir. Fiyat değişikliğinin her tiki için sınıf, açık pozisyon veya dolum için yalnızca bir emir gönderir.

Bir lotun ayarı, CheckActionOnTick yönteminin çağrısından sonra ve TradeActualSignals çağrısından önce EA'da mümkündür. Mevcut tik üzerinde, yürütülmeyi bekleyen bir dizi sinyal olabileceğinden, yalnızca bir tane seçilecektir.

Sinyal yürütme sırası:

  • Pozisyonun kapatılması;
  • Fraktaldan gelen sinyallerden birinin yürütülmesi (pozisyonun açılması, doldurulması, devri);
  • "Çay tabağı" sinyali;
  • "Sıfır çizgisi kesişme" sinyali;
  • AC "iki eşit renkli çubuk";
  • AC "üç eşit renkli çubuk";
  • Bölgelerde alım satım;
  • Denge çizgisi (2 çubuk sinyali);
  • Denge çizgisi (3 çubuk sinyali);

Bu nedenle, "kullanıcı" lot boyutunun yüklenmesi sırasında bu sırayı göz önünde bulundurmak gerekir.

  • ... Açılan pozisyonun takip eden durdurması. Gerekirse kullanıcı tarafından EA'dan hesaplanan Zararı Durdur fiyatını değiştirin.

Açıklanan sınıfta, Takip Eden Durdurma yöntemi ile stop fiyatının pozisyonda sürdürülmesi söz konusudur, bu da sadece bu fiyatta tetikleme pozisyonundaki kârı artırma yönünde Zararı Durdur öğesinin yukarı çekilmesi anlamına gelir. Beş sürdürme modeli vardır:

  • Timsahın Dudaklarının çizgisine göre;
  • Timsahın Dişlerinin çizgisine göre;
  • Timsahın Çenelerinin çizgisine göre;
  • Aynı renkteki beş ardışık bölgeye göre (alış için yeşil, satış için kırmızı bölgeler);
  • Durdurma fiyatının dış ayarı.

Bir Zararı Durdur yüklemesinin beşinci seçeneği SetStopLoss yöntemi tarafından double & stoploss tek parametresi ile uygulanır. Çağrı EA'dan ve pozisyonun değiştirilmesi için fiyatları kontrol eden ve isteği sunucuya gönderen TrailingStop yürütme yönteminden önce yapılmalıdır. Bu prosedürün başarılı bir şekilde yürütülmesinden sonra, StopLoss iç değişkeninin değeri -1 olarak sıfırlanır.

  • ...Açılış sözleşmesinin emrinin sunucuya gönderilmesini denetleyin ve başarısız olursa ikinci bir istekte bulunun.

Bir pozisyonu açmak, kapatmak veya devretmek için bir alım satım emri gönderirken boolSendOrder yöntemi kullanılır. Çağırma parametreleri:

ENUM_ORDER_TYPE type   // direction of the trading operation
double &price_out[]   // pointer to the signal price, after a successful execution of the operation, set in -1;
datetime &time_out[]  // the pointer to the signal time, after a successful execution of the operation, set in -1;
string comment         // the commentary for the order

Tüm alım satım sinyallerinin test edilmesi, TradeActualSignals yöntemi ile birleştirilir. Yapı actual_action alım satım emirlerini saklar. Sunucuya emri başarıyla gönderdikten sonra (SendOrder true döndürür), actual_action yapısında alım satım sinyalini sıfırlayın. Gönderimde olumlu bir yanıt alana kadar alım satım sinyali aktif olacaktır.

actual_action init yapısında parametreler olmayan ve mevcut sinyallerin tümünü sıfırlayan bir fonksiyon da vardır. Bu prosedür, yeni bir pozisyon açarken veya mevcut pozisyonda bir devir olduğunda kullanılır.

  • ...Alım satım sinyallerinin çoğaltılmasını yasaklayın (her sinyal için yalnızca bir kez girin);

last_trade yapısı, her tür ve yön için son alım satım sinyalinin zamanını saklar. actual_action yapısına bir alım satım emri ayarlamadan önce, bu sinyalin last_trade yapısında zaten alım satım yapıp yapmadığını kontrol edin ve eğer öyleyse yok sayın. Böylece, bu bir alım satım durumunun "tek kullanımlık" yürütülmesinin kontrolünün uygulanmasını sağlar.

  • Genel sınıf yöntemlerinin sayısını en aza indirin.

EA'dan çağrılarak kullanılabilen sınıf yöntemlerinin bir listesi aşağıdadır:

void C_TS_BW();                                      // Constructor
bool Init(string Symbol_for_trade,
           ENUM_TIMEFRAMES Period_for_trade,
          s_input_parametrs  &inp_param_tmp);       // Initialization of the class
bool NewBar();                                           // Check for a new bar on the current symbol\time-frame
void CheckSignal();                                 // Search for signals
void CheckActionOnTick();                              // Collecting the desired actions on the current tick
void TrailingStop();                                // Trailing Stop
void TradeActualSignals();                             // Trading by the current signals
void SetStopLoss(double  &stoploss);                  // Set Stop Loss
void CalcLot(bool external,double ext_lot,int type); // Calculation of the lot

Ayrıca yapılar da mevcuttur:

actual_action    // Current trading orders for execution
inp_param_tmp;   // Reception of the structure of settings
                   // (receives the data by the link during the initialization of the class)


4. C_TS_BW sınıfını kullanarak EA'nın uygulanması

Yapılması gereken ilk şey, h_TS_BW.mqh dosyasını Uzman Danışmana dahil etmektir.

#include <h_TS_BW.mqh>

Bundan sonra, C_TS_BW sınıfının nesnesini bildirin. Bu, EA_TS_BW olsun.

Ayrıca, s_input_parametrs gibi ayarlanabilir parametrelerin yapısına da ihtiyacınız olacaktır, örneğin input_parametrs.

Bu yapıya dahil edilen parametrelerin bir açıklaması şu şekildedir:

input_parametrs.alligator_jaw_period        // The Alligator: period of the Jaws line
input_parametrs.alligator_jaw_shift         // The Alligatpr: shift of the Jaws line
input_parametrs.alligator_teeth_period      // Alligator: period of the Teeth line
input_parametrs.alligator_teeth_shift       // Alligator: shift of the Teeth line
input_parametrs.alligator_lips_period       // Alligator: period of the Lips line
input_parametrs.alligator_lips_shift        // Alligator: shift of the Lips line
input_parametrs.add_1_dimension              // Allow the addition by Fractals
input_parametrs.add_2_dimension_bludce     // Allow the addition by the "Saucer" (АО) signal
input_parametrs.add_2_dimension_cross_zero // Allow the addition by the "Crossing the zero line" (АО) signal 
input_parametrs.add_3_dimension_use_2_bars // Allow the addition by the "АС 2 bars" signal 
input_parametrs.add_3_dimension_use_3_bars // Allow the addition by the "АС 3 bars" signal
input_parametrs.add_4_dimension_zone       // Allow the addition by the red or the green zone
input_parametrs.add_5_dimension             // Allow the addition by the Balance Line
input_parametrs.max_4_dimension_zone       // The maximum amount of consecutive bars of zones of the same color 
input_parametrs.trall_4_dimension           // Allow a trail position using 5 consecutive bars of zones of the same color
input_parametrs.agress_trade_mm            // Aggressive style of filling in an open position
input_parametrs.support_position           // Type of trailing stop of the position
input_parametrs.lot                           // Trading lot

EA'nın OnInit() bölümünde şunları yapmanız gerekir:

  • input_parametrs yapısının gerekli tüm değerlerini daha sonra sınıfa geçirilecek verilerle doldurun.
  • Sınıfın Init yöntemini kullanarak başlatılmasını sağlayın. Örnek:
expert_TS_BW.Init(Symbol(),PERIOD_CURRENT,input_parametrs)

Bu durumda, EA yüklendiği geçerli sembol/nokta üzerinde çalışır.

Uzman Danışmanın OnTick() bölümünün örneği:

//   double Sl[1];  
   if(expert_TS_BW.NewBar()) // new bar on the chart
     {
      expert_TS_BW.CheckSignal();       // signal search
     }
   expert_TS_BW.CheckActionOnTick();    // check for the required actions on the current tick
//---******************* the place of the beginning of external control of the lot, the stop 
//--- example of setting the lot for trade by the signal from the zones

//   if(expert_TS_BW.actual_action.zone_buy || expert_TS_BW.actual_action.zone_sell)
//     {expert_TS_BW.CalcLot(true,0.11,0);}
//--- setting the stop by the parabolic

//   CopyBuffer(h_parabolic,0,0,1,Sl);
//   if (Sl[0]>0){expert_TS_BW.SetStopLoss(Sl[0]);}
//---*******************the place of the end of external control of the lot, the stop 

   expert_TS_BW.TrailingStop();           // pulling-up the stop (if necessary)  
   expert_TS_BW.TradeActualSignals();     // trading of current signals

Bu durumda, sınıfın yürütülmesi için durdurma fiyatının ve alım satım lotunun dış kontrolünün örnekleri yorumlanır.


5. Geçmiş üzerinde bazı testler

EA yazılırken temel alınan kitabın yazarı, bu sistemin hisse senetlerine ve emtia piyasalarına odaklandığını savunuyor.

İlk olarak, CFD'deki Uzman Danışmanı kontrol edelim. Test çokgeninin IBM geçmişinin bir parçası olacağını varsayalım. Sistem, tekliflerin trend parçalarına yöneliktir. Bir trendin çıplak gözle görülebileceği ilk parçayı aldım.

Şekil 6. IBM grafiği

Şekil 6. IBM grafiği

Yazılmış Uzman Danışmanı bu parçada çalıştırın ve emirler olarak bunları elde ederiz.

Şekil 7. Bill Williams'ın (IBM) alım satım sinyalleri

Şekil 7. Bill Williams'ın (IBM) alım satım sinyalleri

İlk bakışta, trende göre birçok alım satım var, bu iyi bir şeydir. İşte Strateji Test Cihazı tarafından oluşturulan grafik budur.

Alım satım 0,1 lotta, Timsah çizgileri ile kapatılmadan, bir rengin ardışık beş bölgesini kullanan takip eden durdurma olmadan ve agresif alım satım (piramitleme) olmadan yapıldı.

Şekil 8. Test Sonuçları

Şekil 8. Test Sonuçları

Genel olarak kâr elde ettik.

Şimdi daha az eğilimli uzun süreli bir trend alalım.

Şekil 9. IBM grafiği (parça 2)

Şekil 9. IBM grafiği (parça 2)

Bu aynı sembol ve 13 aylık dönem olsun (2008.12'den 2010.01'e kadar)

Strateji Test Cihazının grafiği aşağıdadır:

Şekil 10. Sistemi geçmiş üzerinde test etmenin sonuçları (parça 2)

Şekil 10. Sistemi geçmiş üzerinde test etmenin sonuçları (parça 2)

Diyelim ki, "tatmin edici değil" ya da "beklentilerimizi karşılayamadı" şeklinde sonuçlandı.

Bundan sonra para birimi çiftleri üzerindeki çalışmaları kontrol etmek istiyorum.

İyi bilinen EURUSD çiftini ve grafiğin H1 dönemini ele alalım. Geçmişin derinliği 2010 yılıdır.

Şekil 11. Sistemi geçmiş üzerinde test etmenin sonuçları, EURUSD, H1, 2010

Şekil 11. Sistemi geçmiş üzerinde test etmenin sonuçları, EURUSD, H1, 2010

Bunu aynı yılın (2010) EURUSD günlük çubuklarında deneyelim.

Test cihazının raporu şöyle görünür:

Şekil 12. Sistemi geçmişi üzerinde test etmenin sonuçları, EURUSD, D1, 2010

Şekil 12. Sistemi geçmiş üzerinde test etmenin sonuçları, EURUSD, D1, 2010


Sonuç

Bu makalenin amacı, Bill Williams'ın iyi bilinen alım satım stratejilerinden birinin performansını sadece borsalarda ve emtia borsalarında değil, Forex piyasasında da kontrol etmekti. Sistem, geçmiş yılın EURUSD günlük grafiklerinde "az ya da çok" çalışıyor, ancak optimizasyon girişimleri olmadan daha küçük zaman dilimlerinde kâr getirmiyor.

Sistemin piyasaya giriş sinyalleri oldukça doğrudur (gün grafiklerine bakarsak) ancak kârın yarısından fazlası sabit olmadığından çıkışlar açıkça ertelenmiştir. Bu alan, söz konusu sistemin daha küçük zaman dilimleri için optimizasyonu açısından geliştirilmesi içindir.

Sınıfın tam kodu ekli dosyada bulunabilir.


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

Ekli dosyalar |
h_ts_bw.mqh (57.84 KB)
Uyarlanabilir Alım Satım Sistemleri ve Bunların MetaTrader 5 Müşteri Terminalinde Kullanımları Uyarlanabilir Alım Satım Sistemleri ve Bunların MetaTrader 5 Müşteri Terminalinde Kullanımları
Bu makale, her biri kendi "sanal" alım satım işlemlerini gerçekleştiren birçok stratejiden oluşan uyarlanabilir bir sistemin bir varyantını önermektedir. Şu anda gerçek alım satım en kârlı stratejinin sinyallerine göre gerçekleştirilir. Nesne yönelimli yaklaşımın kullanılması, verilerle çalışmak için sınıfların olması ve Standart kütüphanenin alım-satım sınıfları sayesinde sistemin mimarisi basit ve ölçeklenebilir görünüyordu; Artık yüzlerce alım satım stratejisini içeren uyarlanabilir sistemleri kolayca oluşturmak ve analiz etmek mümkün.
Alım Satım Sistemlerinin Değerlendirilmesi - Genel Olarak Giriş, Çıkış ve İşlemlerin Etkililiği Alım Satım Sistemlerinin Değerlendirilmesi - Genel Olarak Giriş, Çıkış ve İşlemlerin Etkililiği
Bir alım satım sisteminin etkililiğini ve kârlılığını belirlemeye izin veren birçok önlem vardır. Ancak, yatırımcılar her zaman herhangi bir sistemi yeni bir çarpışma testine sokmaya hazırdır. Makale, etkililik ölçütlerine dayalı istatistiklerin MetaTrader 5 platformu için nasıl kullanılabileceğini anlatıyor. S.V. Bulashev’in "Statistika dlya traderov" ("Yatırımcılar için İstatistikler") kitabında verilen açıklamaya aykırı olmayan, sözleşmelere göre istatistiklerin yorumlanmasının dönüştürülmesine yönelik sınıfı içerir. Ayrıca optimizasyon için bir özel fonksiyon örneği içerir.
MQL5'te Uzman Danışmanları Test Etme ve Optimize Etme Kılavuzu MQL5'te Uzman Danışmanları Test Etme ve Optimize Etme Kılavuzu
Bu makale, adım adım kod hatalarını belirleme ve çözme sürecini ve ayrıca Uzman Danışman girdi parametrelerinin sınanması ve optimize edilmesi adımlarını açıklamaktadır. Uzman Danışmanınız için en iyi sembolü ve girdi parametreleri setini bulmak için MetaTrader 5 müşteri terminalinin Strateji Sınama Aracını nasıl kullanacağınızı öğreneceksiniz.
MQL5'te Trend Bulmanın Birkaç Yolu MQL5'te Trend Bulmanın Birkaç Yolu
Herhangi bir yatırımcı, herhangi bir zamanda bir trendi doğru bir şekilde tespit etme fırsatı için çok şey verir. Belki de herkesin aradığı Kutsal Kase budur. Bu makalede bir trendi tespit etmenin birkaç yolunu ele alacağız. Daha net olmak gerekirse MQL5 aracılığıyla bir trendi tespit etmek için birkaç klasik yolun nasıl programlanacağına bakacağız.