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

 

그런 다음 그는 메시지를 주석이 아니라 개체로 출력해야하지만 더 크게 만들어야합니다 ...

그러므로 사람은 결코 스스로 생각하는 법을 배우지 못할 것입니다.

 
artmedia70 :
다시 시작하면 변수가 다시 초기화된다는 것을 기억하십시오. 따라서 이 접근 방식은 테스터에게는 허용되지만 실제 거래에는 적합하지 않습니다.


정보 감사합니다 그럼 어떻게 해야 하나요? GV에서 가치를 망치려면??? 아니면 실제 다른 옵션이 있습니까 ...

 
ALXIMIKS :

정보 감사합니다 그럼 어떻게 해야 하나요? GV에서 가치를 망치려면??? 아니면 실제 다른 옵션이 있습니까 ...
글로벌 플래그는 잊어버리세요. 플래그가 필요한 이유와 플래그가 나타내는 내용을 모르겠습니다. 그래서 상황을 말씀드리기 어렵습니다.
 
Zolotai :
여러분, 지표를 말하지 마십시오. 일반적으로 두 개의 이동 평균을 기반으로 합니다. 그리고 교차점에서 화살표 형태로 방향을 제시합니다. 찾을 수 없습니다.
i-PSI@MA_시그널 여기에서 .
 
ALXIMIKS :

좋은 하루입니다. 어렵지 않다면 초보자에게 다음과 같이 말하십시오.

1) 특정 변수의 값과 동일한 크기의 배열을 선언하는 방법은 무엇입니까? (i=7이면 배열 double Muss[7] 등을 선언합니다);

이미 대답했다

2) 조건이 항상 false인 경우 사용자 정의 함수의 배열이 선언되고 적절하게 사용된 것으로 간주되는 이유는 무엇입니까?

동안 (거짓){

경고("아아아아아아");

정적 이중 Buf_max[9000000];

정적 이중 Buf_min[9000000];}

static으로 선언되어 있기 때문입니다. MQL에서 모든 정적 변수 는 init() 함수를 호출하기 전에 초기화됩니다.

3) 사용자 정의 함수와 일반적으로 단순 배열과 정적 배열 간에 차이가 있습니까?

배열이 선언된 함수를 처음 입력할 때 배열이 초기화될 뿐입니다. 그러나 종료 시 이전에 크기를 변경한 경우 새 값이 재설정되지 않으며 다음에 함수가 호출될 때 배열은 마지막에 남겨둔 크기와 동일합니다.

저것들. 대체로 단순과 정적의 차이는 초기화 시점에만 있습니다.

 
"1" --> 오류로 무엇을 할 수 있습니까? (오류는 없지만 결과는 알 수 없음) ?
 

여기에서 보류 중인 주문을 삭제하는 기능을 작성했습니다. 그러나 어떤 이유로 삭제되지 않습니다. 코드는 다음과 같습니다.

 void DeletePendingOrders()
{
    int NumberOfTry = 0 ,
        err,
        ticket;

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
      if (! OrderSelect (i, SELECT_BY_POS,MODE_TRADES)) continue ;
      if (OrderMagicNumber() != i_magic) continue ;
      if (OrderSymbol() != Symbol ()) continue ;
      if (OrderType() > 1 )
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3 )
         {
            while (!IsTradeAllowed()) Sleep ( 5000 );
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3 ;
            else
                err = GetLastError ();
      
            if (err > 0 )
            { 
              Print (NumberOfTry, " #" ,ticket, " Error modifing order: (" , err , ") " );
              Sleep ( 5000 ); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

왜 제대로 작동하지 않습니까? 다르게 다시 작성할 수 있다는 것은 분명하지만 이 코드가 목적을 달성하지 못하는 이유를 이해하고 싶습니다.

 
hoz :

여기에서 보류 중인 주문을 삭제하는 기능을 작성했습니다. 그러나 어떤 이유로 삭제되지 않습니다. 코드는 다음과 같습니다.

왜 제대로 작동하지 않습니까? 다르게 다시 작성할 수 있다는 것은 분명하지만 이 코드가 목적을 달성하지 못하는 이유를 이해하고 싶습니다.

특히 코드를 변경하지 않도록 한 줄을 삽입합니다.

             while (!IsTradeAllowed()) Sleep ( 5000);
            err= 0 ;
             if (OrderDelete(ticket, Red))
                NumberOfTry = 3 ;
             else
                err = GetLastError ();
      
             if (err > 0 )
 
Sepulca :

특히 코드를 변경하지 않도록 한 줄을 삽입합니다.


그리고 그것은 우리에게 무엇을 줄 것입니까? 이전과 같이 주문이 마감되지 않고 오류가 없습니다.

코드 변경:

 void DeletePendingOrders()
{
    int NumberOfTry = 0 ,
        err,
        ticket;

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
      if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
      if (OrderMagicNumber() != i_magic) continue ;
      if (OrderSymbol() != Symbol ()) continue ;
      if (OrderType() > 1 )
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3 )
         {
            while (!IsTradeAllowed()) Sleep ( 5000 );
                err = 0 ;
              Print ( "IsTradeAllowed() = " , IsTradeAllowed());
              Print ( "err = " , err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3 ;
                Print ( "NumberOfTry" , NumberOfTry);
            }
            else
            {
                err = GetLastError ();
                Print ( "err = " , err);
            }
      
            if (err > 0 )
            { 
              Print (NumberOfTry, " #" ,ticket, " Error modifing order: (" , err , ") " );
              Sleep ( 5000 ); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

로그의 필수 부분:

 2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 05  Perevorot EURUSD,M5: modify # 10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 05  Perevorot EURUSD,M5: open # 10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: NumberOfTry3
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: delete # 9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: err = 0
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: close # 3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: close # 4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: close # 5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09 . 11 22 : 24 : 19     2012.01 . 02 08 : 02  Perevorot EURUSD,M5: close # 6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
주문이 삭제된 것으로 나타났습니다. 하지만 하나. 그리고 또 하나가 있었습니다. 제거되지 않았습니다. 주기는 모든 주문에 적용됩니다.
 

NumberOfTry 변수를 관찰하십시오.

각 티켓 에 대해 0으로 설정해야 합니다. 그렇지 않으면 3 이상의 값이 할당되고 모든 티켓에 대해 추가 조건이 충족되지 않습니다.

단 하나만 조건을 만족할 것입니다