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

 
ANDREY :

대괄호 추가 void PrintArray(double &eArray[]) 컴파일러에서 오류나 경고를 표시하지 않았습니다.
하지만 ..... 기능   어떤 이유로 Print() 가 한 번도 인쇄되지 않았습니다.

당신의 게으름을 이해합니다. 왜냐하면 나 자신도 그렇습니다. 게으름이 지나가고 그 자리에 열정이 깃든다면 유저 기능에서 여전히 잘못된 점을 알려주시면 감사하겠습니다.

도와주셔서 감사하고 번거롭게 해서 죄송합니다.

배열이 비어 있습니까? 기능을 조금 바꿔서 확인해보세요

 void PrintArray( double &eArray)
   {
   int eSize= ArraySize (eArray);
   string eStr= "Размер массива " +eSize+ " : " ;
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }
0이 인쇄되면 배열을 채우는 데 문제가 있는지 찾으십시오.
 
Alexey Viktorov :

 void PrintArray( double &eArray)
   {
   int eSize= ArraySize (eArray);
   string eStr= "Размер массива " +eSize+ " : " ;
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }

오류를 찾았습니다. 마지막 줄로 Print (str); str 대신 str 을 전달 했습니다. 나는 그것을 고쳤고 모든 것이 정상이었다.

이제 당신 덕분에 일반적인 용어뿐만 아니라 모든 세부 사항에서이 주제를 마스터 한 것 같습니다. 답변되지 않은 유일한 질문은 내 게시물 의 전문가에 대한 질문이었습니다.

도움과 지원에 감사드립니다.

 
Maxim Kuznetsov :

포럼과 C#, Delphi 및 기타 모든 것에 대한 출판물에서...

나는 이것을 한 적이 없습니다. "인형"에 대한 링크를 알 수 있습니까?
 
ANDREY :

오류를 찾았습니다. 마지막 줄로 Print (str); e str 대신 str 을 전달 했습니다. 나는 그것을 고쳤고 모든 것이 정상이었습니다.

이제 당신 덕분에 일반적인 용어뿐만 아니라 모든 세부 사항에서이 주제를 마스터 한 것 같습니다. 답변되지 않은 유일한 질문은 내 게시물 의 전문가에 대한 질문 이었습니다.

도움과 지원에 감사드립니다.

나는 그것을 전달하지 않았다

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

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

알렉세이 스테파넨코 , 2021.03.13 09:04

 Print ( "-LoY[0]-" , DoubleToString (LoY[ 0 ], 4 ), "---LoY[1]--" , DoubleToString (LoY[ 1 ], 4 ), "---LoY[2]--" , DoubleToString (LoY[ 2 ], 4 ), "---LoY[3]--" , DoubleToString (LoY[ 3 ], 4 ),................   "---LoY[30]--" ,   DoubleToString (LoY[ 30 ], 4 ) );

또는 별도의 배열 인쇄 기능을 만드십시오.

 void PrintArray( double &eArray)
   {
   string eStr= "" ;
   int eSize= ArraySize (eArray);
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }

그리고 어디에서나 불러

PrintArray(LoY);

나는 그것에 주의를 기울이지 않았다. 컴파일이 어떻게 오류 없이 진행되었는지 명확하지 않고 명확하지 않습니다...

그리고 모든 것을 이해하고 전체 시퀀스를 그린 경우 대답해야 할 내용

안드레이 :

드디어 깨달은 것 같아요(조금 둔감한 편입니다).......

첫 번째 반복에서 문자열 변수 str은 비어 있습니다. =+ 기호는 str에게 값이 없는 값을 할당하고 값이 있는 문자열을 자체에 추가하도록 지시합니다. 즉, "--LoY["+IntegerToString(r)+"]--, "+DoubleToString( LoY[r],4)+", ";. 이 문자열의 값은 " -- LoY[0]--, --1.6104-- "입니다. 이러한 작업 후에 첫 번째 반복에서 str은 " -- LoY[0]--, --1.6104-- " 값을 얻습니다. 귀하의 용어로 이해하면 이것을 첫 번째 요소라고 합니다.

두 번째 반복 에서 str에는 이미 값이 " --LoY[0]--, --1.6104--"인 첫 번째 요소가 있습니다.   기호 =+ 규정   str은 첫 번째 요소의 값으로 자신을 할당하고 첫 번째 요소의 값으로 자신을 할당합니다. 다른 값으로 문자열을 추가합니다. 즉, "--LoY["+IntegerToString(r)+"]--, "+DoubleToString (LoY[r],4)+", ";. 이 줄의 값은 이미 " --LoY[1]--, --1.6105-- "입니다. 이러한 작업 후에   str은 두 번째 반복에서 값을 얻습니다.   " -- LoY[0]-- --1.6104-- -- LoY[1]-- --1.6105-- ". 즉, 두 번째 요소가 str에 등장(추가)되었습니다. 그리고 30번째 반복에서 str은 배열 요소 값이 다른 30개의 요소를 갖습니다.

그리고 루프가 끝난 후 30개의 요소가 있는 문자열 변수 str이 외부에 한 번 인쇄됩니다.
오랫동안 나는 이 알고리즘을 이해할 수 없었습니다. 왜냐하면 당신이 덧셈에 대해 이야기할 때 나는 오로지 빨간 플러스에만 주의를 기울였기 때문입니다. "--LoY[" + IntegerToString (r) + "]--, " + DoubleToString(LoY[r],4) + " 대신 str + =

그래서 이 빨간 플러스가 이 알고리즘에서 어떤 역할을 하는지는 여전히 미스터리로 남아 있습니다.   "--LoY[" + IntegerToString(r) + "]--, " + DoubleToString(LoY[r],4) + "

도와 주셔서 감사합니다.

그리고 모든 것이 올바르게 칠해지면 수수께끼가 남아 있습니다 ...
 
MakarFX :
나는 이것을 한 적이 없습니다. "인형"에 대한 링크를 알 수 있습니까?

이전에 C#, Delphi 등으로 작성하지 않았다면 도움이 되지 않을 것입니다. Windows는 모든 곳에서 생성되지만 먼저 "모든 곳"에 있는 방법을 알아야 합니다.

먼저 C#, WinForms(예:)의 짧은 과정입니다. 인터넷에 그들 중 무리가 있어야합니다. 이것은 포럼의 범위를 약간 벗어납니다.

 

IntegerToString (r) + "]--, " + DoubleToString(LoY[r],4) + " 대신 str + =

그래서 이 빨간 플러스가 이 알고리즘에서 어떤 역할을 하는지는 여전히 미스터리로 남아 있습니다.     "--LoY[" + IntegerToString(r) + "]--, " + DoubleToString(LoY[r],4) + "

결국, 내가 이해한 대로 설명하면 각 반복에서 문자열 연결이 할당 작업 str + = 과 함께 한 곳에서 한 번 발생한다는 것이 분명합니다.

즉, + 기호를 사용하여 문자열 변수 str의 한 요소 값을 동일한 문자열 변수 str의 다른 요소 값과 연결(더하기)합니다.
빨간색 + 는 무엇을 의미합니까? str +="--LoY[" + IntegerToString(r) +" ]--, " + DoubleToString(LoY[r],4) + ", "; . 결국 이 빨간 플러스 사이에 있는 값에 대해 합산 연산이 수행되지 않는 것 같습니다. 내가 옳다면 이 빨간 플러스의 기능은 무엇입니까? 그리고 내가 틀렸다면, 내가 뭔가를 잘못 이해한 것입니다.

그건 그렇고, 귀하의 게시물 노란색 줄에는 이러한 빨간색 더하기가 하나만 있고 + DoubleToString(LoY[r],4) 앞에 서 있습니다. 그리고 그 이후에는 어떤 이유에서인지 그렇지 않습니다.

도와 주셔서 감사합니다.

 
Alexey Viktorov :

컴파일이 어떻게 오류 없이 진행되었는지 명확하지 않고 명확하지 않습니다...


그리고 컴파일러가 str이 정의되지 않았다고 표시하는 것을 보았을 때 사용자 정의 함수의 본문 내부에서 str을 초기화했습니다. 그러나 나는 그것에 대해 말하는 것을 잊었습니다.
그런 다음 어디에서나 사용자 함수에서 str을 삭제하고 사용자 함수의 마지막 줄에 str - eStr 대신 괄호로 묶었습니다.

 
Maxim Kuznetsov :

이전에 C#, Delphi 등으로 작성하지 않았다면 도움이 되지 않을 것입니다. Windows는 모든 곳에서 생성되지만 먼저 "모든 곳"에 있는 방법을 알아야 합니다.

먼저 C#, WinForms(예:)의 짧은 과정입니다. 인터넷에 그들 중 무리가 있어야합니다. 이것은 포럼의 범위를 약간 벗어납니다.

자, 양식이 만들어졌습니다.


내 창과 고문 간의 데이터 교환을 등록하는 방법에 더 관심이 있습니다.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko :

 void PrintArray( double &eArray[])
   {
   string eStr= "" ;
   int eSize= ArraySize (eArray);
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr + = string (i) + ": " + DoubleToString (eArray[i], 4 ) + ", " ;
      }
   Print (eStr);
   }


설명해주셔서 감사합니다.

그건 그렇고, 나는 노란색 플러스를 삭제했고 컴파일러에서 오류가 발생했습니다. 그래서 그들은 이 전체 구조에서 일종의 역할을 합니다. 그러나 무엇 .... 나는 아직도 이해하지 못합니다. 문자열 추가 가 파란색 플러스의 도움으로 독점적으로 수행되는 경우 왜 필요한가요? 그리고이 디자인에서 더 많은 설명으로 판단하면 아무것도 추가하지 않습니다 ..... 내가 틀리지 않는다면.

그리고 string(i)에 대해... 유형 캐스팅에 대해... 저는 다소간 명확합니다. 그것이 무엇인지는 분명하지 않습니다 ..... string이 변수 유형의 이름입니다. i - 배열 요소의 인덱스를 나타내는 변수 카운터. 내가 괄호() 안에 있는 이유는 무엇 입니까? 나는 여전히 괄호가 함수의 표시라고 생각했다. 예를 들어 인쇄( ). 그리고 일부 함수의 괄호 안에는 다양한 데이터가 입력됩니다. 그리고 그것들이 의미하는 바는, 또는 괄호가 i 및 이 모든 구성 (문자열(i))과 관련하여 수행하는 기능은 무엇입니까? 언뜻보기에 변수 i 는 int (integer) 유형이었던 것 같습니다. 그런 다음 변수 i 의 유형을 int에서 string (string)으로 변경했습니다. 그러나 괄호 안에 있는 괄호는 그렇게 생각하는 것을 허용하지 않습니다.

설명 감사합니다.