Ş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
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.
"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)); } //+------------------------------------------------------------------+
İ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)
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)
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
"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.

- 2010.02.25
- MetaQuotes Software Corp.
- www.mql5.com
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.

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