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

 
DC2008 :

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


여기에 추가할 수 있습니다. 비록 약간의 지연이 있기는 하지만 여전히 이 주제에 대한 기사를 작성했습니다. MQL4에서 복식 작업의 특징 . 여기에 언급된 모든 내용은 실수(MQL5의 double 및 float) 작업과 관련하여 모든 프로그래밍 언어와 관련이 있으며 그대로 유지됩니다.
Особенности работы с числами типа double в MQL4 - Статьи по MQL4
  • www.mql5.com
Особенности работы с числами типа double в MQL4 - Статьи по MQL4: примеры использования экспертов, тестирования и оптимизации
 
DC2008 :

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


상당히 합리적이고 가장 중요한 것은 합리적인 접근 방식입니다. 적어도 첫 번째 줄은 다음과 같아야 하는 것 같습니다.

 if ( MathAbs (LotStep- 0.01 )< 0.01 ) return ( NormalizeDouble (Lot, 2 ));
 

때때로 다음 메시지가 로그에 나타나기 시작했습니다.

2010.06.15 14:48:09 MemoryException 4915200바이트를 사용할 수 없음

무엇을해야합니까? 지원팀에 보내야 하는데 무엇을 보내야 할지 모르겠다면((

 
Prival :

때때로 다음 메시지가 로그에 나타나기 시작했습니다.

2010.06.15 14:48:09 MemoryException 4915200바이트를 사용할 수 없음

무엇을해야합니까? 지원팀에 보내야 하는데 무엇을 보내야 할지 모르겠다면((

옵이 누락되었습니다. 메모리. 동적 배열 의 크기를 확인하십시오. 사용 가능한 것보다 더 많은 메모리를 할당하려는 시도일 가능성이 큽니다.
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
DC2008 :

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


내가 올바르게 이해했다면 그것은 문제가 아니 었습니다. 그런 다음 사용자 정의 함수의 끝에 항상 return 문을 넣어야 합니다.
 
joo :
옵이 누락되었습니다. 메모리. 동적 배열 의 크기를 확인하십시오. 사용 가능한 것보다 더 많은 메모리를 할당하려는 시도일 가능성이 큽니다.
아니요, 그게 요점이 아닙니다. 아마도 서버와 관련된 것입니다. 진행 중인 작업이 있습니다. 데이터에 구멍이 있습니다. 서버와의 통신이 자주 끊어집니다. 기록이 다운로드되지 않습니다. 오류를 일으켰을 가능성이 큽니다.
 
sergey1294 :
내가 올바르게 이해했다면 그것은 질문의 요점이 아니었다. 그런 다음 사용자 정의 함수의 끝에 항상 return 문을 넣어야 합니다.

== 에 대한 답변이 실제로 있었던 것처럼. 실제로, double 유형의 함수에는 어딘가에 리턴(...)이 있어야 합니다. 반드시 끝에는 아닙니다. if()에서 == 연산자 사용 return(); 0.1000000000000000001 유형의 LotStep이 있는 경우 false를 반환할 수 있습니다. 그러면 둘 이상의 반환이 실패하고 함수는 아무 것도 반환하지 않습니다. 귀하의 경우에는 반환이 NormalizeDouble 내부를 좋아하지 않을 가능성이 큽니다. 작업 버전에서 끝을 return(NormilizeDouble(lot,2))로 변경하고 작동하는지 확인하십시오. 나는 나 자신에게 관심이 있다.

 
gpwr :

== 에 대한 답변이 실제로 있었던 것처럼. 실제로, double 유형의 함수에는 어딘가에 리턴(...)이 있어야 합니다. 반드시 끝에는 아닙니다. if()에서 == 연산자 사용 return(); 0.1000000000000000001 유형의 LotStep이 있는 경우 false를 반환할 수 있습니다. 그러면 둘 이상의 반환이 실패하고 함수는 아무 것도 반환하지 않습니다. 귀하의 경우에는 반환이 NormalizeDouble 내부를 좋아하지 않을 가능성이 큽니다. 작업 버전에서 끝을 return(NormilizeDouble(lot,2))로 변경하고 작동하는지 확인하십시오. 나는 나 자신에게 관심이 있다.

끝에 리턴(...)이 있어야 하지만 도달하지 못할 수도 있습니다(If 조건 중 하나가 작동하는 경우) ...
 
Interesting :
끝에 리턴(...)이 있어야 하지만 도달하지 못할 수도 있습니다(If 조건 중 하나가 작동하는 경우) ...
그것이 내가 관심을 가졌던 것인데, 4개에서는 끝에 넣을 필요가 없었습니다.
 

 double volMin     = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
long    Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double vol= NormalizeDouble ( MathFloor (FreeMargin*MaxRisk/LotRqdMgn/Step)*Step, 2 );
if (vol<volMin) vol=volMin;
if (vol*LotRqdMgn>FreeMargin) vol= 0.0 ;
Print (LotRqdMgn, " " ,FreeMargin);
return (vol);
레나트 :

실수는 계산에서 증거금 통화를 잊어버린 것입니다. 잔액 = 100 USD 및 증거금 요구 사항 = 100 EUR(119 USD).

따라서 작업을 수행할 수 없습니다. 맞습니다.

올바른 마진 계산 에 대한 질문으로 돌아가고 싶습니다. Renat이 언급했듯이 내 계산에서 LotRqdMgn(1랏 구매에 필요한 마진)은 통화 가격을 고려하지 않습니다. 그런 다음 나는 그런 테이블을 본 것을 기억했습니다.

식별자

설명

공식

SYMBOL_CALC_MODE_FOREX

ex 모드의 경우 - Forex의 이익 및 마진 계산

마진: 랏*계약_크기/레버리지

적합: ( close_price - open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_FUTURES

선물 모드 - 선물의 증거금 및 이익 계산

마진: 랏 *초기 마진*백분율/100

이익: (close_price-open_price)*TickPrice/TickSize*Lots

SYMBOL_CALC_MODE_CFD

CFD 모드 - CFD에 대한 마진 및 이익 계산

마진: 랏 *ContractSize*MarketPrice*Percentage/100

이익: (close_price-open_price)*Contract_Size*Lots

SYMBOL_CALC_MODE_CFDINDEX

CFD 지수 모드 - 지수별 CFD 마진 및 이익 계산

마진: (Lots*ContractSize*MarketPrice)*TickPrice/TickSize

이익: (close_price-open_price)*Contract_Size*Lot s

SYMBOL_CALC_MODE_CFDLEVERAGE

CFD 레버리지 모드 - 레버리지 거래에서 CFD에 대한 마진 및 이익 계산

마진: (Lots*ContractSize*MarketPrice*Percentage)/레버리지

이익: (close_price-open_price)*Contract_Size*Lots

즉, 테이블에 오류가 있음이 밝혀졌습니다. L ots*Contract_Size/Leverage 대신 Price*Lots*Contract_Size/Leverage여야 합니다.