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

 
Sfinks35 :
안녕하세요!
지금 바로 완료된 것 같습니다.

그러나 컴파일할 때 다음과 같은 경고가 표시됩니다. 라인의 유형 변환으로 인한 데이터 손실 가능성 :
인덱스 = GetPatt5barsDN(인덱스);

함수 헤더(및 함수 자체)에는 컴파일 오류가 없습니다.

 double low3 = 0 ;
   int index = 0 ;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print ( "low3= " , low3);
   Print ( "index= " , index);
 

안녕하세요, 질문이 있습니다. 최적화할 때 특정 패스를 어떻게든 건너뛸 수 있습니까?

예를 들어, 로봇을 2 MA로 최적화합니다. 각각에 대해 10에서 시작하여 1000으로 끝나는 빠르고 느린

느린 기간이 빠른 기간보다 짧은 경우 패스를 건너뛰려면 어떻게 해야 합니까?

 
Roman Sharanov :

안녕하세요, 질문이 있습니다. 최적화할 때 특정 패스를 어떻게든 건너뛸 수 있습니까?

예를 들어, 로봇을 2 MA로 최적화합니다. 10에서 시작하여 각각에 대해 1000으로 끝나는 빠르고 느린

느린 기간이 빠른 기간보다 짧은 경우 패스를 건너뛰려면 어떻게 해야 합니까?

이 경우 초기화 시 return(INIT_PARAMETERS_INCORRECT);

 
Igor Zakharov :

이 경우 초기화 시 return(INIT_PARAMETERS_INCORRECT);

고맙습니다

 

안녕하세요. 누가 말할 것인가. 3개의 서로 다른 TS, 3개의 서로 다른 Expert Advisors, 서로 다른 쌍의 3개의 서로 다른 매직 넘버. 그러나 그들은 공통 속성을 가지고 있습니다 - 특정 조건( 주문 수 및 작은 이익)에 도달하면 주문을 마감합니다(OrderClose() 함수를 통해). 테스터에는 문제가 없지만 실제로는 OrderClose() 함수가 쌍 중 하나에서 트리거되면 이 함수(OrderClose())는 조건이 충족되는지 여부에 관계없이 다른 쌍에서 트리거됩니다. 아니다. 이유는 무엇입니까? 아마도 사용자 정의 Close() 함수에서?

다음은 닫는 조건과 사용자 정의 Close() 함수입니다.

 if (CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
       int     i;
       int     total    = OrdersTotal ();
       double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
       if ((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for (i = total- 1 ; i >= 0 ; i--)
         {
             if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
            {
               if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               { 
                   if (OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for (i = total- 1 ; i >= 0 ; i--)
         {
             if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
            {
               if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               { 
                   if (OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = - 1 ;
   int k      = OrdersTotal ();
   
   for (i = k - 1 ; i >= 0 ; i--)
   {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {
         if ((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if (OrderTicket() != ticket) 
       if (! OrderSelect (ticket, SELECT_BY_TICKET))
         Print ( "Ошибка в выборе ордеров!" );

   while ( true )
   {
       int   error;
       bool result = true ;
      
       if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), Slippage, 0 );
         
       if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), Slippage, 0 );
         
       if (result != TRUE) 
      { 
         error = GetLastError (); 
             Print ( "LastError = " , error); 
      }
       else 
      { 
         error = 0 ; 
      }
       if (error == 135 ) 
         RefreshRates();
       else break ;
   } 
}

 
Youri Lazurenko :

안녕하세요. 누가 말할 것인가. 3개의 서로 다른 TS, 3개의 서로 다른 Expert Advisors, 서로 다른 쌍의 3개의 서로 다른 매직 넘버. 그러나 그들은 공통 속성을 가지고 있습니다 - 특정 조건( 주문 수 및 작은 이익)에 도달하면 주문을 마감합니다(OrderClose() 함수를 통해). 테스터에는 문제가 없지만 실제로는 OrderClose() 함수가 쌍 중 하나에서 트리거되면 이 함수(OrderClose())는 조건이 충족되는지 여부에 관계없이 다른 쌍에서 트리거됩니다. 아니다. 이유는 무엇입니까? 아마도 사용자 정의 Close() 함수에서?

다음은 닫는 조건과 사용자 정의 Close() 함수입니다.

예상대로 먼저 OrderSelect()를 통해 열거하여 주문을 확인합니다. 주문의 기호와 매직 번호를 제어한 다음 OrderCloseX()에서 주문을 닫고 다시 주문을 반복하지만 어떤 이유로 제어하지 않습니다. OrderSelect()의 기호 및 매직 번호

전체 코드를 다시 작성하지 않으려면 OrderCloseX()에 추가해야 한다고 생각합니다.

 if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
 
Igor Makanu :

예상대로 먼저 OrderSelect()를 통해 열거하여 주문을 확인합니다. 주문의 기호와 매직 번호를 제어한 다음 OrderCloseX()에서 주문을 닫고 다시 주문을 반복하지만 어떤 이유로 제어하지 않습니다. OrderSelect()의 기호 및 매직 번호

전체 코드를 다시 작성하지 않으려면 OrderCloseX()에 추가해야 한다고 생각합니다.

고맙습니다. 내가 고칠게. 이미 수정되었습니다. 아마도 이것이 이유일 것입니다. OrderCloseX() 함수가 쌍 중 하나에서 호출된 다음 다른 모든 쌍과 마법에서 작동하는 것으로 나타났습니다. 그럴 수도, 그럴 수도 있습니다. 다시 한번 감사합니다.

 
Igor Makanu :

숫자 - 사전 정의된 변수

나는 또한이 기능을 사용하기로 결정했습니다. 사무실의 문자 수가 5이고 예를 들어 1.00000이고 마지막 값이 0이면 5자가 아니라 0을 반환할 수 있다는 것을 읽었습니다. 예를 들어 , 숫자는 다음과 같을 것입니다. 1.24700은 소수점 이하 3자리를 반환하지만 그 중 5자리가 있어야 합니다. 사실인가요?

 
Seric29 :

나는 또한이 기능을 사용하기로 결정했습니다. 사무실의 문자 수가 5이고 예를 들어 1.00000이고 마지막 값이 0이면 5자가 아니라 0을 반환할 수 있다는 것을 읽었습니다. 예를 들어 , 숫자는 다음과 같을 것입니다. 1.24700은 소수점 이하 3자리를 반환하지만 그 중 5자리가 있어야 합니다. 사실인가요?

숫자는 NormalizeDouble과 함께 사용됩니다.

https://docs.mql4.com/en/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
갑자기 모든 터미널이 브로커와 연락이 끊겼습니다. 모든 곳에서 연결 실패 오류.
로그인 창에서 서버는 선택을 허용하지 않으며 비어 있습니다. 그 전에는 아무 것도 바꾸지 않았고, 아무것도 설치하지 않았고, 아무것도 지우지 않았습니다.
이유는 무엇입니까?