Ne yapmaya çalıştığınızı kodunuzdan anlayamıyorum ama 2 yerde değişkene ia değeri vermiyorsunuz. Bunu ele almanız gerekiyor.
int start() // Special function start() { if (Crosses()) count++; int i , n, // Bar index Counted_bars; Buf_1[i]= count; // Number of counted bars double Sum_H; //-------------------------------------------------------------------- Counted_bars= IndicatorCounted (); // Number of counted bars i= Bars -Counted_bars- 1 ; // Index of the first uncounted while (i>= 0 ) // Loop for uncounted bars { Sum_H= 0 ; // Nulling at loop beginning for (n=i;n<=i+Aver_Bars- 1 ;n++) // Loop of summing values { Buf_0[i]=Buf_1[n]; // Value of 0 buffer on i bar i--; // Calculating index of the next bar } } //-------------------------------------------------------------------- return ( 0 ); // Exit the special funct. start() } //-------------------------------------------------------------------- bool Crosses() { int i; double H= iHigh ( NULL , PERIOD_M1 , i ); double L= iLow ( NULL , PERIOD_M1 , i ); double O= iOpen ( NULL , PERIOD_D1 , i ); if (O > L && O < H) return ( true ); else return ( EMPTY_VALUE ); }
Açık sözlü olduğum için üzgünüm, ancak kodunuz, yeteneğinizin çok ötesinde bir şey elde etmeye çalıştığınızı gösteriyor.
Misal
bool Crosses() { int i; double H= iHigh ( NULL , PERIOD_M1 ,i); double L= iLow ( NULL , PERIOD_M1 ,i); double O= iOpen ( NULL , PERIOD_D1 ,i); if (O > L && O < H) return ( true ); else return ( EMPTY_VALUE );
Diyelim ki örneğin i = 1
double O= iOpen ( NULL , PERIOD_D1 ,1);
Bu, dünün açılış fiyatını döndürür
double H= iHigh ( NULL , PERIOD_M1 , 1 ); double L= iLow ( NULL , PERIOD_M1 , 1 );
Bu 2, son kapatılan 1 dakikalık çubuğun değerlerini döndürür.
Yani 1 dakika önceki değerleri dünkü açılışla karşılaştırıyorsunuz.
i = 2 ise, 2 dakika öncesinden 2 gün önce açık olan değerleri karşılaştıracaksınız.
İstediğiniz şeyin bu olamayacağını görmelisiniz.
Açık sözlü olduğum için üzgünüm, ancak kodunuz, yeteneğinizin çok ötesinde bir şey elde etmeye çalıştığınızı gösteriyor.
Misal
Diyelim ki örneğin i = 1
Bu, dünün açılış fiyatını döndürür
Bu 2, son kapatılan 1 dakikalık çubuğun değerlerini döndürür.
Yani 1 dakika önceki değerleri dünkü açılışla karşılaştırıyorsunuz.
i = 2 ise, 2 dakika öncesinden 2 gün önce açık olan değerleri karşılaştıracaksınız.
İstediğiniz şeyin bu olamayacağını görmelisiniz.
Merhaba GumRai,
Bana yardım etmek için zaman ayırdığınız için teşekkürler. Haklısın, ben sadece acemiyim ve EA kodlamayı öğrenmek için hevesle çok çalışıyorum. İşte yapmaya çalıştığım şey:
1. PERIOD_D1'i kendi D1 çubuğunda her dakika açık olan PERIOD_M1 çubuğuyla karşılaştırın, dolayısıyla D1 çubuğuyla karşılaştırılacak 1440 M1 çubuğu vardır. Ardından (O > L && O < H) koşulunu sağlayan M1 çubuklarını sayın.
2. Sayılan çubukları bir dizide saklayın, ardından tekrar bir sonraki D1 çubuğuna ilerleyin ve döngüyü yeniden tekrarlayın.
3. Sayılan çubuklar, günlük grafikte gösterge tarafından çizilecektir. Dolayısıyla, ifadeleri karşılayan M1 çubuklarının 5 olduğunu söylersek, bu 5 günlük Bar1'in değeri olarak çizilecektir. Ardından, bir sonraki günlük çubuk için sayılan M1 çubuğunun 10 olduğunu söyleyin, ardından önceki çubuk Çubuk2'ye taşındığı için Çubuk1'de tekrar çizilecektir.
Lütfen bana mücadele ettiğim bu basit ifadeyi en iyi nasıl kodlayacağımı gösterin. Daha fazla açıklamaya ihtiyacınız olduğunu bana bildirin. ve büyük teşekkürler.
Merhaba GumRai,
Bana yardım etmek için zaman ayırdığınız için teşekkürler. Haklısın, ben sadece acemiyim ve EA kodlamayı öğrenmek için hevesle çok çalışıyorum. İşte yapmaya çalıştığım şey:
1. PERIOD_D1'i kendi D1 çubuğunda her dakika açık olan PERIOD_M1 çubuğunu karşılaştırın, böylece D1 çubuğuyla karşılaştırmak için 1440 M1 çubuğu vardır. Ardından (O > L && O < H) koşulunu sağlayan M1 çubuklarını sayın.
2. Sayılan çubukları bir dizide saklayın, ardından tekrar bir sonraki D1 çubuğuna ilerleyin ve döngüyü tekrarlayın.
3. Sayılan çubuklar, günlük grafikte gösterge tarafından çizilecektir. Dolayısıyla, ifadeleri karşılayan M1 çubuklarının 5 olduğunu söylersek, bu 5 günlük Bar1'in değeri olarak çizilecektir. Ardından, bir sonraki günlük çubuk için sayılan M1 çubuğunun 10 olduğunu söyleyin, ardından önceki çubuk Çubuk2'ye taşındığı için Çubuk1'de tekrar çizilecektir.
Lütfen bana mücadele ettiğim bu basit ifadeyi en iyi nasıl kodlayacağımı gösterin. Daha fazla açıklamaya ihtiyacınız olduğunu bana bildirin. ve büyük teşekkürler.
Size yardımcı olmaktan memnuniyet duyarım, ancak öğrenmenize yardımcı olmayacağı için kodu yazmayacağım.
Öncelikle 1440 M1 barların her zaman 1 günlük bir süreye tekabül etmeyeceğini anlamalısınız. Bir bar sırasında kene yoksa, o çubuk geçmişten kaybolacak ve beklediğinizden daha az olabilir.
Yani D1 mumunun açılışı için tarih saat değerine ihtiyacınız var. Bunu yapabilir misin? Deneyin ve kodunuzu gönderin
çok hızlı değil
ne yapmaya çalıştığını biliyorum ve kodun ( eğer (O > L && O <H) ) istediğini elde edemez
@ ekli çizelgeye bakın
yukarı bakan ok bugünün açılışı
& sağa bakan ok , kodunuzla eşleşen ilk çubuktur ( if (O > L && O < H) ) yani say = 1
ama bugünkü açılışın üzerinde barın kapandığına dikkat ederseniz, aslında saymanın = 2 olması gerekiyordu (en azından (sadece kene grafiğinde yapamayacağınız birkaç çarpı daha olabilir))
ama ur kod sayımında = sadece 1
çok hızlı değil
ne yapmaya çalıştığını biliyorum ve kodun ( eğer (O > L && O <H) ) istediğini alamayacak
@ ekli çizelgeye bakın
yukarı bakan ok bugünün açılışı
& sağa bakan ok , kodunuzla eşleşen ilk çubuktur ( if (O > L && O < H) ) yani say = 1
ama bugünkü açılışın üzerinde barın kapandığına dikkat ederseniz, aslında saymanın = 2 olması gerekiyordu (en azından (sadece kene grafiğinde yapamayacağınız birkaç çarpı daha olabilir))
ama ur kod sayımında = sadece 1
Anladığım kadarıyla açılış fiyatını aşan çubukları saymak istiyor - yine de yanılıyor olabilirim :)
- Zaldy : LÜTFEN HERKESE YARDIMCI OLSUN! BU HİÇ MÜMKÜN MÜ?Bize BAĞIRLAMA. Elbette mümkün.
- Tamsayılar ve booleler dönüştürülebilir. Yanlış == 0, doğru = sıfır değil.
return ( true ); else return ( EMPTY_VALUE ); return ( true ); else return ( 2147483647 ); return ( true ); else return ( true );
- Ayrıca üç zaman dilimiyle uğraşıyorsunuz, D1, çizelge, M1. dönüştürmeniz gerekir.Derlenmedi veya test edilmedi.
Counted_bars= IndicatorCounted (); // Number of counted bars for (iCht = Bars - 1 - Counted_bars; iCht >= 0 ; iCht--){ // Chart bars int iD1 = iBarShift ( NULL , PERIOD_D1 , Time [iCht]; double openD1 = iOpen ( NULL , PERIOD_D1 , iD1); int iM1Beg = iBarShift ( NULL , PERIOD_M1 , Time [iCht], iM1End = - 1 ; if (iCht > 0 ) iM1End = iBarShift ( NULL , PERIOD_M1 , Time [iCht- 1 ]; for (Buf_0[i] = 0 ; iM1Beg > iM1End; iM1Beg--){ double hM1 = iHigh ( NULL , PERIOD_M1 , iM1Beg), lM1 = iLow ( NULL , PERIOD_M1 , iM1Beg); // count Bars of M1 Period that crisscross Open price of D1 Period if ( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; } }
Derlenmedi veya test edilmedi.
çok hızlı değil
ne yapmaya çalıştığını biliyorum ve kodun ( eğer (O > L && O <H) ) istediğini alamayacak
@ ekli çizelgeye bakın
yukarı bakan ok bugünün açılışı
& sağa bakan ok , kodunuzla eşleşen ilk çubuktur ( if (O > L && O < H) ) yani say = 1
ama bugünkü açılışın üzerinde barın kapandığına dikkat ederseniz, aslında saymanın = 2 olması gerekiyordu (en azından (sadece kene grafiğinde yapamayacağınız birkaç çarpı daha olabilir))
ama ur kod sayımında = sadece 1
Merhaba Qjol, Evet, sağa bakan ok, istediğim ilk sayıdır. Yalnızca D1 Open'ı çapraz kesenler sayılır. çabalarınız için tekrar teşekkürler.
- Zaldy : LÜTFEN HERKESE YARDIMCI OLSUN! BU HİÇ MÜMKÜN MÜ?Bize BAĞIRLAMA. Elbette mümkün.
- Tamsayılar ve booleler dönüştürülebilir. Yanlış == 0, doğru = sıfır değil.
- Ayrıca üç zaman dilimiyle uğraşıyorsunuz, D1, çizelge, M1. dönüştürmeniz gerekir.Derlenmedi veya test edilmedi.
Derlenmedi veya test edilmedi.
Teşekkürler WHRoeder ve burada büyük harf kullandığım için özür dilerim! Önerilerinizi deneyeceğim ve sonuç için buraya geri döneceğim.
- Ücretsiz ticaret 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
Selamlar! Bu gösterge hakkında yardıma ihtiyacım var. D1 Döneminde Açık fiyat seviyesine denk gelen M1 Dönemindeki Çubuk sayısını saymak için farklı yöntemler deniyor. Kodlama girişimimi ekledim ancak başarılı bir şekilde çalıştıramadım. Bunun için çok uğraştım ama duvara çarptım bu yüzden şimdi yardım için buradaki nazik beylerden yardım istiyorum!
İşte bu gösterge için ihtiyacım olan şey:
1. M1 Döneminde bir Bar fiyatı, D1 Döneminde Açık fiyatıyla karşılaştığında sayılır. M1 Periyodunda her D1 Periyodu için 1440 bar vardır, bu nedenle her 1440 bar test edilecektir.
2. Her D1 Çubuğu için toplam sayı/D1 Çubuğu toplanacak ve belirli bir değere göre ortalaması alınacaktır. Ortalamanın 30 olduğunu söyleyin, bu 30 D1 çubuklarının sayısıdır.
3. Ardından ortalama değer, gösterge olarak çizilecektir.