![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Merhaba, bir göstergeyi mql4'ten mql5'e dönüştürmeye çalışıyorum. Aslında, kırmızı bir çubuk göründüğünde MFI'de sesli bir bildirime ihtiyacım var. Bu ses kodunu şimdi yeni mfi'ye nasıl ekleyebilirim?
Eski bir çalışan sürüm örneği eklendi:
Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı
Bu standarttan bir kırpma
{
haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
haLow= MathMin ( Low [i], MathMin (haOpen,haClose));
Soru ortaya çıkıyor: Open'ın önceki çubuk tarafından aranması gerekiyorsa, neden koddaki bir sonraki çubuk tarafından aranıyor?
Belki bu doğrudur, ya da bir şeyi yanlış anlıyorum:
Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı
Bu standarttan bir kırpma
{
haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
haLow= MathMin ( Low [i], MathMin (haOpen,haClose));
Soru ortaya çıkıyor: Open'ın önceki çubuk tarafından aranması gerekiyorsa, neden koddaki bir sonraki çubuk tarafından aranıyor?
Belki bu doğrudur, ya da bir şeyi yanlış anlıyorum:
Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı
Bu standarttan bir kırpma
{
haOpen=(ExtOpenBuffer0[i - 1 ]+ExtCloseBuffer0[i - 1 ])/ 2 ; // <<<
haClose=( Open [i]+ High [i]+ Low [i]+ Close [i])/ 4 ;
haHigh= MathMax ( High [i], MathMax (haOpen,haClose));
haLow= MathMin ( Low [i], MathMin (haOpen,haClose));
Soru ortaya çıkıyor: Open'ın önceki çubuk tarafından aranması gerekiyorsa, neden koddaki bir sonraki çubuk tarafından aranıyor?
Belki bu doğrudur, ya da bir şeyi yanlış anlıyorum:
Grafikte tam olarak hangi dizinin en sağda ve en solda çubuğa sahip olduğunu görmek için bu basit numarayı kullanın:
Herhangi bir göstergede, MetaEditor'da, OnCakculate() içindeki ilk işlem için bir kesme noktası ayarlayın (1. adım):
geçmiş verilerde hata ayıklamaya başlayın. Kesme noktanızda hata ayıklama başlar başlamaz hata ayıklama duraklatılacaktır. Ardından gözleme iki ifade ekleyin: "time[rates_total-1]" ve "time[0]" (2. ve 3. adımlar). Şimdi bu durumda (burada time[] dizisinin varsayılan indeksleme yönü vardır, ArrayAsSeries kullanılmamıştır) time[rates_total-1] öğesinin grafikte en sağdaki çubuk olacağı hemen açıktır (4. adım).
Umarım bu basit ve net yol, göstergelerde indeksleme yönünü hızlı bir şekilde kontrol etmenize yardımcı olur.
mql5'te çubuk indekslemenin yönü varsayılan olarak yapılır. Bu nedenle, [i-1] sadece sağdaki ilk çubuk olacaktır.
Kabaca anlıyorum, bu yüzden ArraySetAsSeries kullanmayı unutmuyorum .
Soru, hem mql4 hem de mql5'teki kodun aynı "i - 1" hesaplamasını kullanmasıdır, formül gelecekle ilgili değil de önceki çubuk hakkında diyorsa neden çıkarma?
Grafikte tam olarak hangi dizinin en sağ ve en sol çubuğa sahip olduğunu görmek için bu basit numarayı kullanın:
Herhangi bir göstergede, MetaEditor'da, OnCakculate() içindeki ilk işlem için bir kesme noktası ayarlayın (1. adım):
geçmiş verilerde hata ayıklamaya başlayın. Kesme noktanızda hata ayıklama başlar başlamaz hata ayıklama duraklatılacaktır. Ardından gözleme iki ifade ekleyin: "time[rates_total-1]" ve "time[0]" (2. ve 3. adımlar). Şimdi bu durumda (burada time[] dizisinin varsayılan indeksleme yönü vardır, ArrayAsSeries kullanılmamıştır) time[rates_total-1] öğesinin grafikte en sağdaki çubuk olacağı hemen açıktır (4. adım).
Umarım bu basit ve net yol, göstergelerde indeksleme yönünü hızlı bir şekilde kontrol etmenize yardımcı olur.
Teşekkürler, bunu bilmiyordum.
Hesaplamanın doğruluğu hakkında herhangi bir varsayım var mı?
CCİ OK göstergesinde uyarı yapmanız gerekmektedir.
Ok göründükten hemen sonra bip sesi duyulmalıdır.
MT5
Herkes işesin!!! MT5 ter göstergesini yeniden yapmaya başladım, ancak bu bir baş belası, iTime işleviyle anlayamıyorum, bir şey çalışmıyor, biri göstergeyi çalışır duruma getirebilir mi ?????
Gösterge, MQL5\Files\evolution-dvoid\ klasöründe bulunan bir dosyayı okur
İndirdikten sonra .csv olarak yeniden adlandırın
şimdiden teşekkürler.
Herkese iyi günler, programcı değilim ama bir arkadaşım Bill Williams Piyasa Kolaylaştırma Endeksi (BW MFI) gösterge kodunda hesaplamaların kesinlikle klasik formüle göre yapılmadığını iddia ediyor : BW MFI = ( YÜKSEK - DÜŞÜK) / HACİM ve diğer bazı veri ayarları ek olarak kullanılır. Bu aslında bir hatadır ve buna göre gösterge yanlış veri gösterir !
Göstergedeki bu hatayı nasıl düzelteceğimi söyle (ek veri düzeltmesini kaldır) ve
gösterge kesinlikle formüle göre çalışıyor: BW MFI = (YÜKSEK - DÜŞÜK) / HACİM ?????
//+------------------------------------------- --------------------+
//| MarketFacilitationIndex.mq5 |
//| Telif hakkı 2009, MetaQuotes Yazılım A.Ş. |
//| http://www.mql5.com |
//+------------------------------------------- --------------------+
#özellik telif hakkı "2009, MetaQuotes Software Corp."
#özellik bağlantısı "http://www.mql5.com"
//--- gösterge ayarları
#özellik göstergesi_separate_window
#özellik göstergesi_tamponları 2
#property Indicator_plots 1
#özellik göstergesi_type1 DRAW_COLOR_HISTOGRAM
#property Indicator_color1 Kireç,EmerKahverengi,Mavi,Pembe
#özellik göstergesi_width1 2
//--- giriş parametresi
ENUM_APPLIED_VOLUME girin InpVolumeType=VOLUME_TICK; // Birimler
//---- arabellekler
çift ExtMFIBuffer[];
doubleExtColorBuffer[];
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
geçersiz OnInit()
{
//---- göstergeler
SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- DataWindow için isim
IndicatorSetString(INDICATOR_SHORTNAME,"BWMFI");
//--- kesinliği ayarla
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//----
}
//+------------------------------------------- --------------------+
//| |
//+------------------------------------------- --------------------+
void HesaplaMFI(sabit int başlangıç,sabit int oranlar_toplam,
const çift &yüksek[],
const çift &düşük[],
const uzun &hacim[])
{
int i=başlangıç;
bool mfi_up=true,vol_up=true;
//--- mfi_up ve vol_up'ın ilk değerlerini hesapla
if(i>0)
{
intn=i;
süre(n>0)
{
if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; kırmak; }
if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; kırmak; }
//--- mfi değerleri eşit ise devam et
n--;
}
n=i;
süre(n>0)
{
if(hacim[n]>hacim[n-1]) { vol_up=true; kırmak; }
if(hacim[n]<hacim[n-1]) { hacim_up=yanlış; kırmak; }
//--- gerçek hacimler eşitse devam et
n--;
}
}
//---
while(i<rates_total && !IsStopped())
{
if(hacim[i]==0)
{
if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];
başka ExtMFIBuffer[i]=0;
}
başka ExtMFIBuffer[i]=(yüksek[i]-düşük[i])/_Point/hacim[i];
//--- değişiklikleri hesapla
if(i>0)
{
if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;
if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;
if(volume[i]>volume[i-1]) vol_up=true;
if(hacim[i]<hacim[i-1]) vol_up=yanlış;
}
//--- renkleri ayarla
if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;
if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;
if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;
if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;
ben++;
}
}
//+------------------------------------------- --------------------+
//| özel gösterge yineleme işlevi |
//+------------------------------------------- --------------------+
int OnCalculate(const int oranları_toplam,
const int önceki_hesaplanmış,
const tarihsaat &saat[],
const double &aç[],
const çift &yüksek[],
const çift &düşük[],
const double &kapat[],
const uzun &tick_volume[],
const uzun &hacim[],
const int &spread[])
{
//---
int başlangıç=0;
//---
if(başlangıç<önceki_hesaplanmış) başlangıç=önceki_hesaplanmış-1;
//--- kene veya gerçek hacimlerle hesaplayın
if(InpVolumeType==VOLUME_TICK)
HesaplaMFI(başlangıç,oranlar_toplam,yüksek,düşük,tick_volume);
başka
HesaplaMFI(başlangıç,oranlar_toplam,yüksek,düşük,hacim);
//--- son mfi değerini normalleştir
if(oran_toplam>1)
{
tarihsaat ctm=ZamanTradeSunucu(),lasttm=zaman[oranlar_toplam-1],nexttm=lasttm+tarihsaat(PeriodSeconds());
if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)
{
çift düzeltme_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);
ExtMFIBuffer[rates_total-1]*=düzeltme_koef;
}
}
//---
dönüş(oranlar_toplam);
}
//+------------------------------------------- --------------------+
Bana bu kodun ne olduğunu ve bunun dışında MT5 için bir göstergenin nasıl yapıldığını söyle ???
// Bu, hacme dayalı bir göstergedir. Uygun ses girişi kullandığınızdan emin olun.
Bana bu kodun ne olduğunu ve bunun dışında MT5 için bir göstergenin nasıl yapıldığını söyle ???
// Bu, hacme dayalı bir göstergedir. Uygun ses girişi kullandığınızdan emin olun.
BW MFI Squat bar, 3 arabellek (bellek çalışıyorsa)