Fan sayfamıza katılın
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
MQL5 Sihirbazı - Mum Modelleri Sınıfı - MetaTrader 5 için kütüphane
- Görüntülemeler:
- 254
- Derecelendirme:
- Yayınlandı:
- 2022.03.09 15:27
- Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
MQL5 Sihirbazı, müşteri terminali ile birlikte sağlanan Standart Kütüphane sınıflarına dayanan hazır Uzman Danışmanlar oluşturmaya olanak sağlar. Ticaret fikirlerinizi hızlı bir şekilde test etmenize olanak tanır, tek ihtiyacınız olan kendi ticaret sinyalleri sınıfınızı oluşturmaktır. Bu sınıfın yapısı ve örneği, MQL5 Sihirbazı: Ticaret Sinyali Modülü Nasıl Oluşturulur? makalesinde bulunur.
Ana fikir şudur: ticaret sinyalleri sınıfı CExpertSignal'dan türer, sizin LongCondition() ve ShortCondition() sanal metotlarına kendi yöntemlerinizi uygulamanız gerekir.
"Стратегии Лучших Трейдеров Мира" (Dünyanın En İyi Yatırımcılarının Stratejileri) adlı kitapta (Rusça), incelenen birçok ticaret stratejisi vardır ve çoğunluklu olarak Stochastic, CCI, MFI ve RSI osilatörleriyle onaylı terse dönüş mum modellerine odaklanır.
En iyi yol, mum modellerinin oluşumunu kontrol etmek için CExpertSignal'dan türeyen ayrı bir sınıf oluşturmaktır. Mum modelleri tarafından oluşturulan ticaret sinyallerinin onayı için CCandlePattern'dan türeyen sınıf yazmak ve gerekli özellikleri (örneğin, osilatörler tarafından onay) oraya eklemek yeterlidir.
Bu bölümde CCandlePattern sınıfı ele alınacak; CCandlePattern sınıfı, MQL5 Sihirbazı için mum modellerine dayalı ticaret sinyali sınıflarının oluşturulmasını basitleştirmeye olanak tanır.
CCandlePattern sınıfı
CCandlePattern sınıfı, CExpertSignal sınıfından (ticaret sinyallerinin temel sınıfı) türer.
class CCandlePattern : public CExpertSignal { protected: //--- göstergeler CiMA m_MA; //--- zaman serisi CiOpen m_open; CiHigh m_high; CiLow m_low; CiClose m_close; //--- girdi parametreleri int m_ma_period; public: //--- yapıcı CCandlePattern(); //--- girdi parametresi ayarları metodu void MAPeriod(int period) { m_ma_period=period; } //--- başlatma metotları virtual bool ValidationSettings(); virtual bool InitIndicators(CIndicators *indicators); //--- belirli bir mum modelinin oluşumunu kontrol et bool CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern); //--- boğa/ayı tipi mum modelinin oluşumunu kontrol et bool CheckPatternAllBullish(); bool CheckPatternAllBearish(); protected: //--- göstergeleri ve zaman serisini başlat bool InitMA(CIndicators *indicators); bool InitOpen(CIndicators *indicators); bool InitHigh(CIndicators *indicators); bool InitLow(CIndicators *indicators); bool InitClose(CIndicators *indicators); //--- mum kontrolü için kullanılan metotlar double AvgBodySize(int ind); double MA(int ind) const { return(m_MA.Main(ind)); } double Open(int ind) const { return(m_open.GetData(ind)); } double High(int ind) const { return(m_high.GetData(ind)); } double Low(int ind) const { return(m_low.GetData(ind)); } double Close(int ind) const { return(m_close.GetData(ind)); } double CloseAvg(int ind) const { return(MA(ind)); } double MidPoint(int ind) const { return(0.5*(High(ind)+Low(ind))); } double MidOpenClose(int ind) const { return(0.5*(Open(ind)+Close(ind))); } //--- belirli bir mum modelinin kontrolü için metotlar bool CheckPatternThreeBlackCrows(); bool CheckPatternThreeWhiteSoldiers(); bool CheckPatternDarkCloudCover(); bool CheckPatternPiercingLine(); bool CheckPatternMorningDoji(); bool CheckPatternEveningDoji(); bool CheckPatternBearishEngulfing(); bool CheckPatternBullishEngulfing(); bool CheckPatternEveningStar(); bool CheckPatternMorningStar(); bool CheckPatternHammer(); bool CheckPatternHangingMan(); bool CheckPatternBearishHarami(); bool CheckPatternBullishHarami(); bool CheckPatternBearishMeetingLines(); bool CheckPatternBullishMeetingLines(); };
Ticaret sinyali sınıflarında CCandlePattern sınıfını kullanma
CCandlePattern sınıfı, MQL5 Sihirbazı için ticaret sinyali sınıflarında bir üst sınıf olarak kullanılabilir. Ticaret sinyali sınıfının CCandlePattern sınıfından türetilmesi ve ayrıca ticaret koşullarının oluşumunun kontrolü için metotlar eklenmesi gerekir (göstergeler ve benzerine ek olarak).
Terse dönüş mum modelinin oluşumu bir ticaret sinyali olarak kullanılabilir, ancak onayını kontrol etmek daha iyidir (örneğin, osilatörleri kullanarak).
- bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) - alış pozisyonu açma koşullarını kontrol et;
- bool CheckCloseLong(double &price) - alış pozisyonunu kapatma koşullarını kontrol et;
- bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) - satış pozisyonu açma koşullarını kontrol et;
- bool CheckCloseShort(double &price) - satış pozisyonunu kapatma koşullarını kontrol et;
//+------------------------------------------------------------------+ //| CSampleCandleSignal.mqh | //+------------------------------------------------------------------+ // CCandlePattern sınıfını dahil et // mumpatterns.mqh aynı klasörde bulunmalıdır #include "CandlePatterns.mqh" // sihirbaz açıklaması başlangıcı //+------------------------------------------------------------------+ //| Sınıfın açıklaması | //| Başlık=Test signal | //| Tür=Signal | //| Ad=CSampleCandleSignal | //| Sınıf=CSampleCandleSignal | //| Sayfa= | //| Parametre=param1,int,9 | .... //| Parametre=paramN,int,13 | //| Parametre=MAPeriod,int,12 | //+------------------------------------------------------------------+ // sihirbaz açıklaması sonu //+------------------------------------------------------------------+ class CSampleCandleSignal : public CCandlePattern { protected: //--- göstergeler .... //--- girdi parametreleri ... public: //--- yapıcı CTestClass(); //--- girdi parametrelerinin ayarlanması için metotlar ... //--- göstergeleri ve zaman serisini başlat/girdi parametrelerini kontrol et virtual bool ValidationSettings(); virtual bool InitIndicators(CIndicators *indicators); //--- checking of trade signals virtual bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration); virtual bool CheckCloseLong(double &price); virtual bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration); virtual bool CheckCloseShort(double &price); protected: //--- göstergeleri başlatma metotları ... //--- gösterge değerlerine erişme metotları ... };
MQL5 Sihirbazında kullanılan ticaret sinyali sınıflarının yapısıyla ilgili ayrıntılar, MQL5 Sihirbazı: Ticaret Sinyali Modülü Nasıl Oluşturulur? makalesinden bulunabilir.
Şu satıra dikkat edin:
//| Parametre=MAPeriod,int,12 |
(sihirbaz açıklaması bölümünden)
MAPeriod metodu, CCandlePattern üst sınıfında, mumun kapanış fiyatının hareketli ortalamasının ve mum gövdesinin ortalama değerlerinin hesaplanması için kullanılır. Varsayılan olarak, CCandlePattern() sınıf yapıcısında m_ma_period=12 olarak ayarlanır. Ancak, bu değerin girdi parametresinin kullanılarak ayarlanması daha iyidir, böylece bu değer için değişim yapma imkanı MetaTrader 5'in Strateji Sınayıcısında mümkün olur.
Üst sınıfın ValidationSettings() ve InitIndicators() metotlarını çağırma
İlgili sınıf metotlarında üst sınıfın CCandlePattern::ValidationSettings ve CCandlePattern::InitIndicators metotlarını çağırmanın gerekli olduğunu unutmayın.
Önce bu metotları çağırmak daha iyidir:
bool CSampleCandleSignal ::ValidationSettings() { //--- üst CCandlePattern sınıfının ValidationSettings metodunu çağır if(!CCandlePattern::ValidationSettings()) return(false); //--- kodunuz .. //--- tamam return(true); }
Aynısı InitIndicators() metodu için de geçerlidir:
bool CSampleCandleSignal ::InitIndicators(CIndicators *indicators) { //--- üst CCandlePattern sınıfının InitIndicators metodunu çağır if(!CCandlePattern::InitIndicators(indicators)) return(false); //--- kodunuz ... //--- tamam return(true); }
Mum modellerini kontrol etme
Belirli bir mum modelinin oluşumunun kontrolü, parametre olarak belirtilen model için CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern) metodu çağrılarak gerçekleştirilir.
Ayrıca CheckPatternAllBullish() ve CheckPatternAllBearish() metotlarını kullanarak boğa/ayı tipinde mum modellerinin ayrı ayrı oluşumunu da kontrol edebilirsiniz.
Mum modelleriyle çalışmayı basitleştirmek için ENUM_CANDLE_PATTERNS numaralandırması kullanılır:
enum ENUM_CANDLE_PATTERNS // mum modelleri listesi { CANDLE_PATTERN_THREE_BLACK_CROWS = 1, CANDLE_PATTERN_THREE_WHITE_SOLDIERS = 2, CANDLE_PATTERN_DARK_CLOUD_COVER = 3, CANDLE_PATTERN_PIERCING_LINE = 4, CANDLE_PATTERN_MORNING_DOJI = 5, CANDLE_PATTERN_EVENING_DOJI = 6, CANDLE_PATTERN_BEARISH_ENGULFING = 7, CANDLE_PATTERN_BULLISH_ENGULFING = 8, CANDLE_PATTERN_EVENING_STAR = 9, CANDLE_PATTERN_MORNING_STAR = 10, CANDLE_PATTERN_HAMMER = 11, CANDLE_PATTERN_HANGING_MAN = 12, CANDLE_PATTERN_BEARISH_HARAMI = 13, CANDLE_PATTERN_BULLISH_HARAMI = 14, CANDLE_PATTERN_BEARISH_MEETING_LINES = 15, CANDLE_PATTERN_BULLISH_MEETING_LINES = 16 };
Boğa tipi mum modellerini kontrol etme:
///--- 3 beyaz asker mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) ///--- delici hat mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ///--- sabah dojisi mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) ///--- boğa tipi yutucu mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) ///--- boğa tipi harami mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) ///--- sabah yıldızı mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) ///--- boğa tipi buluşan hat mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) ///--- çekiç mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) ///--- herhangi bir boğa tipi mum modeli oluşumunu kontrol et CheckPatternAllBullish();
Ayı tipi mum modellerini kontrol etme:
///--- 3 kara karga mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) ///--- kara bulut örtüsü mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ///--- akşam dojisi mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) ///--- ayı tipi yutucu mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) ///--- akşam yıldızı mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) ///--- asılı adam mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) ///--- ayı tipi harami mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) ///--- ayı tipi buluşan hat mum modelinin oluşumunu kontrol et CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) ///--- herhangi bir ayı tipi mum modeli oluşumunu kontrol et CheckPatternAllBearish();
Metotların kullanımına ilişkin örnekler:
1. Alış pozisyonu açma
//+------------------------------------------------------------------+ //| Alış pozisyonu açma koşullarını kontrol et | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) { //--- alış pozisyonu açma koşullarını kontrol et //--- gösterge kontrolüne ek olarak bu kodu kullanmak daha iyidir //--- örneğin, 3 beyaz asker mum modelinin oluşumunu kontrol edelim: if CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) return(true): //--- sinyal yok return(false); }
2. Alış pozisyonunu kapatma
//-------------------------------------------------------------------+ //| Alış pozisyonunu kapatma koşullarını kontrol et | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckCloseLong(double &price) { //--- alış pozisyonunu kapatma koşullarını kontrol et //--- örneğin, ayı tipi mum modellerinden birinin oluşumunu kontrol edelim: if CheckPatternAllBearish() return(true): //--- sinyal yok return(false); }
3. Satış pozisyonu açma
//-------------------------------------------------------------------+ //| Satış pozisyonu açma koşullarını kontrol et | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) { //--- satış pozisyonu açma koşullarını kontrol et //--- gösterge kontrolüne ek olarak bu kodu kullanmak daha iyidir //--- örneğin, 3 kara karga mum modelinin oluşumunu kontrol edelim: if CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) return(true): //--- sinyal yok return(false); }
4. Satış pozisyonunu kapatma
//-------------------------------------------------------------------+ //| Satış pozisyonunu kapatma koşullarını kontrol et | //+------------------------------------------------------------------+ bool CSampleCandleSignal::CheckCloseShort(double &price) { //--- satış pozisyonunu kapatma koşullarını kontrol et //--- gösterge kontrolüne ek olarak bu kodu kullanmak daha iyidir //--- örneğin, boğa tipi mum modellerinden birinin oluşumunu kontrol edelim: if CheckPatternAllBullish() return(true): //--- sinyal yok return(false); }
Öneriler
Yanlış sinyalleri azaltmak için, terse dönüş mum modelleri, osilatörler gibi diğer göstergeler tarafından onaylanmalıdır.
"Стратегии Лучших Трейдеров Мира" (Dünyanın En İyi Yatırımcılarının Stratejileri) adlı kitapta şu mum modelleri ele alınır:
- 3 kara karga / 3 beyaz asker
- kara bulut örtüsü / delici hat
- sabah dojisi / akşam dojisi
- ayı tipi yutucu / boğa tipi yutucu
- akşam yıldızı / sabah yıldızı
- çekiç / asılı adam
- ayı tipi harami / boğa tipi harami
- ayı tipi buluşan hat / boğa tipi buluşan hat
(Stochastic, CCI, MFI ve RSI osilatörleri tarafından onaylı olarak).
Daha sonraki bölümlerde, bu mum modellerine dayalı ticaret sinyali sınıflarının uygulanmasına ilişkin örnekler ele alınacak.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/291
OBJ_BITMAP türünde nesne kullanılarak oluşturulan grafik arka plan görüntüsü örneği.
Demo_Create_OBJ_BITMAP_LABEL_EAOBJ_BITMAP_LABEL türünde nesne kullanılarak oluşturulan düğme örneği.
Kaynakların kullanımına örnek. OBJ_BITMAP_LABEL türünde nesne kullanarak bir düğme oluşturur.
Demo_DRAW_ZIGZAGDRAW_ZIGZAG çizim stilinin kullanımına ilişkin basit bir örnek.