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

 
trader781 :
어떻게 된 건지 이해가 안 가는데 이름을 수정했는데 주문 유형에 관계없이 줄이 계속 빨간색으로 표시되고 그냥 다르게 호출 되었습니다. (그러면 10바씩 자르는 방법을 찾아야 함), 정확히 방법이 필요합니다.
지금 시도
파일:
 
Sergey Gritsay :
지금 시도

소스가 여기에 걸려있는 것이 좋습니다)

컴파일 버튼을 누르면 봇이 터미널과 함께 죽고, EX를 연 후에는 열리지 않고 이 파일은 비어 있습니다.

이렇게 생겼습니다.

저도 봤는데 파란색, 녹색, 금색, 흰색을 넣으면 색이 변하는데 짙은 회색과 하늘색을 넣지 않으면 흰색이 됩니다.

파일:
 
trader781 :

소스가 여기에 걸려있는 것이 좋습니다)

컴파일 버튼을 누르면 봇이 터미널과 함께 죽고, EX를 연 후에는 열리지 않고 이 파일은 비어 있습니다.

이렇게 생겼습니다.

저도 봤는데 파란색, 녹색, 금색, 흰색을 넣으면 색이 변하는데 짙은 회색과 하늘색을 넣지 않으면 흰색이 됩니다.

모든 것이 나를 위해 잘 컴파일됩니다.
 
Sergey Gritsay :
string    StringSubstr (
   string   string_value,     // строка
   int      start_pos,         // с какой позиции начать
   int      length= 0            // длина извлекаемой строки
   );
...

고맙습니다!

여전히 도움이 필요합니다. 한 줄에 몇 개의 문자가 있는지 알아야 합니다. 어떻게 해야 하나요?

 
좋은 시간.
StringSplit을 사용하여 파일에서 읽은 줄을 분할하고 있습니다. 그러나 출력 배열은 첫 번째 행을 제외한 모든 행을 잃습니다. 출력에서 배열의 크기는 정확하지만 첫 번째 행을 제외한 모든 행은 비어 있습니다.

또한 문자열 배열에서 이상한 동작이 발생했습니다. 배열에 문자열을 저장하려면 2차원 배열을 만들어야 합니다.

누구든지이 문제가 발생 했습니까?

while ( idx < size ) {
     if ( StringFind ( fileBuffer[idx][ 0 ], "[Main]" ) >= 0 ) {
        idx++;
         Print ( "Buffer(main) = " + fileBuffer[idx][ 0 ] ); // debug
         if ( StringFind ( fileBuffer[idx][ 0 ], "Kit_Names=" ) >= 0 ) {
             Print ( "check1 - " + fileBuffer[idx][ 0 ] ); // debug
             string tmp = StringSubstr ( fileBuffer[idx][ 0 ], 10 );
             Print ( tmp );                               // debug
             StringReplace ( tmp, "\"" , "" );
             Print ( tmp );                               // debug
             Print ( StringSplit ( tmp, sep, list ) );
             Print ( "check22 - " + tmp );               // debug
             for ( int i = 0 ; i < ArrayRange (list, 0 ); i++) Print (list[i][ 0 ]);   // debug
        }
    }
    idx++;
}
 
-Aleks- :

고맙습니다!

여전히 도움이 필요합니다. 한 줄에 몇 개의 문자가 있는지 알아야 합니다. 어떻게 해야 하나요?

문자열의 문자 수를 반환합니다.

int    StringLen (
   string   string_value       // строка
   );

 
terentjew23 :

문자열의 문자 수를 반환합니다.

int    StringLen (
   string   string_value       // строка
   );

고맙습니다!

 
말해 주세요.

EA의 전역 수준에서 배열을 선언합니다. 그런 다음 특수 init() 함수에서 배열을 문자열 상수 로 채우는 사용자 정의 함수를 호출합니다.

추가로 특수 함수 start()에서 데이터 읽기에만 배열을 사용합니다.

어드바이저의 작업 시간이 지나면 다른 데이터가 어레이에 들어갑니다. 즉, Expert Advisor를 실행하면 어레이가 작동하는 동안 변경되지 않은 상태로 유지되지만 데이터는 어떻게든 어레이에 들어가고 일정 시간(10분 이상)이 지난 후에야 시작됩니다. EA가 다시 시작되면 당연히 배열이 원래대로 채워지지만 잠시 후 다시 나에게 명확하지 않은 이유로 잘못된 값이 배열에 들어갑니다.

start()에서 배열이 지속적으로 채워지는 경우에만 출력을 볼 수 있지만 배열이 초기화 중에만 채워져야 하기 때문에 왠지 마음에 들지 않습니다.

무엇이 잘못될 수 있습니까? 어레이를 수정으로부터 보호하는 방법은 무엇입니까?
 
Maksym Mudrakov :
말해 주세요.
...
무엇이 잘못될 수 있습니까? 어레이를 수정으로부터 보호하는 방법은 무엇입니까?
코드를 주의 깊게 확인하십시오.
 
Maksym Mudrakov :
말해 주세요.

EA의 전역 수준에서 배열을 선언합니다. 그런 다음 특수 init() 함수에서 배열을 문자열 상수 로 채우는 사용자 정의 함수를 호출합니다.

추가로 특수 함수 start()에서 데이터 읽기용으로만 배열을 사용합니다.

어드바이저의 작업 시간이 지나면 다른 데이터가 어레이에 들어갑니다. 즉, Expert Advisor를 실행하면 어레이가 작동하는 동안 변경되지 않은 상태로 유지되지만 데이터는 어떻게든 어레이에 들어가고 일정 시간(10분 이상)이 지난 후에야 시작됩니다. EA가 다시 시작되면 당연히 배열이 원래대로 채워지지만 잠시 후 다시 나에게 명확하지 않은 이유로 잘못된 값이 배열에 들어갑니다.

start()에서 배열이 지속적으로 채워지는 경우에만 출력을 볼 수 있지만 배열이 초기화 중에만 채워져야 하기 때문에 왠지 마음에 들지 않습니다.

무엇이 잘못될 수 있습니까? 어레이를 수정으로부터 보호하는 방법은 무엇입니까?
코드를 볼 수 있습니까?
사유: