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

 
Vitaly Muzichenko :

여기 기능에는 최신 시간, 즉 마지막 시간에 대한 검색 및 선택이 있습니다.

다음으로, 우리는 하나를 선택했고 그것을 iBarShift 함수 (sym, tf, oot , true )로 대체합니다.

함수는 시간별로 막대 번호를 반환합니다. 모든 것.

유감스럽게도 확인할 수는 없지만 사용했을 때 I. Kim에서 여기에 게시된 모든 기능처럼 완벽하게 작동했습니다.

주문을 열 때 나에게 티켓이 할당되고 기능에서 일련 번호가 선택되면 아무 것도 아닌가요?
 
Вадим Мотеюнас :
if ( iOpen [ 0 ] != time_open ) 'iOpen' - 선언되지 않은 식별자 를 가리키는 오류를 씁니다.

나는 약간 잘못된 것을 썼습니다. 약간은 다른 방향으로 생각했습니다. iOpen[0]을 Open[0]으로 변경합니다. 수정됨 . 간단하게 말하지만. 오픈 시 바 오픈 시간을 기억하며, 이 바는 주문을 받지 않습니다.

 

또한 기능 설명에는 다음과 같이 나와 있습니다.

고려할 위치 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값 - NULL 은 현재 시장 상품을 의미합니다.
  • tf - 기간. 기본값 - 0 은 현재 기간을 의미합니다.
  • op - 거래 작업 , 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
외부 설정? 첫 번째 스페셜 전에 먼저 발표해야 합니다. 즉, NumberOfBarOpenLastPos() 함수 자체에 대한 설명에 있다는 사실만으로는 충분하지 않습니까?

 
Вадим Мотеюнас :

또한 기능 설명에는 다음과 같이 나와 있습니다.

고려할 위치 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값 - NULL 은 현재 시장 상품을 의미합니다.
  • tf - 기간. 기본값 - 0 은 현재 기간을 의미합니다.
  • op - 거래 작업 , 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
외부 설정? 첫 번째 스페셜 전에 먼저 발표해야 합니다. 즉, NumberOfBarOpenLastPos() 함수 자체에 대한 설명에 있다는 사실만으로는 충분하지 않습니까?

충분한. 외부 매개변수에 필요한 값을 입력할 수 있습니다. Magic, 우리가 찾고 있는 위치는 BUY(0) 및 SELL(1)에 의해 필요한 경우 BUY에 의해서만 가능합니다. 그런 다음 "-1"을 씁니다.

 
Konstantin Nikitin :

나는 약간 잘못된 것을 썼습니다. 약간은 다른 방향으로 생각했습니다. iOpen[0]을 Open[0]으로 변경합니다. 수정됨 . 간단하게 말하지만. 오픈 시 바 오픈 시간을 기억하며, 이 바는 주문을 받지 않습니다.

NumberOfBarOpenLastPos가 -1을 반환하기 때문에 비주문을 열기 전 조건 if(NumberOfBarOpenLastPos(Symbol(),0,-1,-1)>0)와 같이 많은 주문이 열립니다.

 
Вадим Мотеюнас :

NumberOfBarOpenLastPos가 -1을 반환하기 때문에 비주문을 열기 전 조건 if(NumberOfBarOpenLastPos(Symbol(),0,-1,-1)>0)와 같이 많은 주문이 열립니다.

주문을 찾고 있다면 전체 버전의 기능, 즉 위치뿐만 아니라 주문별로 검색할 수 있는 기능을 사용해야 합니다.

 int NumberOfBarOpenLastPos( string sym= "" , int tf= 0 , int op=- 1 , int mn=- 1 )
  {
   datetime oot= 0 ; // Инициализируем нулём
   int       i,k= OrdersTotal ();

   if (sym== "" ) sym= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()==sym)
           {
             if ( OrderType ()< 6 ) // Ищем и по ордерам
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if (oot< OrderOpenTime ()) oot= OrderOpenTime (); // Ищем последнее
                    }
                 }
              }
           }
        }
     }
   return ( iBarShift (sym, tf, oot, true ));
  }
 
Vitaly Muzichenko :

충분한. 외부 매개변수에 필요한 값을 입력할 수 있습니다. Magic, 우리가 찾고 있는 위치는 BUY(0) 및 SELL(1)에 의해 필요한 경우 BUY에 의해서만 가능합니다. 그런 다음 "-1"을 씁니다.

테스터에서 시작할 때 당연히 미결 주문이 없으므로 -1이 반환될 수 있으므로 if(NumberOfBarOpenLastPos( Symbol() ,0,-1,-1)>0) 조건이 충족되지 않습니까?

 
Вадим Мотеюнас :

테스터에서 시작할 때 당연히 미결 주문이 없으므로 -1이 반환될 수 있으므로 if(NumberOfBarOpenLastPos(Symbol(),0,-1,-1)>0) 조건이 충족되지 않습니까?

지금 확인하겠습니다.

 
Vitaly Muzichenko :

주문을 찾고 있다면 전체 버전의 기능, 즉 위치뿐만 아니라 주문별로 검색할 수 있는 기능을 사용해야 합니다.

어쨌든 -1 반환

 
Вадим Мотеюнас :

어쨌든 -1 반환

잘 작동합니다!

스크린샷에서 볼 수 있듯이 두 위치, 즉 11번째 막대에서 후자를 선택했습니다.


확인 코드:

 void OnTick () 
  {
   ...
   Comment ( NumberOfBarOpenLastPos( "" , 0 ,- 1 ,- 1 ) );
   ...
  }

int NumberOfBarOpenLastPos( string sym= "" , int tf= 0 , int op=- 1 , int mn=- 1 )
  {
   datetime oot= 0 ; // Инициализируем нулём
   int       i,k= OrdersTotal ();

   if (sym== "" ) sym= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()==sym)
           {
             if ( OrderType ()< 6 ) // Ищем и по ордерам
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if (oot< OrderOpenTime ()) oot= OrderOpenTime (); // Ищем последнее
                    }
                 }
              }
           }
        }
     }
   return ( iBarShift (sym, tf, oot, true ));
  }