YARDIM!!!! göstergeyi MT4'ten MT5'e dönüştürün.(ücretsiz) - sayfa 5

 

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:

Dosyalar:
 

Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı

Bu standarttan bir kırpma

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   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:

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
Teşekkür ederim!
 
Vitaly Muzichenko :

Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı

Bu standarttan bir kırpma

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   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:

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
Teşekkür ederim!
mql5'te çubuk indekslemenin yönü varsayılan olarak yapılır. Bu nedenle, [i-1] sadece sağdaki ilk çubuk olacaktır.
 
Vitaly Muzichenko :

Bana nasıl doğru olduğunu söyle, bu Heiken Ashi'nin hesabı

Bu standarttan bir kırpma

for (i=pos /*pos=1*/ ; i<rates_total ;i++)
  {
   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:

haOpen=(ExtOpenBuffer0[i + 1 ]+ExtCloseBuffer0[i + 1 ])/ 2 ;
Teşekkür ederim!

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):

indeksleme kontrolü

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.

 
Alexey Viktorov :
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?

Vladimir Karputov :

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ı?

 
Merhaba.
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.

Dosyalar:
 

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.


//Squat barlar, çok sayıda alım satım ama az fiyat hareketi ile boğaların ve ayıların savaşıdır.
//Bir çömelme çubuğu, bir trendin sonunda zamanın %85'inde en üstteki üç VEYA en alttaki üç çubuktan biri olacaktır.
//Tüm trendler bir squat ile sona ererken, tüm squat'lar bir trendin sonu DEĞİLDİR.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((yüksek-düşük)/hacim,1)
r_v=roc(hacim,1)
squat_f=(r_hl < 0) ve (r_v > 0)
barcolor(squat_f ? mavi : yok)
 
Olexiy Polyakov :

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.


//Squat barlar, çok sayıda alım satım ama az fiyat hareketi ile boğaların ve ayıların savaşıdır.
//Bir çömelme çubuğu, bir trendin sonunda zamanın %85'inde en üstteki üç VEYA en alttaki üç çubuktan biri olacaktır.
//Tüm trendler bir squat ile sona ererken, tüm squat'lar bir trendin sonu DEĞİLDİR.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((yüksek-düşük)/hacim,1)
r_v=roc(hacim,1)
squat_f=(r_hl < 0) ve (r_v > 0)
barcolor(squat_f ? mavi : yok)

BW MFI Squat bar, 3 arabellek (bellek çalışıyorsa)
Neden: