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

 
Ihor Herasko :

단지:

오류 메시지를 제공합니다

 
Aleksandr Lishchenko :

오류 메시지를 제공합니다

어디에서 오류가 발생합니까? 어떤 오류가 발생합니까?

 

안녕하세요. 사용자가 지정한 거래량 의 입력 매개변수가 정확한지 확인하는 작업이 있거나, 지정된 로트가 로트 변경 단계의 배수여야 합니다. 이를 위해 나눗셈의 실제 나머지를 찾아 0 값 또는 0에 매우 가까운 값(예: 0.000000001)과 비교합니다.

 void OnStart ()
{
   double volume = 0.03 ;
   Alert ( "Результат деления " , volume/ MarketInfo ( Symbol (), MODE_LOTSTEP ));
   Alert ( "Шаг изменения лота " , MarketInfo ( Symbol (), MODE_LOTSTEP ));
   Alert ( "Вешественный остаток " , fmod (volume, MarketInfo ( Symbol (), MODE_LOTSTEP )));
}

결과:

 /*
   Вещественный остаток 0,009999999999999998
   Шаг изменения лота 0,01
   Результат деления 3,0
*/

스크린샷도 첨부했습니다.

내 생각에 나머지는 0 또는 매우 작은 숫자여야 하지만 어떤 이유에서인지 거의 0.01로 밝혀졌습니까? 예를 들어 사용자가 0.001을 잘못 설정한 경우 입력 매개변수를 확인하는 방법은 무엇입니까?

파일:
4npm6qh.png  8 kb
 
Aleksandr Teleguz :

안녕하세요. 사용자가 지정한 거래량 의 입력 매개변수가 정확한지 확인하는 작업이 있습니다. 이를 위해 나눗셈의 실제 나머지를 찾아 0 값 또는 0에 매우 가까운 값(예: 0.000000001)과 비교합니다.

결과:

스크린샷도 첨부했습니다.

내 생각에 나머지는 0 또는 매우 작은 숫자여야 하지만 어떤 이유에서인지 거의 0.01로 밝혀졌습니까? 예를 들어 사용자가 0.001을 잘못 설정한 경우 입력 매개변수를 확인하는 방법은 무엇입니까?

약간 잘못되었습니다. 첫 번째 단계는 주어진 값을 기반으로 가장 가까운 정확한 값을 계산한 다음 얻은 값 간의 차이를 확인하는 것입니다. 0(또는 DBL_EPSILON 이하)이면 모든 것이 정상입니다.

 void OnStart ()
{
   double volume = 0.03 ;

   double fVolumeMin = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );   
   double fVolumeMax = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );   
   double fVolumeStep = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP ); 

   double fNearestCorrectVolume = VolumeCast(volume, fVolumeMin, fVolumeMax, fVolumeStep);
   if ( fabs (fNearestCorrectVolume - volume) > DBL_EPSILON )
       Alert ( "Ошибка" );
   else
       Alert ( "Все ОК" );
}

VolumeCast 기능은 여기에서 가져올 수 있습니다.

 
Ihor Herasko :

어디에서 오류가 발생합니까? 어떤 오류가 발생합니까?

오류 1개, 경고 0개 2 1
'if' - 전역에서 식은 허용되지 않습니다.

 

안녕하세요!

남자들은 조언자를 하나의 계정에 연결하는 방법을 코드에 알려줍니다(최신 MT4 업데이트의 경우).

매우 감사합니다.

 
Aleksandr Lishchenko :

안녕하세요!

남자들은 조언자를 하나의 계정에 연결하는 방법을 코드에 알려줍니다(최신 MT4 업데이트의 경우).

매우 감사합니다.

당신은 이미 코드를 받았습니다.

당신이 직접 실수를 했습니다 - 그것은 당신이 OnTick() 또는 OnInit() 내부가 아닌 전역 변수 영역에서 코드를 만들었다는 오류 설명에 작성되었습니다:

'if' - expressions are not allowed on a global scope

그리고 그러한 지식을 가지고 누군가로부터 코드를 보호하려고 합니까?
 
Artyom Trishkin :

당신은 이미 코드를 받았습니다.

당신이 직접 실수를 했습니다 - 그것은 당신이 OnTick() 또는 OnInit() 내부가 아니라 전역 변수 영역에서 코드를 만들었다는 오류 설명에 당신에게 작성되었습니다:

'if' - expressions are not allowed on a global scope

그리고 그러한 지식을 가지고 누군가로부터 코드를 보호하려고 합니까?

나는 단지 배우고 있습니다!

엄격하게 판단하지 마십시오! ;)

 
Aleksandr Lishchenko :

오류 1개, 경고 0개 2 1
'if' - 전역에서 식은 허용되지 않습니다.

코드가 어떻게 적용되었는지 보여줍니다. 그들은 내가 쓴 것을 그대로 베꼈나요?

 
Ihor Herasko :

코드가 어떻게 적용되었는지 보여줍니다. 그들은 내가 쓴 것을 그대로 베꼈나요?

그렇게 했어요 :)))