Sıralı olarak bir numaralandırma üzerinde yineleme nasıl yapılır?
int TF( int i) { switch (i) { case 1 : return ( PERIOD_M1 ); case 2 : return ( PERIOD_M5 ); case 3 : return ( PERIOD_M15 ); case 4 : return ( PERIOD_M30 ); case 5 : return ( PERIOD_H1 ); case 6 : return ( PERIOD_H4 ); case 7 : return ( PERIOD_D1 ); case 8 : return ( PERIOD_W1 ); case 9 : return ( PERIOD_MN1 ); } }
Bunu yapamazsınız çünkü periyotların değeri birer birer artmaz, kendi numaralandırma indeksinizi düzenlemeniz gerekir, bunun gibi bir şey
- www.mql5.com
Muhtemelen iki işlevi tanıtmanız gerekir: 1 - numaralandırmadaki öğelerin sayısını döndürür, 2 - öğeyi sayıya göre döndürür ...
Keşke her şey bu kadar basit olsaydı. Değerler eşit dağılmamıştır. Diyelim ki PERIOD_H1 60 ve sonraki PERIOD_H2 periyodu zaten 120.
Sonuç olarak, numaralandırma önceden tanımlanmış bir şeydir ve tüm değerleri görüntülenebilir,
bu nedenle sevgili sergey1294 , çeviri tablosunu seri bir çağrıya açıklamanızı tavsiye etti,
burada değer 1 artırıldığında, listedeki bir sonraki numaralandırma değeri çağrılır.
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i); Şimdi kaç tane numaralandırma olduğunu ve orada kaç tane dönüştürücü işlevi olması gerektiğini (her numaralandırma için bir tane) tahmin edelim.
Genel olarak, tek bir çözüm var. Her numaralandırma için özel bir Numaralandırıcı işlevi yazın. Örneğin Zaman Çerçeveleri için: Şimdi kaç tane numaralandırma olduğunu ve orada kaç tane dönüştürücü işlevi olması gerektiğini (her numaralandırma için bir tane) tahmin edelim.
ENUM_TIMEFRAMES GetPeriodEnumerator( uchar i) { switch (i) { case 0 return ( PERIOD_M1 ); case 1 return ( PERIOD_M2 ); case 2 return ( PERIOD_M3 ); case 3 return ( PERIOD_M4 ); case 4 return ( PERIOD_M5 ); case 5 return ( PERIOD_M6 ); case 6 return ( PERIOD_M10 ); case 7 return ( PERIOD_M12 ); case 8 return ( PERIOD_M15 ); case 9 return ( PERIOD_M20 ); case 10 return ( PERIOD_M30 ); case 11 return ( PERIOD_H1 ); case 12 return ( PERIOD_H2 ); case 13 return ( PERIOD_H3 ); case 14 return ( PERIOD_H4 ); case 15 return ( PERIOD_H6 ); case 16 return ( PERIOD_H8 ); case 17 return ( PERIOD_H12 ); case 18 return ( PERIOD_D1 ); case 19 return ( PERIOD_W1 ); case 20 return ( PERIOD_MN1 ); } return (- 1 ); }
MT5'te 21 zaman dilimi vardır. Son sürüm böyle görünecek
- www.mql5.com
Genel olarak iki seçenek var
bir işlevi kullanan ilki, son gönderiye iki nokta üst üste koymayı unuttum
ENUM_TIMEFRAMES GetPeriodEnumerator( uchar i) { switch (i) { case 0 : return ( PERIOD_M1 ); case 1 : return ( PERIOD_M2 ); case 2 : return ( PERIOD_M3 ); case 3 : return ( PERIOD_M4 ); case 4 : return ( PERIOD_M5 ); case 5 : return ( PERIOD_M6 ); case 6 : return ( PERIOD_M10 ); case 7 : return ( PERIOD_M12 ); case 8 : return ( PERIOD_M15 ); case 9 : return ( PERIOD_M20 ); case 10 : return ( PERIOD_M30 ); case 11 : return ( PERIOD_H1 ); case 12 : return ( PERIOD_H2 ); case 13 : return ( PERIOD_H3 ); case 14 : return ( PERIOD_H4 ); case 15 : return ( PERIOD_H6 ); case 16 : return ( PERIOD_H8 ); case 17 : return ( PERIOD_H12 ); case 18 : return ( PERIOD_D1 ); case 19 : return ( PERIOD_W1 ); case 20 : return ( PERIOD_MN1 ); } return (- 1 ); }Bir dizi kullanarak ikinci seçenek
ENUM_TIMEFRAMES GetPeriodEnumerator[ 21 ]= { PERIOD_M1 , PERIOD_M2 , PERIOD_M3 , PERIOD_M4 , PERIOD_M5 , PERIOD_M6 , PERIOD_M10 , PERIOD_M12 , PERIOD_M15 , PERIOD_M20 , PERIOD_M30 , PERIOD_H1 , PERIOD_H2 , PERIOD_H3 , PERIOD_H4 , PERIOD_H6 , PERIOD_H8 , PERIOD_H12 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1 };
Diyelim ki bir numaralandırmamız var. Sıralı olarak, örneğin bir döngüde, bu numaralandırmanın tüm olası değerleri nasıl alınır?
ENUM_TIMEFRAMES tf1;Onlar. tf1++ sürekli olarak PERIOD_M1 , PERIOD_M2 , PERIOD_M5 döndürmelidir... Bunun dil araçları kullanılarak yapılamayacağını düşünüyorum.