포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1134

 
Alexandr Nevadovschi :

친애하는 프로그래머 여러분, 이 문제에 대해 초보자를 도와주시기 바랍니다.

어드바이저는 일정 시간이 지나면 지속적으로 매수 및 매도 주문을 엽니다. 마지막 주문을 연 후 이전 주문을 모두 수정하는 데 필요합니다(음, 이미 구체적인 경우 마지막 주문이 마감되면 모든 이전 주문이 이익을 얻습니다. 즉, 마지막 구매와 이전 판매가 이전 손절매 는 마지막 이익실현 수준으로 설정되고,

이전 구매인 경우 해당 테이크 이익은 마지막 테이크 이익 수준에 배치됩니다. 글쎄, 등등. 요점은 마지막 주문의 이익실현이 발생하면 모든 주문을 마감해야 한다는 것입니다.)

구현 방법을 이해하기 어렵지만 명확하게 설명했으면 좋겠습니다. 미리 감사드립니다.

열려 있는 모든 주문을 검토하고 수정할 수 있지만 마지막 주문을 건너뛰는 방법은 무엇입니까?

이 모든 것에서 가장 중요한 것은 어떤 일이 일어나야 하는지를 이해하는 것입니다.

"라스트 오더"란 무엇입니까? 마지막 영업시간은? 아니면 시가 수준으로?

그리고 "마지막" 주문을 BUY로 계산하고 가격이 yuh로 간다면? 또는 그 반대의 경우 마지막 것은 SELL이고 가격은 북쪽으로 향하고 있습니까? 그렇다면 어느 것이 마지막으로 간주되어야 합니까? 이것이 바로 계획을 실행하기 위해 이해해야 하는 것입니다.‌

 

안녕하세요. 배열에 얼마나 많은 요소가 있는지 미리 알지 못한다면 배열이 각 새 요소와 함께 커지도록 배열을 선언하는 방법은 무엇입니까?

더 명확하게 하기 위한 예:

double HighA[]; // ??????????????????

for ( int i= 0 ; i< 1000 ; i++)
{
if (A[i]<B[i])
HighA[i]=A[i];
}
Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));

 
Nauris Zukas :

안녕하세요. 배열에 얼마나 많은 요소가 있는지 미리 알지 못한다면 배열이 각 새 요소와 함께 커지도록 배열을 선언하는 방법은 무엇입니까?

더 명확하게 하기 위한 예:

double HighA[]; // ??????????????????

for ( int i= 0 ; i< 1000 ; i++)
{
if (A[i]<B[i])
HighA[i]=A[i];
}
Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));

문서를 더 자주 읽어야 합니다.
ArrayResize - Операции с массивами - Справочник MQL4
ArrayResize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayResize - Операции с массивами - Справочник MQL4
 
Alexey Viktorov :
문서를 더 자주 읽어야 합니다.

읽고 시도했지만 "범위를 벗어난 배열" 오류가 발생합니다. 예를 들면 다음과 같습니다.

       double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines);
            HighA[i]=A[i];
           }
        }
       Print (">>>>>>>>>>>.. ArraySize (HighA)= ", ArraySize (HighA));
 
Nauris Zukas :

읽고 시도했지만 "배열이 범위를 벗어남" 오류가 발생했습니다. 예를 들면 다음과 같습니다.

       double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines);
            HighA[i]=A[i];
           }
        }
       Print (">>>>>>>>>>>.. ArraySize (HighA)= ", ArraySize (HighA));

‌A[i] < B[i] 조건이 충족되지 않으면 배열의 크기 가 변경되지 않고 루프 카운터가 증가합니다. 그렇기 때문에 넘어선...

그래서 시도

       double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
             int size = ArraySize (HighA);
             ArrayResize (HighA, size+ 1 );
            HighA[ size ]=A[i];
           }
        }
       Print (">>>>>>>>>>>.. ArraySize (HighA)= ", ArraySize (HighA));


 
Alexey Viktorov :

‌A[i] < B[i] 조건이 충족되지 않으면 배열의 크기가 변경되지 않고 루프 카운터가 증가합니다. 그렇기 때문에 넘어선...

그래서 시도

       double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
             int size = ArraySize (HighA);
             ArrayResize (HighA, size+ 1 );
            HighA[ size ]=A[i];
           }
        }
       Print (">>>>>>>>>>>.. ArraySize (HighA)= ", ArraySize (HighA));


고맙습니다! 이제 모든 것이 작동합니다!
 
Nauris Zukas :

읽고 시도했지만 "범위를 벗어난 배열" 오류가 발생합니다. 예를 들면 다음과 같습니다.

       double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines);
            HighA[i]=A[i];
           }
        }
       Print (">>>>>>>>>>>.. ArraySize (HighA)= ", ArraySize (HighA));

글쎄, 더 빨리 작동합니다.

   int countHlines= 0 ;
   double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines);
            HighA[countHlines- 1 ]=A[i];
           }
        }
       Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));


// Вариант №2
   int countHlines=- 1 ;
   double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines+ 1 );
            HighA[countHlines]=A[i];
           }
        }
       Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));
 
Vitaly Muzichenko :

글쎄, 더 빨리 작동합니다.

   int countHlines= 0 ;
   double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines);
            HighA[countHlines- 1 ]=A[i];
           }
        }
       Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));


// Вариант №2
   int countHlines=- 1 ;
   double HighA[];
       for ( int i= 0 ; i< 1000 ; i++)
        {
         if (A[i]<B[i])
           {
            countHlines++;
             ArrayResize (HighA,countHlines+ 1 );
            HighA[countHlines]=A[i];
           }
        }
       Print ( ">>>>>>>>>>>..ArraySize(HighA)= " , ArraySize (HighA));
감사합니다! ArraySize 로 인해 더 빨리 실행될 것입니까? 어떻게 든 속도가 느려집니까?
 
Nauris Zukas :
감사합니다! ArraySize로 인해 더 빠르게 작동합니다. 속도가 느려지나요?
약간, 하지만 이해할 수 있고 오류에 대해 보장됩니다.
 
Alexey Viktorov :
약간, 하지만 이해할 수 있고 오류에 대해 보장됩니다.
고맙습니다!