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

 
FEDOR_MQL :

그리고 이 개발 단계에서 매개변수, 함수 호출 및 함수 자체에 컴파일 오류가 표시되어야 합니다. 그렇다면 왜? 그것은 나에게 오류를 보여줍니다

예, 실제로 어떤 이유로 인해 오류가 발생하지 않아야 하지만 오류가 있습니다. 이것만은 개발자들에게 주의를 당부 드리고, 이렇게 다시 해보니 에러는 없는데 스위치 스위치를 사용하면 여전히 에러가 납니다.

 //+------------------------------------------------------------------+
#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;
   // Вариант первый
   /*
  switch(LotStep)
  {
   case 0.01: Lot=NormalizeDouble(Lot,2);break;
   case 0.1 : Lot=NormalizeDouble(Lot,1);break;
   case 1.0 : Lot=NormalizeDouble(Lot,0);break;
  }
  */
   // Вариант второй
   if (LotStep == 0.01 )Lot= NormalizeDouble (Lot, 2 );
   if (LotStep == 0.1 ) Lot= NormalizeDouble (Lot, 1 );
   if (LotStep == 1.0 ) Lot= NormalizeDouble (Lot, 0 );
   // Вариант третий
   // if (LotStep == 0.01)     Lot=NormalizeDouble(Lot,2);
   // else if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1);
   // else if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0);
 return (Lot); 
}
 
sergey1294 :

예, 실제로 어떤 이유로 인해 오류가 발생하지 않아야 하지만 오류가 있습니다. 개발자들에게 이것에 주의를 당부하고 이렇게 다시 수정해 보니 오류는 없지만 스위치 스위치 를 사용할 때 여전히 오류가 발생합니다.

   switch (LotStep)
  {
   case 0.01 : Lot= NormalizeDouble (Lot, 2 ); break ;
   case 0.1 : Lot= NormalizeDouble (Lot, 1 ); break ;
   case 1.0 : Lot= NormalizeDouble (Lot, 0 ); break ;
  }

여기서 int 형태로 제비를 보내야 합니다. 0.01 = 1000 및 0.10 = 10000...

 
Interesting :

여기서 int 형태로 제비를 보내야 합니다. 0.01 = 1000 및 0.10 = 10000...

당신에 따르면, 그 기능은
 SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );
0.01 대신 값 1000을 반환합니다.
 
sergey1294 :
당신에 따르면, 그 기능은
0.01 대신 값 1000을 반환합니다.

아니요, 코드가 다음과 같으면 오류가 사라질 것이라는 사실에 대해 이야기하고 있었습니다.

   switch (StepSize)
  {
   case 1000 :   Lot= NormalizeDouble (Lot, 2 ); break ;
   case 10000 :  Lot= NormalizeDouble (Lot, 1 ); break ;
   case 100000 : Lot= NormalizeDouble (Lot, 0 ); break ;
  }
 
이제서야 알아차렸다.
 switch
double을 사용할 수 없으면 이 경우에 이 옵션을 사용할 수 없습니다.
 
sergey1294 :
이제서야 알았다.
double을 사용할 수 없으면 이 경우에 이 옵션을 사용할 수 없습니다.
먼저 lot을 int로 변환하면 가능합니다. 위에서 말했던...
 
그러한 구조를 사용하는 것이 불가능한 이유는 여전히 남아 있습니다.
   if (LotStep == 0.01 ) return ( NormalizeDouble (Lot, 2 ));
   if (LotStep == 0.1 ) return ( NormalizeDouble (Lot, 1 ));
   if (LotStep == 1.0 ) return ( NormalizeDouble (Lot, 0 ));
 
Interesting :
먼저 lot을 int로 변환하면 가능합니다. 위에서 말했던...

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

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

 
FEDOR_MQL :

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

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

결국 무엇을 얻어야 하는지에 따라 여기 , 예를 들어 위험을 감수하면서 여러 가지 흥미로운 기능을 제공했습니다.


그리고 이 코드가 작동하려면 로트에 100000을 곱하고 매개변수( int 변수)로 스위치(StepSize)에 전달하기만 하면 됩니다.


추신

그리고 일반적으로 솔직히 말해서 이러한 모든 옵션의 목적을 잘 이해하지 못합니까? 이 기능의 맥락에서 마지막 하나면 충분하다는 사실에 대해 이야기하고 있습니다 ....

 
Interesting :

결국 무엇을 얻어야 하는지에 따라 여기 , 예를 들어 위험을 감수하면서 여러 가지 흥미로운 기능을 제공했습니다.


그리고 이 코드가 작동하려면 로트에 100000을 곱하고 매개변수( int 변수)로 스위치(StepSize)에 전달하기만 하면 됩니다.

나는 당신의 기사가 나에게 필요한 것이라고 생각합니다. 감사해요