Çalıştığından emin misiniz????
Basit bir derleme zaten şu soruyu gündeme getiriyor
ve ikinci olarak bu fonksiyon ne döndürecek!
CopyClose(symbol,timeframe,start,count,Close); return(ArrayMaximum(Close,start,count));
kapanış fiyatlarını Klose dizisine kopyalar, "başlangıç" konumundan ve "sayım" sayısından doğru şekilde kopyalar.
ve "start" pozisyonundan başlayarak ve sadece "count" elemanlarına bakarak Klose dizisinin maksimum elemanının indeksini döndürür......
sapkınlığınız nedir açık sözlülük için özür dilerim.....
Çalıştığından emin misiniz????
Evet, çalışıyor.
//+------------------------------------------------------------------+
//|Test.mq5 |
//|Telif Hakkı DC2008 |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "DC2008"
//--- Zaman serisi dizileri
double Close[];
double Open[];
double High[];
double Low[];
long Volume[];
datetime Time[];
//+------------------------------------------------------------------+
//| Uzman başlatma işlevi|
//+------------------------------------------------------------------+
int OnInit()
{
//---
ArraySetAsSeries(Close,true);
ArraySetAsSeries(Open,true);
ArraySetAsSeries(High,true);
ArraySetAsSeries(Low,true);
ArraySetAsSeries(Volume,true);
ArraySetAsSeries(Time,true);
ArraySetAsSeries(Low,true);
//---
return(0);
}
//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
{
//---
Comment(
"\niHighest",iHighest("EURUSD",PERIOD_M2,0,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,0,10,0)," Open",
"\niHighest",iHighest("EURUSD",PERIOD_M2,1,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,1,10,0)," Low",
"\niHighest",iHighest("EURUSD",PERIOD_M2,2,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,2,10,0)," High",
"\niHighest",iHighest("EURUSD",PERIOD_M2,3,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,3,10,0)," Close",
"\niHighest",iHighest("EURUSD",PERIOD_M2,4,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,4,10,0)," Volume",
"\niHighest",iHighest("EURUSD",PERIOD_M2,5,10,0),
" iLowest ",iLowest("EURUSD",PERIOD_M2,5,10,0)," Time",
"\n",""
);
}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int iLowest(string symbol,
int tf,
int type,
int count=WHOLE_ARRAY,
int start=0)
{
ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
if(type<=0)
{
CopyOpen(symbol,timeframe,start,count,Open);
return(ArrayMinimum(Open,start,count));
}
if(type==1)
{
CopyLow(symbol,timeframe,start,count,Low);
return(ArrayMinimum(Low,start,count));
}
if(type==2)
{
CopyHigh(symbol,timeframe,start,count,High);
return(ArrayMinimum(High,start,count));
}
if(type==3)
{
CopyClose(symbol,timeframe,start,count,Close);
return(ArrayMinimum(Close,start,count));
}
if(type==4)
{
CopyTickVolume(symbol,timeframe,start,count,Volume);
return(ArrayMinimum(Volume,start,count));
}
if(type>=5)
{
CopyTime(symbol,timeframe,start,count,Time);
return(ArrayMinimum(Time,start,count));
}
//---
return(0);
}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int iHighest(string symbol,
int tf,
int type,
int count=WHOLE_ARRAY,
int start=0)
{
ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
if(type<=0)
{
CopyOpen(symbol,timeframe,start,count,Open);
return(ArrayMaximum(Open,start,count));
}
if(type==1)
{
CopyLow(symbol,timeframe,start,count,Low);
return(ArrayMaximum(Low,start,count));
}
if(type==2)
{
CopyHigh(symbol,timeframe,start,count,High);
return(ArrayMaximum(High,start,count));
}
if(type==3)
{
CopyClose(symbol,timeframe,start,count,Close);
return(ArrayMaximum(Close,start,count));
}
if(type==4)
{
CopyTickVolume(symbol,timeframe,start,count,Volume);
return(ArrayMaximum(Volume,start,count));
}
if(type>=5)
{
CopyTime(symbol,timeframe,start,count,Time);
return(ArrayMaximum(Time,start,count));
}
//---
return(0);
}
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES TFMigrate(int tf)
{
switch(tf)
{
case 0: return(PERIOD_CURRENT);
case 1: return(PERIOD_M1);
case 5: return(PERIOD_M5);
case 15: return(PERIOD_M15);
case 30: return(PERIOD_M30);
case 60: return(PERIOD_H1);
case 240: return(PERIOD_H4);
case 1440: return(PERIOD_D1);
case 10080: return(PERIOD_W1);
case 43200: return(PERIOD_MN1);
default: return(PERIOD_CURRENT);
}
}
Tabloların "Analog yok" yazan hücrelerinde, belgelerin belirli bir bölümüne atıfta bulunarak bu şeylerin mql5'te nasıl çözüldüğüne dair kısa bir açıklama yapmalısınız (örneğin, şu gibi bir şey: "mantıklı değil, çünkü mql5'te şu ve bu").
Şu şekilde anlaşılmalıdır: uygulama çok karmaşıktır ve gerekçelendirilmemiştir. Sonuçta, amaç MQL4 işlevlerini tamamen terk etmektir.
Ancak benzer bir şey yapmak için kullanılabilecek MQL5 işlevlerine bağlantılar sağlayabilirsem bunu dikkate almaya çalışacağım.
Bunu TF m2'den alıyoruz. Doğru, anlıyorum.
ama bu sadece gözümüze toz atmak gibi bir şey. TF migrate bize
default: return(PERIOD_CURRENT);
0 bardan. Bu garip.
Ama örneğin 20'den denersek.
Yine kafamızı karıştırmaya çalışıyorsun.
ve her fonksiyonda böyle saçmalıklar.
Ve neden TF'yi taşıyorsunuz???
mql5, mql4'ün sahip olduğu tüm TF'lere sahipse...... daha da fazlasına sahiptir.
tam bir sapkınlık =))))
Moderatörleriniz böyle bir şeyi nasıl gözden kaçırdı?
Sevgili Eugene! Umarım bu makaleyi kontrol eden kişi sen değilsindir.
tam bir sapkınlık =))))
Moderatörleriniz bunu nasıl gözden kaçırdı?
Sevgili Eugene! Umarım bu makaleyi kontrol etmemişsindir.
Sevgili Vasily!
Yorumlarınız için teşekkür ederiz, bölüm 18'in işlevleri güncellendi. Lütfen güncel sürümü kontrol edin.
Yazar çok fazla çalışma yaptı, hatalar olabilir, bunları birlikte düzelteceğiz.
TFMigrate(int tf) fonksiyonu MQL5 zaman dilimlerinin doğru değerlerini yerine koymak için gereklidir. Örneğin, MQL4'te PERIOD_H1 sabitinin sayısal değeri 60'tır ve MQL5'te PERIOD_H1=16385'in sayısal değeri, yani TFMigrate(60)=16385'tir.
Bence çok daha fazla hata var.
Çünkü bu kadar basit anlarda bile ortaya çıkıyorlar. Hatta en basitleri diyebilirim.
Bazı bölümlerde fonksiyonlar birbirleriyle karşılaştırılıyor.
diğerlerinde bir analog yazılmıştır.
makalenin nasıl uygulanacağına dair tek bir başarılı örnek yok,
Anladığım kadarıyla bu makale µl4'ten bir şeyler aktarma çabası.....
Doğrulama konusundaki tavrınız her zaman takdire şayan.
Bence yazarın dizginlenemez arzusu gözünüze toz kaçırmak.
Bunu da kesinlikle başarmış.
Kontrol edilen materyale karşı hassasiyetinizi bildiğimden.
Örneğin 20 ile denerseniz ne olur?
Yine kafamı karıştırmaya çalışıyorsun.
ve her fonksiyonda böyle saçmalıklar.
Ve neden TF migrate????
mql5, mql4'ün sahip olduğu tüm TF'lere sahipse...... daha da fazlasına sahiptir.
tam bir sapkınlık =)))))
Hatayı bulduğunuz için teşekkürler. Aramanın sıfır çubuğu dışında bir yerden başlatılabileceğini gözden kaçırmışım. İşte düzeltilmiş fonksiyonlar:
//+------------------------------------------------------------------+ //|Test.mq5 | //|Telif Hakkı DC2008 | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "DC2008" //--- Zaman serisi dizileri double Close[]; double Open[]; double High[]; double Low[]; long Volume[]; datetime Time[]; //+------------------------------------------------------------------+ //| Uzman başlatma işlevi| //+------------------------------------------------------------------+ int OnInit() { //--- ArraySetAsSeries(Close,true); ArraySetAsSeries(Open,true); ArraySetAsSeries(High,true); ArraySetAsSeries(Low,true); ArraySetAsSeries(Volume,true); ArraySetAsSeries(Time,true); ArraySetAsSeries(Low,true); //--- return(0); } //+------------------------------------------------------------------+ //| Uzman başlangıçtan kaldırma işlevi| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Uzman tik fonksiyonu| //+------------------------------------------------------------------+ void OnTick() { //--- Comment(Open[0],Close[0],Open[1],Close[1], "\niHighest",iHighest("EURUSD",PERIOD_M2,0,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,0,10,20)," Open", "\niHighest",iHighest("EURUSD",PERIOD_M2,1,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,1,10,20)," Low", "\niHighest",iHighest("EURUSD",PERIOD_M2,2,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,2,10,20)," High", "\niHighest",iHighest("EURUSD",PERIOD_M2,3,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,3,10,20)," Close", "\niHighest",iHighest("EURUSD",PERIOD_M2,4,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,4,10,20)," Volume", "\niHighest",iHighest("EURUSD",PERIOD_M2,5,10,20), " iLowest ",iLowest("EURUSD",PERIOD_M2,5,10,20)," Time", "\n","" ); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int iLowest(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(type<=0) { CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMinimum(Open,0,count)); } if(type==1) { CopyLow(symbol,timeframe,start,count,Low); return(ArrayMinimum(Low,0,count)); } if(type==2) { CopyHigh(symbol,timeframe,start,count,High); return(ArrayMinimum(High,0,count)); } if(type==3) { CopyClose(symbol,timeframe,start,count,Close); return(ArrayMinimum(Close,0,count)); } if(type==4) { CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMinimum(Volume,0,count)); } if(type>=5) { CopyTime(symbol,timeframe,start,count,Time); return(ArrayMinimum(Time,0,count)); } //--- return(0); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int iHighest(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(type<=0) { CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMaximum(Open,0,count)); } if(type==1) { CopyLow(symbol,timeframe,start,count,Low); return(ArrayMaximum(Low,0,count)); } if(type==2) { CopyHigh(symbol,timeframe,start,count,High); return(ArrayMaximum(High,0,count)); } if(type==3) { CopyClose(symbol,timeframe,start,count,Close); return(ArrayMaximum(Close,0,count)); } if(type==4) { CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMaximum(Volume,0,count)); } if(type>=5) { CopyTime(symbol,timeframe,start,count,Time); return(ArrayMaximum(Time,0,count)); } //--- return(0); } //+------------------------------------------------------------------+ ENUM_TIMEFRAMES TFMigrate(int tf) { switch(tf) { case 0: return(PERIOD_CURRENT); case 1: return(PERIOD_M1); case 5: return(PERIOD_M5); case 15: return(PERIOD_M15); case 30: return(PERIOD_M30); case 60: return(PERIOD_H1); case 240: return(PERIOD_H4); case 1440: return(PERIOD_D1); case 10080: return(PERIOD_W1); case 43200: return(PERIOD_MN1); default: return(PERIOD_CURRENT); } }
Bence çok daha fazla hata var.
Çünkü bu kadar basit anlarda bile ortaya çıkıyorlar. Hatta en basitleri diyebilirim.
Bazı bölümlerde fonksiyonlar birbirleriyle karşılaştırılıyor.
diğerlerinde bir analog yazılmıştır.
makalenin nasıl uygulanacağına dair tek bir başarılı örnek yok,
Anladığım kadarıyla bu makale µl4'ten bir şeyler aktarma çabası.....
Doğrulama konusundaki tavrınız her zaman takdire şayan.
Bence yazarın dizginlenemez arzusu gözünüze toz kaçırmak.
Bunu da kesinlikle başarmış.
Kontrol edilen materyale karşı hassasiyetinizi bildiğim için bunu yapıyorum.
Hatalar olabilir, malzeme oldukça geniş.
Taşıma konusu (daha doğrusu, MQL4 yöntemleriyle bir emülatör sınıfı yazma konusu) başka bir makalede ele alındı (biteceğini umuyoruz). Materyali okuma sürecinde, yazardan MQL4'ün tüm işlevlerini (ticaret hariç - yakında bunlar için çözümlerden birini göreceksiniz) kapsayacak bir referans kitabı şeklinde bir makale yazmasını, MQL5'te her biri için bir analog sağlamasını, genel olarak, MQL4 programlarını yeniden yazanların hızlı bir şekilde bir analog bulabilmesi için hepsini bir araya getirmesini istedik. Sınırsız arzu hakkında, dikkate alınan bölümlerin sayısından bahsediyorsak - tüm işlevleri kapsamakta ısrar ettik (250'den fazla olduğu ortaya çıktı).
Bazı bölümlerdeki fonksiyonların karşılaştırılmasına gelince - bu tam olarak bir karşılaştırma değildi. Aynı olsa bile bir analog vermek gerekiyordu. Tüm fonksiyonlar için. Yani bir karşılaştırma var gibi görünüyor, ancak karşılaştırmadan örneğin matematik fonksiyonlarının aynı olduğunu anlayabilirsiniz. Bu arada, bir öneri olarak, her bölümün başında bundan bahsetmek muhtemelen faydalı olacaktır, bu dikkat edilmesi gereken bir şeydir.
Bu nedenle (emülatör fonksiyonlarının mimarisi) yazarın uygulamada açık olmayan bazı şeyleri vardı (örneğin, iLowest/iHighest global Open[]...High[]... için, daha önce global olarak bildirilen ve OnInit'te AsSeries yapılan), bunlar emülatörde olduğu gibi ima edildi, doğal olarak fonksiyonlarda evrensellik için yerel dizileri kullanmak daha iyidir.
Teknik göstergelerle çalışmaya gelince, birçok soru olabilir, onlarla çalışmak MQL4'teki gibi olmamalıdır - bunları her seferinde yerel işlevlerde oluşturmak yerine OnInit'te manuel olarak oluşturmak ve tanımlayıcılara başvurmak daha iyidir. Ancak yazar tarafından önerilen yaklaşım da işe yarıyor, çünkü terminal göstergeleri hemen yok etmiyor. Yani çok fazla incelik var.
Önemli olan şu ki, artık tartışılacak bir şey var, eğer hatalar bulursanız (önerilen işlev yapısından kaynaklananlar dahil) - varyantlarınızı sunun.

- Ü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 MQL4'ten MQL5'e geçiş yayınlandı:
Bu makale MQL4 dil işlevleri için hızlı bir rehber olup programlarınızı MQL4'ten MQL5'e geçirmeniz konusunda size yardımcı olacaktır. Her MQL4 işlevi için (alım satım işlevleri hariç) açıklama ve MQL5 uygulaması sunulur, dönüştürme süresini önemli ölçüde azaltmanıza olanak tanır. Kolaylık sağlamak için MQL4 işlevleri, MQL4 Referansı'na benzer şekilde gruplara ayrılmıştır.
MQL5 grafiğinde dönem sabitleri değişti ve bazı yeni zaman dilimleri (M2, M3, M4, M6, M10, M12, H2, H3, H6, H8, H12) eklendi. MQL4 zaman dilimlerini dönüştürmek için aşağıdaki işlevi kullanabilirsiniz:
Yazar: Sergey Pavlov