[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 494

 
paladin80 :
그런 다음 합계가 어디에 사용되는지 확인하십시오. 아마도 (i=0; i<=total; i++)에 대한 반복 주문 주기가 있을 것입니다.

그건 그렇고, 나는 이미 위에 이 함수의 전체 코드를 추가했습니다:

 void FindOrders()
{
// - 1 - == Инициализация переменных перед поиском ======================================
   int total = OrdersTotal () - 1 ;
   g_type = - 1 ;                                     // На текущий момент у нас нет позиций
// - 1 - == Окончание блока =============================================================
 
// - 2 - == Непосредственно поиск =======================================================
   for ( int i = total; i >= 0 ; i--)                 // Используется весь список ордеров
       if ( OrderSelect (i, SELECT_BY_POS))           // Убедимся, что ордер выбран
         if ( MathFloor ( OrderMagicNumber ()) == i_magicNumber && // Ордер открыт
             OrderSymbol () == Symbol ())             // ..экспертом, который прикреплен к..
         {                                         // ..текущей паре
            g_ticket = OrderTicket ();               // Запишем данные ордера
            g_type = OrderType ();
         } 
// - 2 - == Окончание блока =============================================================
}

내가 알기로는 이렇게 쓰지 않으려면 다음과 같이 하는 것이 더 논리적일 것입니다.

 int total = OrdersTotal () - 1 ;

다음과 같이 루프를 정의하십시오.

 for (i=total; i>= 1 ; i--)

권리? 단지 위치 개수의 카운터가 0부터 시작 하면 어떻게 든 잘 인식되지 않는다는 것뿐입니다. 논리적이지 않으므로 왜 자신을 혼란스럽게 만드십시오 ..

 
hoz :

그건 그렇고, 예 .. 이미 위에 이 함수의 전체 코드를 추가했습니다.

내가 알기로는 이렇게 쓰지 않으려면 다음과 같이 하는 것이 더 논리적일 것입니다.

다음과 같이 루프를 정의하십시오.

권리? 단지 위치 개수의 카운터가 0부터 시작하면 어떻게 든 잘 인식되지 않는다는 것뿐입니다. 논리적이지 않으므로 왜 자신을 혼란스럽게 만드십시오 ..

주문을 열거하려면 1이 아닌 0이 필요합니다.

 for (i=total; i>= 0 ; i--)

전문가가 일련의 주문이 정렬되고 있다고 설명하면 예, 더 큰 숫자로 정렬을 시작하는 것이 좋습니다. 배열에서 첫 번째 요소의 인덱스는 0(영)이므로 최대 1이 아니며 이러한 이유로 OrdersTotal()뿐만 아니라 OrdersTotal( ) - 1이 필요합니다.

내 주문은 다음과 같이 정렬됩니다.

 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 
paladin80 :

주문을 열거하려면 1이 아닌 0이 필요합니다.

전문가가 일련의 주문이 정렬되고 있다고 설명하면 예, 더 큰 숫자로 정렬을 시작하는 것이 좋습니다. 배열에서 첫 번째 요소의 인덱스는 0(영)이므로 최대 1이 아니며 이러한 이유로 OrdersTotal()뿐만 아니라 OrdersTotal() - 1이 필요합니다.

매우 흥미로운. 그리고 먼저 교과서를 펼쳐서 그 해답을 찾으려고 노력했습니다. 그런 다음 https://book.mql4.com/ru/trading/ordermodify 가 자습서에서 열거가 어떻게 수행되었는지 확인했습니다.

 for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер

이것이 나를 혼란스럽게 한 요소입니다 ...

 
hoz :

매우 흥미로운. 그리고 먼저 교과서를 펼쳐서 그 해답을 찾으려고 노력했습니다. 그런 다음 https://book.mql4.com/ru/trading/ordermodify 튜토리얼에서 열거가 어떻게 수행되었는지 확인했습니다.

이것이 나를 혼란스럽게 한 요소입니다 ...


다음 줄을 눈치채셨나요?

   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер     
   {      
     if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) // Если есть следующий
//
//Тут компенсируется отсутствие нуля с i-1
 
borilunad :


다음 줄을 눈치채셨나요?

아니요. 하지만 쓰기에는 어쩐지 비뚤어졌다. 교과서를 비판하고 싶지는 않지만 .. 0 부터 세는 것이 훨씬 더 적절하고 -1 부터 세지 않습니다. 그렇지 않으면 -30 부터 시작하는 것이 가능했을 것입니다 ...

위에서 언급한 paladin80 처럼 -N 의 경우 0 부터 배열의 값이 가장 적절하게 간주됩니다.

 
hoz :

아니요. 그러나 쓰기에는 어쩐지 비뚤어졌다. 교과서를 비판하고 싶지는 않지만 .. 0 부터 세는 것이 훨씬 더 적절하고 -1 부터 세지 않습니다. 그렇지 않으면 -30 부터 시작하는 것이 가능했을 것입니다 ...

위에서 언급한 paladin80 처럼 -N 의 경우 0 부터 배열의 값이 가장 적절하게 간주됩니다.


이제 논리적으로 생각하십시오!

i = 0이면 1에서 OrderTotal()까지, 즉 0+1에서 OrderTotal() - 1+1(+1, i ++이 for의 끝에 있으므로 statement) 그리고 교과서에서는 1부터 OrderTotal()까지만 쓰여있고, 2에서 OrderTotal()+1까지 셀 수 없도록 교과서 작성자 는 OrderSelect 함수 에서 i 에 -1을 추가했습니다. . 당연하게도?

그건 그렇고, 얼마나 많은 프로그래머가 거의 많은 철자 옵션을 만날 것입니다. 모든 사람은 자신의 비전, 자신의 손글씨를 가지고 있습니다!

 
hoz :

아니요. 하지만 쓰기에는 어쩐지 비뚤어졌다. 교과서를 비판하고 싶지는 않지만 .. 0 부터 세는 것이 훨씬 더 적절하고 -1 부터 세지 않습니다. 그렇지 않으면 -30 부터 시작하는 것이 가능했을 것입니다 ...

위에서 언급한 paladin80 처럼 -N 의 경우 0 부터 배열의 값이 가장 적절하게 간주됩니다.

주문을 정렬하는 방법에 관심이 있는 경우 다음 계획을 제안할 수 있습니다.

 if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) // ордер выбирается среди открытых
                                                     // и отложенных ордеров
      {   if ( OrderSymbol ()!= Symbol ()) continue ;     // если не наш символ, то уходим
         if ( OrderMagicNumber ()!= 555 ) continue ;     // если не наш магик номер, то уходим
                                                     // можно поставить любые другие фильтры
         // ... ваши вычисления
      }
   }
}
 
hoz :

아니요. 하지만 쓰기에는 어쩐지 비뚤어졌다. 교과서를 비판하고 싶지는 않지만 .. 0 부터 세는 것이 훨씬 더 적절하고 -1 부터 세지 않습니다. 그렇지 않으면 -30 부터 시작하는 것이 가능했을 것입니다 ...

위에서 언급한 paladin80 처럼 -N 의 경우 0 부터 배열의 값이 가장 적절하게 간주됩니다.

나는 동일한 관점을 고수합니다. 교과서는 특정 사람이 작성했습니다. 이것은 사물에 대한 그의 관점(주문 열거 주기의 조직)이며 항상 많은 올바른 솔루션이 있습니다. 맞는 견해도 있지만 동시에 올바르고 우아한 견해도 있습니다... :)
 
borilunad :


이제 논리적으로 생각하십시오!

i = 0이면 1에서 OrderTotal()까지, 즉 0+1에서 OrderTotal() - 1+1(+1, i ++이 for의 끝에 있으므로 statement) 그리고 교과서에서는 1부터 OrderTotal()까지만 쓰여있고, 2에서 OrderTotal()+1까지 셀 수 없도록 교과서 작성자는 OrderSelect 함수에서 i 에 -1을 추가했습니다. . 당연하게도?

물론 이해할 수 있습니다. 이제서야 주문의 존재가 다음과 같이 분석되는 것을 보지 못했습니다.

 if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true)

보통은 ==true 없이 ... 이 순간도 좋았습니다. 다른 전문가들에게서 그런 기술을 본 적이 없다는 것이 흥미롭지 만. 논리를 이해하지만 여전히.

 
몇 바 전에 움직인 값을 계산하는 방법을 알려주십시오. 즉, 역사에서? 코드에서 어떻게 보일 것인지를 의미합니다. 그냥 움직이는 거라면
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
, 그리고 만약 -5 바 전이라면?