![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
Her gösterge için girdi değerlerine duyulan ihtiyacı ortadan kaldıran bir EA'da.
Geri test cihazındaki alternatif, her göstergeyi manuel olarak düzenlemektir.
bir sinyal tamponu ile.
Bunu biraz basit deneyin, ancak şu ana kadar mümkün olan tek yaklaşım.
Çıktılar:
ENUM öğeleri:
Sayı=3
0 x1=-10
1 x2=0
2x3=11
start ve stop parametreleri için makul değerler belirtmek önemlidir, çünkü minimumdan maksimum tamsayı değerine (parametreler atlandığında varsayılan olarak kullanılır) döngü çok yavaş yürütülür, çünkü dize işlevlerinin içeride kullanıldığı dikkate alınır.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Bunu CComboBox sınıfına ekledim, böylece herhangi bir ENUM türünü geçebilirim ve onu birleşik giriş kutusu olarak eklerdi.
Ama ihtiyacınız olanı yapmak için değiştirebilirsiniz.
Sorun şu ki, bir ENUM'u geçmezseniz ve çift veya kayan nokta gibi bir şey iletirseniz, uygulamanızın çökmesine neden olabilirsiniz.
Geçilen veri türünü kontrol etmenin bir yolu olduğunu sanmıyorum.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Bunu CComboBox sınıfına ekledim, böylece herhangi bir ENUM türünü geçebilirim ve onu birleşik giriş kutusu olarak eklerdi.
Ama ihtiyacınız olanı yapmak için değiştirebilirsiniz.
Sorun şu ki, bir ENUM'u geçmezseniz ve çift veya kayan nokta gibi bir şey iletirseniz, uygulamanızın çökmesine neden olabilirsiniz.
Geçilen veri türünü kontrol etmenin bir yolu olduğunu sanmıyorum.
Evet öyle, ayy. Bunu yeni fark ettim.
Bunu yaptığımda, kullandığım ENUM'un aslında 4 özelliği vardı:\
enum Combolist1{item1, item2, item3, item4, item5};
for(int i = 0; GetLastError()==0; i++) {Örneğin, bir enum tanımı vardır:
enum ENUM_FRUIT {APPLE, BANANA, GRAPE};
Sonra, onu döngüde kullanmak istiyorum:
FRUIT_FIRST=APPLE, FRUIT_LAST=GRAPE};
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print ( EnumToString (i));
}
#define FRUIT_FIRST APPLE
#define FRUIT_LAST GRAPE
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print ( EnumToString (i));
}
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 };
ENUM_TIMEFRAMES next( ENUM_TIMEFRAMES curr){
for ( int i= 0 ; gcPeriods[i] != curr; ++i){}
return gcPeriods[i+ 1 ];
}
Neyin kötü tasarımı
enum'daki üye mağaza sayısı anlamına mı geliyor?
Bu konuşmanın oldukça eski olduğunu biliyorum ama burada herhangi bir enum türünden bir diziyi doldurmanın kolay bir yolu var.
Bunu nasıl çözdüğüme gelecek nesiller için çözümümü ekliyorum.
Bu nedenle sorun, enum değerleri ekleme veya kaldırma yeteneği ile enumdaki girişlerin sayısını dinamik olarak bilmektir. Dizi dizini olarak enum değerlerine sahip sabit boyutlu diziler oluşturmak için bunu bilmem gerekiyor. Yapmaya meyilli olduğum şey, numaralandırmanın sonuna yalnızca uzunluk değeri olarak kullanılan ayrılmış bir değer eklemek. İşte bir örnek.
Bu güzel ve kolaydır çünkü her yerde son girişe sabitlenmenize gerek yoktur.ya da numaralandırmanın sonuna daha fazla giriş ekleyebilirsiniz ve dizi ve döngü çalışmaya devam eder.