MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 737
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
İkinci boyutta NewsArr dizisinin boyutu nedir?
Maalesef anlamadım. İkinci boyut nedir?
Ve muhtemelen anlaşılmıştır: NewsArr 0,1,2 ve 3 değerlerini alır. Öyle mi?
Muhtemelen bu: string NewsArr[4][1000];
Maalesef anlamadım. İkinci boyut nedir?
Ve muhtemelen anlaşılmıştır: NewsArr 0,1,2 ve 3 değerlerini alır. Öyle mi?
Muhtemelen bu: string NewsArr [4] [1000] ;
Birinci boyut ve ikinci boyut .
Ama belki de bir şey cevap değildir.Birinci Boyut ve İkinci Boyut .
Ama belki de bir şey cevap değildir.Ve ikinci boyutun boyutunu nerede aramalı?
Veya birinci boyutun boyutu 4, ikincisi 1000 mi?Ve ikinci boyutun boyutunu nerede aramalı?
Veya birinci boyutun boyutu 4, ikincisi 1000 mi?Evet. Ama bu yazıda bir yanlışlık var.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu
novichok2018 , 2019.01.16 15:52
Belki de soru aptalca, çünkü kimse cevap vermiyor, ancak danışmanın çalışmasını durdurmak ve derlemeden sonra devam etmekle başka nasıl başa çıkılır?
Platform bir mesaj veriyor: dizi aralık dışı (284,17).
satır 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); konum 17, NomNews, cat ile bir köşeli parantez açar. küresel olarak başlatılan 0
0 olarak 1 olarak değiştirildi, boşuna.
if(NomNews==300)break satırında değiştirildi; 300'ün üzerinde 360.000, boşuna.
Derliyorum - birkaç dakika iyi çalışıyor. Ve ne yapmalı?
İkinci boyuttaki değer sayısı 1000 olduğunda ve
İkinci boyutta sınır dışı dizi olamaz.Bağlantı noktalarım yok, sadece dikey hareket var, yatayı ekranın genişliği boyunca bir kez ayarladım. Diğer taraftan saymak sorun değil ama aynı işlemin farklı fonksiyonlarda farklı şekilde gerçekleştirilmesi şaşırtıcı.
Ve başka bir soru daha var - Teklif etiketin metni olarak görüntüleniyorsa, bu OnChartEvent veya OnCalculate'i yapmak hangi işlevde daha uygundur?
OBJ_LABEL, siz belirtmemiş olsanız bile bir bağlantı noktasına sahiptir, varsayılan olarak bu, sol üst köşedir. OnCalculate'de teklif değişiklikleri, bunun içinde ve etiketteki metin değişikliğini yapın.
Evet. Ama bu yazıda bir yanlışlık var.
İkinci boyuttaki değer sayısı 1000 olduğunda ve
İkinci boyutta sınır dışı dizi olamaz.Hayır, hiçbir şeyi berbat etmiş gibi görünmüyordum. İşte kopyalanan mesaj: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: 'OnNews_M5_EURUSD.mq4' (284.17) içindeki dizi aralık dışında.
Hayır, hiçbir şeyi berbat etmiş gibi görünmüyordum. İşte kopyalanan mesaj: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: 'OnNews_M5_EURUSD.mq4' (284.17) içindeki dizi aralık dışında.
konum 17, NomNews, cat ile bir köşeli parantez açar. küresel olarak 0 tarafından başlatılır .
Yani, sıfırın ikinci boyutunda bir dizi hücresinin boyutuna sahipsiniz, öyle görünüyor ki...
Yani, sıfırın ikinci boyutunda bir dizi hücresinin boyutuna sahipsiniz, öyle görünüyor ki...
NomNews'in bulunduğu yer:
tarihsaat TimeNewsFunck(int nomf)
{
string s=NewsArr[0][nomf];
string time=StringConcatenate( StringSubstr (s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));
return((datetime)(StringToTime(time) + GMTplus*3600));
}
//345678901234567890//////////////////////////////////////// / ////////////////////////////
void UpdateNews()
{
string TEXT=ReadCBOE();
int sh = StringFind(METİN,"pageStartAt>")+12;
int sh2= StringFind(METİN,"</tbody>");
METİN=StringSubstr(METİN,sh,sh2-sh);
sh=0;
while(!Stopped())
{
sh = StringFind(METİN,"event_timestamp",sh)+17;
sh2= StringFind(METİN,"onclick",sh)-2;
if(sh<17 || sh2<0)break;
NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
sh = StringFind(METİN,"flagCur",sh)+10;
sh2=sh+3;
if(sh<10 || sh2<3)break;
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;
sh = StringFind(METİN,"başlık",sh)+7;
sh2= StringFind(METİN,"Volatilite",sh)-1;
if(sh<7 || sh2<0)break;
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews],"Yüksek")>=0 && !HighNews)continue;
if(StringFind(NewsArr[2][NomNews],"Orta")>=0 && !MidleNews)continue;
if(StringFind(NewsArr[2][NomNews],"Düşük")>=0 && !LowNews)continue;
sh=StringFind(METİN,"sol olay",sh)+12;
int sh1=StringFind(METİN,"Konuşuyor",sh);
sh2=StringFind(METİN,"<",sh);
if(sh<12 || sh2<0)break;
if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
NomNews++;
if(NomNews==300)break;
}
}
0'dan 300'e kadar olan değerler. Global olarak 4'e ayarlansın mı?
0'dan 300'e kadar olan değerler. Global olarak 4'e ayarlansın mı?
Aynı şekilde, 12 dakikalık çalışmada bir mesaj görüntüler.
Aynı şekilde, 12 dakikalık çalışmada bir mesaj görüntüler.
Her şeyden önce NomNews'in 999'dan daha büyük bir durumdayken while döngüsüne girdiğini söyleyebilirim. Sonra buna neyin sebep olduğunu aramanız ve bu değişkeni bir yere sıfırlamanız gerekir.
Bunu kontrol etmek için döngünün en başına şunu girin: