오류, 버그, 질문 - 페이지 8

 
FEDOR_MQL :

실례가 안된다면 코드를 볼 수 있습니까? 그런 다음 다른 것을 시도하지만 아무 것도 작동하지 않습니다.

또는 저장소의 백분율로 고문 위험에 더 간단하게 추가할 수 있는 다른 옵션이 있습니까? 고맙습니다!

오류 없이 작동하는 코드를 게시했습니다.
 
sergey1294 :

케이스 는 정수 상수, 문자 상수 또는 상수 표현식으로 표시할 수 있습니다. 상수 표현식은 변수나 함수 호출 을 포함할 수 없습니다. switch 문 표현식 은 정수 유형이어야 합니다.
 
Valmars :
케이스 는 정수 상수, 문자 상수 또는 상수 표현식으로 표시할 수 있습니다. 상수 표현식은 변수나 함수 호출을 포함할 수 없습니다. switch 문 표현식 은 정수 유형이어야 합니다.
이것은 이미 처리되었습니다.
 
sergey1294 :
오류 없이 작동하는 코드를 게시했습니다.
글쎄요, 현재 코드의 나머지 부분을 저장하지 않고 불필요한 것으로 버리는 것이 필요했습니다 ...
 

이 형식의 구성이 작동하지 않는 이유가 궁금합니다. 오류가 발생합니다. - '}' - 모든 제어 경로가 값을 반환하는 것은 아닙니다.

 //+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//--- input parameters

input double    Lots= 0.1 ;
input bool      MM = true;
input double    Risk = 10.0 ;

double lots;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (MM) lots = LotSon();       //вызов функции LotSon 
   else lots = Lots;
  }
//+------------------------------------------------------------------+
double LotSon()
{
   double LotMin     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   double LotMax     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   double LotStep    = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );
   double Lot        = AccountInfoDouble ( ACCOUNT_FREEMARGIN )/ 100000.0 * Risk;
  Lot               = MathMin (LotMax, MathMax (LotMin,Lot));
  
   if (Lot < LotMin) Lot = LotMin;
   if (Lot > LotMax) Lot = LotMax;

   if (LotStep == 0.01 ) return ( NormalizeDouble (Lot, 2 ));
   if (LotStep == 0.1 ) return ( NormalizeDouble (Lot, 1 ));
   if (LotStep == 1.0 ) return ( NormalizeDouble (Lot, 0 ));
}
 
sergey1294 :
오류 없이 작동하는 코드를 게시했습니다.
죄송합니다 Sergey, 어떻게 든 놓쳤습니다. 이제 찾았습니다. 이렇게 오래 걸릴 줄 몰랐는데 다들 감사합니다.
 
sergey1294 :

이 형식의 구성이 작동하지 않는 이유가 궁금합니다. 오류가 발생합니다. - '}' - 모든 제어 경로가 값을 반환하는 것은 아닙니다.


이 함수는 무엇을 반환해야 한다고 생각합니까? 제 생각에는 -
 return (Lot);
 
Interesting :
이 함수는 무엇을 반환해야 한다고 생각합니까? 제 생각에는 -

이것이 작동하지 않는 방법입니다


   if (LotStep == 0.01 ) return ( NormalizeDouble (Lot, 2 ));
   if (LotStep == 0.1 ) return ( NormalizeDouble (Lot, 1 ));
   if (LotStep == 1.0 ) return ( NormalizeDouble (Lot, 0 ));

그리고 이것이 작동하는 방식입니다

   if (LotStep == 0.01 )Lot= NormalizeDouble (Lot, 2 );
   if (LotStep == 0.1 ) Lot= NormalizeDouble (Lot, 1 );
   if (LotStep == 1.0 ) Lot= NormalizeDouble (Lot, 0 );

  return (Lot); 

	          
 
sergey1294 :

이것이 작동하지 않는 방법입니다

정확하고 작동하지 않습니다. 물론 누가 신경을 쓰든 상관없지만 저는 개인적으로 항상 return() 이 모든 함수의 끝에 선언되어야 하고 컴파일러가 이를 지원한다고 믿어왔습니다.


추신

개인적으로 MQL4의 Result 변수를 사용하여 반환된 값을 계산하기 시작했습니다. 동시에 함수 코드의 끝에서 return() 을 호출하는 것은 필수이며 코드의 시작/중간에 존재하는 것이 때때로 일종의 break ( 유일한 차이점은 break 자체가 컴파일러에 의해 값 함수 결과를 반환하는 명령으로 인식되지 않는다는 것입니다.

 

이중 유형 변수의 경우 == 조건을 사용하는 것은 올바르지 않습니다. 다음과 같이 비교하는 것이 좋습니다.

 double LotSon()
{
   double LotMin     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   double LotMax     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   double LotStep    = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );
   double Lot        = AccountInfoDouble ( ACCOUNT_FREEMARGIN )/ 100000.0 * Risk;
  Lot               = MathMin (LotMax, MathMax (LotMin,Lot));
  
   if (Lot < LotMin) Lot = LotMin;
   if (Lot > LotMax) Lot = LotMax;

   if ( MathAbs (LotStep- 0.01 )< 0.001 ) return ( NormalizeDouble (Lot, 2 ));
   if ( MathAbs (LotStep- 0.1 )< 0.001 ) return ( NormalizeDouble (Lot, 1 ));
   if ( MathAbs (LotStep- 1.0 )< 0.001 ) return ( NormalizeDouble (Lot, 0 ));
   return (- 1 );
}
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5