"Yeni Raylara Adım Atın: MQL5'te Özel Göstergeler" makalesi için tartışma

 

Yeni makale Yeni Raylara Adım Atın: MQL5'te Özel Göstergeler yayınlandı:

Yeni terminalin ve dilin tüm yeni olanaklarını ve özelliklerini listelemeyeceğim. Bunlar sayısızdır ve bazı yenilikler ayrı bir makalede tartışılmaya değerdir. Ayrıca burada nesne yönelimli programlama ile yazılmış bir kod yoktur, geliştiriciler için ek avantajlar olarak bir bağlamda basitçe bahsedilemeyecek kadar ciddi bir konudur. Bu makalede, MQL4'e kıyasla göstergeleri, yapılarını, çizimlerini, türlerini ve programlama ayrıntılarını ele alacağız. Umarım bu makale hem yeni başlayanlar hem de deneyimli geliştiriciler için faydalı olacaktır, belki bazıları yeni bir şeyler bulacaktır.

Maksimum renk sayısını kullanarak bir ton görselleştirme örneği aşağıdadır:

Yazar: TheXpert

 

Şimdi bir şeyi anlamıyorum, göstergede başka bir dönemin Yüksek ve Düşük değerlerine sahip olmaları için 2 tampon yapmam gerekiyor mu????


ve makalede

CopyHigh


fonksiyonların neden yanlış çalıştığı, örn:

//+------------------------------------------------------------------+
//| Belirli bir çubuk numarası için En Yüksek değeri al|
//+------------------------------------------------------------------+
doubleiHigh(stringsymbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
intcopied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}

 

"Yanlış" ne anlama geliyor? "Her şey kötüdür" gibi genel ifadeler yerine somut örnekler vermelisiniz.

CopyHigh() bölümündeki örneği çalıştırmayı deneyin:

//+------------------------------------------------------------------+
//|HighAndLow.mq5 |
//| Telif Hakkı 2009, MetaQuotes Software Corp. | |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#property description "Yüksek[i] ve Düşük[i] değerlerinin çıktısını alma örneği"
#property description "rastgele seçilen çubuklar için".

double High[],Low[];
//+------------------------------------------------------------------+
//| Belirli bir çubuk numarası için Düşük Al |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+
//| Belirli bir çubuk numarası için En Yüksek değeri al |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- her tikte indeksli çubuk için Yüksek ve Düşük değerleri görüntüler,
//--- tik gelişinin saniyesine eşittir
   datetime t=TimeCurrent();
   int sec=t%60;
   printf("High[%d] =%G  Low[%d] =%G",
          sec,iHigh(Symbol(),0,sec),
          sec,iLow(Symbol(),0,sec));
  }
//+------------------------------------------------------------------+

Elde ettiğim şey bu, her şeyi doğru gösteriyor.



 
Rosh   :

"Yanlış" ne anlama geliyor? "Her şey kötüdür" gibi genel ifadeler yerine somut örnekler vermelisiniz.

CopyHigh() bölümündeki örneği çalıştırmayı deneyin:

Elde ettiğim şey bu, her şeyi doğru gösteriyor.




İddiaların spesifik olmayışı için özür dilerim.

Bana öyle geliyor ki, eğer bir fonksiyon yazılmışsa, farklı parametreler altında çalıştığı ima edilir. Aksi takdirde, bir anlam ifade etmezler.

TimeFrame parametresini ekleyelim. Ve programı farklı bir parametre altında, örneğin mevcut olana eşit olarak test edelim, yani örneğin günlük bir grafikte PERIOD_D1'e eşit olarak ayarlayalım.


//+------------------------------------------------------------------+
//|HighAndLow.mq5 |
//| Telif Hakkı 2009, MetaQuotes Software Corp. | |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property description "Yüksek[i] ve Düşük[i] değerlerinin çıktısını alma örneği"
#property description "rastgele seçilen çubuklar için".

double High[],Low[];
input ENUM_TIMEFRAMES TimeFrame;
//+------------------------------------------------------------------+
//| Belirli bir çubuk numarası için Düşük Al |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+
//| Belirli bir çubuk numarası için En Yüksek değeri al |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- her tikte indeksli çubuk için Yüksek ve Düşük değerleri görüntüler,
//--- tik gelişinin saniyesine eşittir
   datetime t=TimeCurrent();
   int sec=t%60;
   printf("High[%d] =%G  Low[%d] =%G",
          sec,iHigh(Symbol(),TimeFrame,sec),
          sec,iLow(Symbol(),TimeFrame,sec));
  }
//+------------------------------------------------------------------+
 
zfs   :


İddiaların spesifik olmayışı için özür dilerim.

Bana öyle geliyor ki, eğer bir fonksiyon yazarsanız, farklı parametreler altında çalıştığı ima edilir. Aksi takdirde, bir anlam ifade etmezler.

TimeFrame parametresini ekleyelim. Ve programı başka bir parametre altında test edelim, örneğin mevcut olana eşit, yani örneğin günlük bir grafikte PERIOD_D1'e eşit olarak ayarlayalım.



Varyantınızı kontrol ettim - o da doğru çalışıyor. H1 ve D1 parametreleri ile D1 zaman diliminde bir komut dosyası olarak çalıştırdım. Değerler doğruydu (son üç çubuğu kontrol ettim)

Dosyalar:
 
Rosh   :


Varyantınızı kontrol ettim - o da doğru çalışıyor. H1 ve D1 parametreleri ile D1 zaman diliminde bir komut dosyası olarak çalıştırdım. Değerler doğruydu (son üç çubuğu kontrol ettim)



Evet, iyi çalışıyor. Görünüşe göre, bu benim hatam, yani dizilerin yönü. Ancak test sırasında neden farklı veriler elde ettiğim benim için bir sır olarak kalacak. İlginiz için teşekkür ederim. Yeni bir şeye başladığınızda, her zaman şüpheleriniz olur.
 

Yeni öğrenmeye başladım. indirdim, D:/\MetaTrader 5/ MQL5/Indicators klasörüne koydum.

Derledim ve grafiğe koydum. Bazı göstergeler hiçbir şey göstermiyor ((.

Böyle mi olması gerekiyor yoksa yanlış bir şey mi yaptım?

CrossMa.mq5, Toned_WPR.mq5 ve HistogramSample.mq5 göstergeleri gösterilmiyor.

diğerleri çalışıyor

 
Rosh:

"Yanlış" ne anlama geliyor? "Her şey kötüdür" gibi genel ifadeler yerine somut örnekler vermelisiniz.

CopyHigh() bölümündeki örneği çalıştırmayı deneyin:

Elde ettiğim şey bu, her şeyi doğru gösteriyor.



Tüm veri dizisini kopyalamak mı???

Bence 1 elemanı kopyalamak çok ekonomik değil.

 

Prival:

Böyle mi olması gerekiyordu? Yoksa yanlış bir şey mi yaptım?

Merhaba, Sergei. Bu makale o anın sıcağında, ilk genel derlemeler için yazıldı. O zamandan bu yana çok şey değişti, belki de bazı göstergelerin iyileştirilmesi gerekiyor.

Vakit bulur bulmaz gözden geçireceğim.

 
Ekli kaynak kodu dosyaları ve HTML kodundaki kaynak kodu ekleri artık size kolaylık sağlamak için tamamen Portekizceye çevrilmiştir.
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Merhaba ve bu harika makale için teşekkür ederim, bir soru :
iCustom türetilmiş sınıf kodunuzda birden fazla INDICATOR_DATA işaretli tampon tanımlarsanız, ilki hariç tüm INDICATOR_DATA işaretli tamponlardan veri almaya çalıştığınızda (CopyBuffer/GetData ile) her zaman kötü bir -1 aldığınız bir anormallik yaşamadınız mı?

Bu sorunu yalnızca INDICATOR_DATA olarak işaretlenmiş tek bir tampon tanımlayarak ve diğerlerini INDICATOR_CALCULATIONS'a taşıyarak çözebildim, bu şekilde CopyBuffer/GetData hedef dizilere doğru kopyalanmış öğeleri döndürür.