MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 737

 
Alexey Viktorov :
İ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];

 
novichok2018 :

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.
 
Alexey Viktorov :

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?
 
novichok2018 :

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

 if (NomNews== 300 ) break ;
İkinci boyutta sınır dışı dizi olamaz.


 
psyman :

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.

 
Alexey Viktorov :

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.

Yukarıda 284. satırı gösterdim.
 
novichok2018 :

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.

Yukarıda 284. satırı gösterdim.

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...

 
Artyom Trishkin :

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ı?

 
novichok2018 :


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.

 
novichok2018 :

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:

 if (NomNews > 999 )
{
   Print (NomNews);
   break ;
}