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

 
Aleksei Stepanenko :

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

그리고 어디에서나 불러

Alexey, 오랫동안 침묵했는데 그냥 가만히 볼 수가 없어요... 이 경우 명시적 타입 캐스팅이 훨씬 쉽고 저렴하다면 IntegerToString() 함수를 사용하는 이유는 ...

eStr+=( string )i+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
 

어, 습관 :)

 
Aleksei Stepanenko :

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

그리고 어디에서나 불러

귀하의 이해와 설명에 진심으로 감사드립니다. 나는 나를 위해 공부하고 새로운 정보를 이해하기 위해 휴식을 취합니다.

 
Alexey Viktorov :

Alexey, 오랫동안 침묵했는데 그냥 가만히 볼 수가 없어요... 이 경우 명시적 타입 캐스팅이 훨씬 쉽고 저렴하다면 IntegerToString() 함수를 사용하는 이유는 ...

그리고 귀중한 추가 정보에 감사드립니다.

 
어디를 봐야 하는지 알려주세요. 고문을 위한 외부 창 만들기에 대해 읽어보세요.
 
MakarFX :
어디를 봐야 하는지 알려주세요. 고문을 위한 외부 창 만들기에 대해 읽어보세요.

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

tcl.Eval( "toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko :

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

그리고 어디에서나 불러

별도의 커스텀 배열 인쇄 기능을 만들기로 했습니다. 또는 이미 수행한 것( PrintArray() )을 사용하지 마십시오.

내가 한 것?

1. Kovalev의 자습서에 작성된 대로 OnTick()... 함수 내부에 사용자 지정 PrintArray() 함수에 대한 호출을 배치했습니다.

2. PrintArray() 함수의 본문을 OnTick() 함수 외부에 배치했습니다... Kovalev의 자습서에 작성된 대로.

이 함수 본문의 모든 새 변수는 지역적입니다. 그것들은 이 함수 내에서 선언되고 초기화됩니다.

 int P1= 0 ;
double LoY[ 31 ];
void OnTick ()
{
if (P1== 0 )
{
for ( int r= 0 ; r< 31 ;r++)
{
LoY[r]= 1.6104 +(r* 2 )* 0.0001 ;
P1= 1 ;
}
}
//*************************************************************  Б Л О К    N 2
for ( int x= 0 ; x< 31 ;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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);
   }

나는 당신의 기능을 변경하지 않았습니다. 그러나 컴파일러는 어떤 이유로 6개의 오류를 제공합니다. 그리고 그들은 모두 사용자 정의 기능에 속합니다.

제가 뭘 잘못했는지 알려주시면 정말 감사하겠습니다.
고맙습니다.

 
ANDREY :

별도의 커스텀 배열 인쇄 기능을 만들기로 했습니다. 또는 이미 수행한 것( PrintArray() )을 사용하지 마십시오.

내가 한 것?

1. Kovalev의 자습서에 작성된 대로 OnTick()... 함수 내부에 사용자 지정 PrintArray() 함수에 대한 호출을 배치했습니다.

2. PrintArray() 함수의 본문을 OnTick() 함수 외부에 배치했습니다... Kovalev의 자습서에 작성된 대로.

이 함수 본문의 모든 새 변수는 지역적입니다. 그것들은 이 함수 내에서 선언되고 초기화됩니다.

나는 당신의 기능을 변경하지 않았습니다. 그러나 컴파일러는 어떤 이유로 6개의 오류를 제공합니다. 그리고 그것들은 모두 사용자 정의 기능에 속합니다.

제가 뭘 잘못했는지 알려주시면 정말 감사하겠습니다.
고맙습니다.

정확히 기억은 안나는데 너무 게을러서 확인이 안되네요. 대괄호를 추가해 보세요.

 void PrintArray( double &eArray [] )
 

Aleksei Stepanenko :

 string str= "" ;

for ( int r= 0 ; r< 31 ;r++)
   {
   LoY[r]= 1.6104 +r* 0.0001 ;
   str+= "--LoY[" + IntegerToString (r)+ "]--, " + DoubleToString (LoY[r], 4 )+ ", " ;
   }
Print (str);


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

첫 번째 반복에서 문자열 변수 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) + "

도와 주셔서 감사합니다.

 
Alexey Viktorov :

정확히 기억은 안나는데 너무 게을러서 확인이 안되네요. 대괄호를 추가해 보세요.

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

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

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