Kodlama yardımı - sayfa 557

 
mntiwana:
Sevgili MLADEN,

Önceki isteğim yanlışlıkla silinmiş olabilir, çoğunlukla burada ve orada çalışan şeyler, tam yerlerini arar ve ayarlar ama işimizi yapmakta kolay ve rahatız, bir hatırlatma olarak, eklemek istediğim BE kodu ile bazı basit takip durdurma için sizden rica ediyorum. Yardımınız ve rehberliğinizle değiştirdiğim ekli EA'da /merge, ancak acelem yok, sizin için mümkün olduğunda, ne kadar çok şeyin yayıldığını ve sizi beklediğini biliyorum, teşekkürler.

Saygılarımızla

simple_ma_cross_eamod-hp.mq4

TAMAM. Tamamlanacak

 
 

Herkese selam,

Yazımı okumaya zaman ayırdığınız için teşekkür ederim. Kod söz konusu olduğunda mutlak bir acemiyim. Bu EA'nın çalışması için birkaç şey denedim ama cevap onlar değildi. Bir yenileme/yeniden yükleme vb. gerçekleştiğinde yeniden başlatmak yerine ne olduğunu hatırlamak için buna ihtiyaç duyduğunu düşündüğümden küresel değişkenleri inceliyorum. Bir geriye dönük testte mükemmel çalışıyor, ancak bir nedenden dolayı canlı yayındayken, bu konuda takas almayı veya kapatmayı bırakacak ve ben bunu anlayamıyorum. Ben de bunları nasıl yapacağımı öğrenmeye çalışıyorum ama daha yeni başlıyorum, eğer yanlış bir şey yaparsam beni bağışlayın. EA'nın bir başlangıç ve bitiş zamanı vardır ve bu süre içinde x işlem açabilir ve bu kapandığında bir döngü tamamlanır. Her zaman periyodu için sadece 1 çevrime izin verecek şekilde ayarlanmıştır.

Birisi sorunun ne olduğunu görmek için bu koda bakabilir mi? Herhangi bir yardım için çok teşekkürler

maa1

kuantum_shaolin_1.3.2.mq4

kuantum.mq4

Dosyalar:
 

Merhaba Mladen,

Belirli bir sembolde kaç tane göstergenin alım veya satım fırsatı gösterdiğini söyleyen bir tarayıcı göstergem var ve sembolü birden çok zaman diliminde tarıyor.

Sorun şu ki, gösterge, gerçekte olmasa bile, her zaman gösteren göstergeler olduğunu söylüyor. Bu durumda gösterge miktarı her zaman aynı sayıdır.

Lütfen aşağıdaki koda bakın:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Her şey bir uyarı mesajında görüntülendiğinde EURUSD gibi bir şey alıyorum: 15m/60m/4u/1d/1w/1mo 7/7/7/7/7/7/ alım fırsatını gösteriyor.

Bu, her zaman dilimi için açıkça hatalı olan 7 göstergeyi topladığı anlamına gelir. Tüm işlev çağrılarını çıkardığımda bile bunu belirtiyor. Bunu yaptığımda BufferALL[] öğesinin tüm öğeleri boş.

Ancak görünüşe göre EMPTY değeri, örneğin 534653647457 gibi başka bir değerle karşılaştırılabilecek bir değerdir. >= veya = 534653647457 ile == 534653647457 karşılaştırmasını kullandığımda /7/7/7/7/7/7/7 mesajları duruyor. Bunu nasıl düzeltebilirim?

 
mrcodix:
Merhaba Mladen,

Belirli bir sembolde kaç tane göstergenin alım veya satım fırsatı gösterdiğini söyleyen bir tarayıcı göstergem var ve sembolü birden çok zaman diliminde tarıyor.

Sorun şu ki, gösterge, gerçekte olmasa bile, her zaman gösteren göstergeler olduğunu söylüyor. Bu durumda gösterge miktarı her zaman aynı sayıdır.

Lütfen aşağıdaki koda bakın:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Her şey bir uyarı mesajında görüntülendiğinde EURUSD gibi bir şey alıyorum: 15m/60m/4u/1d/1w/1mo 7/7/7/7/7/7/ alım fırsatını gösteriyor.

Bu, her zaman dilimi için açıkça hatalı olan 7 göstergeyi topladığı anlamına gelir. Tüm işlev çağrılarını çıkardığımda bile bunu belirtiyor. Bunu yaptığımda BufferALL[] öğesinin tüm öğeleri boş.

Ancak görünüşe göre EMPTY değeri, örneğin 534653647457 gibi başka bir değerle karşılaştırılabilecek bir değerdir. >= veya = 534653647457 ile == 534653647457 karşılaştırmasını kullandığımda /7/7/7/7/7/7/7 mesajları duruyor. Bunu nasıl düzeltebilirim?

mrcodix

Göstergelerin tam olarak ne yaptığını bilmeden (dönüş değerleri nelerdir) yapabileceğim tek şey çılgın tahminler ve bu hiç yardımcı olmaz.

 
mladen:

mrcodix

Göstergelerin tam olarak ne yaptığını bilmeden (dönüş değerleri nelerdir) yapabileceğim tek şey çılgın tahminler ve bu hiç yardımcı olmaz.

Sevgili Mladen,

Geri dönüş değerlerini bilmek zorunda değilsiniz çünkü suçlu olan göstergeler değil. Görüyorsunuz, aynı sorun, her kod satırının önüne bir "//" ekleyerek (bunları yorum satırlarına çevirerek) tüm çağrı işlevlerini devre dışı bıraktığımda ortaya çıkıyor. Aynı şey, bu bölümdeki = işaretinin arkasındaki değerler için de geçerlidir:

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}[/CODE]

it might aswell be something like

for(z=0; z<=14; z++){

if (BufferALL[z] >=1111111111111) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=2222222222222) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 333333333333) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 444444444444) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

it will give the same exact alert message that says /15m/60m/4u/1d/1w/1mo/ is indicating a buying opportunity /7/7/7/7/7/7/. I disabled all the function call lines with // so the BufferALL[22] elements should be EMPTY, they shoulden't contain any value whatsoever. Yet, when the computer comes at the if condition parts BufferALL[z] >=1111111111111 etc it ALWAYS states that the "value" thats inside BufferALL[z] is larger then 11111111111 (or any value you wish to put behind it). The only way to make these additions stop is by changing the if condition = into ==. When the computer asks whether the empty value of BufferALL[z] is exactly the same as 11111111 or 22222 or whatever value you wish to compare, it doesen't return a true and Timeframe is not added with +1. Please try it for youself. I will add the message construction code below:

[CODE]

int SymbolBars[216][7];

if (((Timeframe[0][1] > 0) && (Timeframe[1][1] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][1] > 0) && (Timeframe[2][1] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][1] > 0) && (Timeframe[3][1] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][1] > 0) && (Timeframe[4][1] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][1] > 0) && (Timeframe[5][1] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][1]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][1],"/"));

SymbolBars[y][0]=iBars(symbol[y],15);

}

if (Timeframe[1][1]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][1],"/"));

SymbolBars[y][1]=iBars(symbol[y],60);

}

if (Timeframe[2][1]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][1],"/"));

SymbolBars[y][2]=iBars(symbol[y],240);

}

if (Timeframe[3][1]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][1],"/"));

SymbolBars[y][3]=iBars(symbol[y],1440);

}

if (Timeframe[4][1]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][1],"/"));

SymbolBars[y][4]=iBars(symbol[y],10080);

}

if (Timeframe[5][1]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][1],"/"));

SymbolBars[y][5]=iBars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a selling opportunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}

if (((Timeframe[0][2] > 0) && (Timeframe[1][2] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][2] > 0) && (Timeframe[2][2] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][2] > 0) && (Timeframe[3][2] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][2] > 0) && (Timeframe[4][2] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][2] > 0) && (Timeframe[5][2] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][2]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][2],"/"));

SymbolBars[y][0]=Bars(symbol[y],15);

}

if (Timeframe[1][2]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][2],"/"));

SymbolBars[y][1]=Bars(symbol[y],60);

}

if (Timeframe[2][2]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][2],"/"));

SymbolBars[y][2]=Bars(symbol[y],240);

}

if (Timeframe[3][2]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][2],"/"));

SymbolBars[y][3]=Bars(symbol[y],1440);

}

if (Timeframe[4][2]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][2],"/"));

SymbolBars[y][4]=Bars(symbol[y],10080);

}

if (Timeframe[5][2]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][2],"/"));

SymbolBars[y][5]=Bars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a buying oppertunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}
 

Mladen,

İşte tüm gösterge çağrılarını yorum satırlarına çevirerek kaldırdığımda sürekli uyarı mesajının bir örneği.

Bir satın alma fırsatı olduğunda, tüm olası zaman dilimlerinde tüm gösterge toplamları 15'tir. Bir satış fırsatı olduğunda, 7. Tampon TÜMÜ[] BOŞ yani bu hiçbir şekilde mantıklı değil.

Son olarak size konu dışı bir şeyden bahsetmek istiyorum. Geçmişte, art arda birden çok sembolü tarayan tarayıcı göstergesi hakkında bir şey sormuştum. Gösterge, mevcut sembolün sık sık güncellenmediği bir çizelgeye eklendiğinde (saniyede daha az tıklama) daha sık değişen sembollerdeki tüm onay işaretlerini alıp almayacağını merak ediyordum. Bu, teoride, göstergem hala 20:05'in 5 dakikalık çubuğundayken, taraması gereken daha hızlı güncelleme sembollerinin zaten 20:10'da olduğu anlamına gelir. Basitçe, yeni bir çubuk saat 20:05:00'i gösterdiğinde değil, 20:04:59'dan sonra ilk tikte başladığı için. Buna, tüm sembollerin sabit bir kontrol hızıyla kontrol edileceğini söyleyerek yanıt verdiniz çünkü yeni metatrader versiyonunda start {return} prosedürü artık her yeni tikte etkinleştirilmiyor. Bunun yerine sabit bir oranda etkinleştirilir. Bunun doğru olmadığı ortaya çıktı. Tüm göstergelerimi, tarayıcı göstergemin kodunda bulunan işlevlere dönüştürdükten sonra, çalıştırdığımda tüm gösterge hala mt4'ü dondurdu. Bu nedenle, kodu çağırmak için iCustom()'u kullanmak veya kodu eklemek ve onu dahili bir işleve dönüştürmek hiçbir şekilde fark etmez, yine de donar. Ancak bunun için 215 yineleme uzun master for döngüsünden (her yineleme [y] sembolünden farklı bir sembol işleniyor) atlayarak ve onu her onaydan sonra ek alan bir değişkenle değiştirerek bir çözüm buldum. Bunu, bilgisayara hangi sembolü kullanması gerektiğini söylemek için kullanıyorum, bu yüzden her tikte 216 sembolün hepsini analiz etmeye çalışmak yerine (ki bu her şeyi dondurur) her tik üzerinde sadece bir sembol analiz ediliyor. Toplama değişkeni 215'e ulaştığında, 0'a sıfırlanır ve tüm 216 döngü yeniden başlar. Şimdi tüm semboller, her tikte 216'nın tümü analiz edildiğinde (eğer rotadan donmazsa) biraz daha yavaş da olsa analiz ediliyor.... Neyse. Buradaki nokta, Başlat{}'ın yalnızca grafikteki mevcut sembol güncellenirken etkinleştirilmesidir. Bu, gösterge çok aktif bir sembolün (EURUSD gibi) aksine daha az aktif bir sembol (hisse gibi) olduğunda 216 sembolün tümüne gitmenin daha uzun sürdüğü anlamına gelir. Bu nedenle Başlat{}, her yeni onay işaretinde hala etkindir.

Dosyalar:
 

Merhaba Mladen ve Mrtools, büyük bir zevkle rica ediyorum.

Ekli göstergeyi derlerken iki hata sorununu çözmeniz iyi olur.

Şimdiden teşekkür ederim

Moreno

Not: İngilizcem için üzgünüm :-)

Dosyalar:
 
morenokosta:
Merhaba Mladen ve Mrtools, büyük bir zevkle rica ediyorum.

Ekli göstergeyi derlerken iki hata sorununu çözmeniz iyi olur.

Şimdiden teşekkür ederim

Moreno

Not: İngilizcem için üzgünüm :-)

morenokosta

Bu gösterge bizi olduğu gibi tamam

Herhangi bir kod değişikliği yapmanıza gerek yok

 

Merhaba Mladen

Lütfen bu göstergeye uyarı ekler misiniz, ben bir acemiyim.

teşekkürler

Dosyalar:
cross.mq4  2 kb