"MQL5 Standart Kitaplığını Genişletme ve Kodu Yeniden Kullanma" makalesi için tartışma

 

Yeni makale MQL5 Standart Kitaplığını Genişletme ve Kodu Yeniden Kullanma yayınlandı:

MQL5 Standart Kitaplığı, bir geliştirici olarak hayatınızı kolaylaştırır. Ancak, dünyadaki bütün geliştiricilerin ihtiyaçlarını karşılamaz, bu yüzden daha özel bir şeye ihtiyacınız olduğunu düşünüyorsanız, bir adım daha ileri gidebilir ve bunu genişletebilirsiniz. Bu makale, size MetaQuotes'un Zig-Zag teknik göstergesini Standart Kitaplığa entegre etme konusunu anlatır. Amacımıza ulaşmak için MetaQuotes'un tasarım felsefesinden ilham aldık.

MQL5 Standart Kitaplığı, bir geliştirici olarak hayatınızı kolaylaştıran, bir dizi hazır sınıftan oluşan bir nesne yönelimli çerçevedir. Ancak, dünya genelindeki bütün geliştiricilerin ihtiyaçlarını karşılamaz, bu yüzden daha özel bir şeye ihtiyacınız olduğunu düşünüyorsanız, bir adım daha ileri gidebilir ve bunu genişletebilirsiniz. Bu makale, size MetaQuotes'un Zig-Zag teknik göstergesini Standart Kitaplığa entegre etme konusunu anlatmaktadır. Amacımıza ulaşmak için MetaQuotes'un tasarım felsefesinden ilham alacağız.

Özetle, MQL5 API kod yeniden kullanımı, güvenilirlik, esneklik ve bakım kolaylığından faydalanmanıza yöneliktir. Teoride bu böyledir, ancak tüm bunların ötesinde MQL5'te gelişmeye devam etme ve çok para birimli Uzman Danışmanlar gibi daha sofistike şeyler tasarlamayı planlıyorsanız, ilk olarak uygulamalarınızın başarılı bir yaşam sürmesinin garanti edileceği şekilde Standart Kitaplıkta kodlama yapabilmeniz gerekir.

EA'larınız ve göstergeleriniz giderek daha karmaşık hale geldikçe, çerçeve geliştirmede yer alan kavramlar konusunda daha fazla uzmanlaşmak gerekir. Gerçek hayattan bir örnek olarak, kişisel bir ihtiyaç olarak, projemin tabanını sıfırdan güçlendirme ihtiyacını belirten karmaşık bir çok para birimli EA geliştirmem gerekiyor.

Şekil 1. Düzenli çok yüzlü cisimler mükemmel nesnelerdir. Bunlar, somut kavramlar üzerine uygulama geliştirme yaklaşımını iyi betimliyor.


Şekil 1. Düzenli çok yüzlü cisimler mükemmel nesnelerdir. Bunlar, somut kavramlar üzerine uygulama geliştirme yaklaşımını iyi betimliyor

Yazar: Jordi Bassaganas

[Silindi]  

Teşekkür ederim. Çok bilgilendirici.

 

Bu makalede bu kodun ne anlama geldiğini anlamaya çalışıyorum, neden CINDICATOBUFFER'ın yanında bir * var ve sonra at kullanıyoruz.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Detaylı bir açıklama yaparsanız sevinirim

Teşekkürler

 
rodlivar:<br/ translate="no">

Bu makalede bu kodun ne anlama geldiğini anlamaya çalışıyorum, neden CINDICATOBUFFER'ın yanında bir * var ve sonra at kullanıyoruz.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Detaylı bir açıklama yaparsanız sevinirim

Teşekkürler

* bir işaretçiyi gösterir. Bu makalede ayrıntılı açıklama MQL5'te Nesne İşaretçilerinin Kullanımı
 

Dize

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Göstergenin yolunu bulamıyorum.

Burada yolu belirtmenin doğru yolu nedir, çağırmaya çalıştığım göstergeler standart klasörde

 
Tango_X:

Dize

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Göstergenin yolunu bulamıyorum.

Burada belirtmenin doğru yolu nedir, çağırmaya çalıştığım göstergeler standart klasörde yer alıyor.

Standart Zigzag, Examples klasöründe yer alır - klasörün adını yola eklemeniz gerekir


 
Rashid Umarov:

Standart Zigzag, Examples klasöründedir - klasör adını yola eklemeniz gerekir



2017.07.12 10:38:05.703 Proba2(EURUSD.m,M1) cannot load custom indicator 'Examples\ZigZag' [4302]

Sorun ne? Her şey resmindeki gibi.
 
Tango_X:

2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) cannot load custom indicator 'Examples\ZigZag'[4302]

Sorun ne? Her şey resminizdeki gibi.

Hata koduna kim bakacak?

ERR_MARKET_NOT_SELECTED

4302

MarketWatch'ta sembol seçili değil

 
Rashid Umarov:

Hata koduna kim bakacak?

ERR_MARKET_NOT_SELECTED

4302

MarketWatch'ta sembol seçili değil


NULL koyuyorum - çalışıyor, "EURUSD" koyuyorum - çalışmıyor!!!!

bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- geçmişi kontrol et
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- oluştur
   //m_handle=iCustom(symbol,period, "Examples\\\ZigZag",depth,deviation_create,backstep);
     //m_handle=iCustom("EURUSD",period, "Examples\\\ZigZag",depth,deviation_create,backstep); - çalışmıyor
     m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep);       - работает
//--- sonucu kontrol edin
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- gösterge başarıyla oluşturuldu
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- başlatma hatası
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- tamam
   return(true);
  }
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- tamam
   return(true);
  }
 
Anladım! Soru çözüldü! Ön eki olan bir sembol ismim var) - "EURUSD.m".
 
//+------------------------------------------------------------------+
//|| "Zig Zag" göstergesini oluşturun|
//+------------------------------------------------------------------+
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- geçmişi kontrol et
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- oluştur
   m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
//--- sonucu kontrol edin
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- gösterge başarıyla oluşturuldu
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- başlatma hatası
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- tamam
   return(true);
  }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
                        const int depth,const int deviation_init,const int backstep)
  {
   if(CreateBuffers(symbol,period,3))
     {
      //--- durum satırını oluşturma
      m_name  ="ZigZag";
      m_status="("+symbol+","+PeriodDescription()+","+
               IntegerToString(depth)+","+IntegerToString(deviation_init)+","+
               IntegerToString(backstep)+") H="+IntegerToString(m_handle);
      //--- ayarları kaydet
      m_depth=depth;
      m_deviation=deviation_init;
      m_backstep=backstep;       
      //--- tampon oluştur
      ((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
      ((CIndicatorBuffer*)At(1)).Name("HIGH");
      ((CIndicatorBuffer*)At(2)).Name("LOW");
      //--- tamam
      return(true);
     }
//--- hata
   return(false);
  }


Gösterge arabellek dizisinin indeksleme yönünün burada nasıl ayarlandığını anlamama yardımcı olun, yani ArraySetAsSeries ile aynı. Varsayılan yön şimdiki zamandan geçmişe doğrudur, ancak bunu geçmişten günümüze yapmam gerekiyor. Dünden beri bu soruyla mücadele ediyorum! Yardım edin!