MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 737

 
Alexey Viktorov :
두 번째 차원에서 NewsArr 배열의 차원은 얼마입니까?

불행히도, 나는 이해하지 못했습니다. 두 번째 차원은 무엇입니까?

그리고 아마도 이해했을 것입니다. NewsArr은 0,1,2 및 3 값을 사용합니다. 그게 다인가요?

아마도 다음과 같습니다. string NewsArr[4][1000];

 
novichok2018 :

불행히도, 나는 이해하지 못했습니다. 두 번째 차원은 무엇입니까?

그리고 아마도 이해했을 것입니다. NewsArr은 0,1,2 및 3 값을 사용합니다. 그게 다인가요?

아마도 다음과 같습니다. string NewsArr [4] [1000] ;

첫 번째 차원두 번째 차원 .

하지만 뭔가가 답이 아닐 수도 있습니다.
 
Alexey Viktorov :

첫 번째 차원두 번째 차원 .

하지만 뭔가가 답이 아닐 수도 있습니다.

그리고 2차원의 차원은 어디에서 찾아야 할까요?

아니면 첫 번째 차원의 차원이 4이고 두 번째 차원이 1000입니까?
 
novichok2018 :

그리고 2차원의 차원은 어디에서 찾아야 할까요?

아니면 첫 번째 차원의 차원이 4이고 두 번째 차원이 1000입니까?

네. 그런데 이 글에는 뭔가 문제가 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

novichok2018 , 2019.01.16 15:52

아무도 대답하지 않기 때문에 질문이 어리석은 것일 수 있지만 고문의 작업을 중지하고 컴파일 후 다시 시작하는 방법은 무엇입니까?

플랫폼이 메시지를 발행합니다: 배열이 범위를 벗어났습니다(284,17).

284행: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); 위치 17은 NomNews, cat으로 대괄호를 엽니다. 글로벌 시작 0.  

0에서 1로 변경되어 아무 소용이 없습니다.
if(NomNews==300)break; 줄에서 변경됨 300 이상 360,000, 아무 소용이 없습니다.

나는 컴파일 - 몇 분 동안 잘 작동합니다. 그리고 어떻게 해야 할까요?

2차원 값의 개수가 1000이고

 if (NomNews== 300 ) break ;
두 번째 차원에는 범위를 벗어난 배열이 있을 수 없습니다.


 
psyman :

앵커 포인트가 없고 수직 이동만 있고 화면 너비를 통해 수평을 한 번 설정합니다. 다른 쪽에서 세는 것은 문제가 아니지만 다른 기능에서 동일한 작업이 다르게 수행되는 것은 놀라운 일입니다.


그리고 또 다른 질문이 있습니다. Bid가 레이블의 텍스트로 표시되는 경우 OnChartEvent 또는 OnCalculate 중 어떤 기능에서 이 작업을 수행하는 것이 더 적합합니까?

OBJ_LABEL에는 지정하지 않은 경우에도 앵커 포인트 가 있으며 기본적으로 왼쪽 상단 모서리입니다. OnCalculate에서 입찰가를 변경하고 레이블에서 텍스트를 변경합니다.

 
Alexey Viktorov :

네. 하지만 이 글에는 뭔가 문제가 있습니다.

2차원 값의 개수가 1000이고

두 번째 차원에는 범위를 벗어난 배열이 있을 수 없습니다.


아니, 나는 아무것도 엉망이 된 것 같지 않았다. 복사된 메시지는 다음과 같습니다. 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: 'OnNews_M5_EURUSD.mq4'(284.17)의 범위를 벗어난 배열입니다.

글쎄, 나는 위의 284행을 보여주었다.
 
novichok2018 :

아니, 나는 아무것도 엉망이 된 것 같지 않았다. 복사된 메시지는 다음과 같습니다. 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: 'OnNews_M5_EURUSD.mq4'(284.17)의 범위를 벗어난 배열입니다.

글쎄, 나는 위의 284행을 보여주었다.

위치 17은 NomNews( 고양이)로 대괄호를 엽니다. 0 에 의해 전역적으로 시작됩니다 .

글쎄, 당신은 0의 두 번째 차원에서 배열 셀의 크기를 가지고 있다는 것이 밝혀졌습니다 ...

 
Artyom Trishkin :

글쎄, 당신은 0의 두 번째 차원에서 배열 셀의 크기를 가지고 있다는 것이 밝혀졌습니다 ...

NomNews의 위치는 다음과 같습니다.

날짜 시간 TimeNewsFunck(int nomf)

{

문자열 s=NewsArr[0][nomf];

문자열 시간=StringConcatenate( StringSubstr (s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));

return((날짜 시간)(StringToTime(시간) + GMTplus*3600));

}

//345678901234567890//////////////////////////////////////////////// ///////////////////////////////////

무효 UpdateNews()

{

문자열 TEXT=ReadCBOE();

int sh = StringFind(TEXT,"pageStartAt>")+12;

int sh2= 문자열 찾기(텍스트,"</tbody>");

TEXT=StringSubstr(TEXT,sh,sh2-sh);


쉬=0;

동안(!Isstopped())

{

sh = StringFind(TEXT,"event_timestamp",sh)+17;

sh2= StringFind(TEXT,"onclick",sh)-2;

if(sh<17 || sh2<0)중단;

NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);


sh = StringFind(텍스트,"flagCur",sh)+10;

sh2=sh+3;

if(sh<10 || sh2<3)중단;

NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)계속;


sh = 문자열 찾기(텍스트,"제목",sh)+7;

sh2= StringFind(TEXT,"변동성",sh)-1;

if(sh<7 || sh2<0)중단;

NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

if(StringFind(NewsArr[2][NomNews],"High")>=0 && !HighNews)continue;

if(StringFind(NewsArr[2][NomNews],"보통")>=0 && !MidleNews)continue;

if(StringFind(NewsArr[2][NomNews],"낮음")>=0 && !LowNews)continue;


sh=StringFind(TEXT,"왼쪽 이벤트",sh)+12;

int sh1=StringFind(TEXT,"말합니다",sh);

sh2=문자열찾기(텍스트,"<",sh);

if(sh<12 || sh2<0)중단;

if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);


놈뉴스++;

if(NomNews==300)중단;

}

}

0에서 300 사이의 값. 전역적으로 4로 설정하시겠습니까?

 
novichok2018 :


0에서 300 사이의 값. 전역적으로 4로 설정하시겠습니까?

모두 동일하게 작동 12분에 메시지를 표시합니다.

 
novichok2018 :

모두 동일하게 작동 12분에 메시지를 표시합니다.

내가 말할 수 있는 모든 것에서 NomNews는 이미 999보다 큰 상태에서 While 루프에 들어갑니다. 그런 다음 이 문제를 일으키는 원인을 찾고 이 변수를 어딘가에서 재설정해야 합니다.

이를 확인하려면 루프의 맨 처음에 다음을 입력하십시오.

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