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

 
Interesting :

MarketInfo(Symbol(),MODE_MARGININIT) = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

그러면 MODE_MARGINREQUIRED에 해당하는 것은 무엇입니까? 아니면, 구매하기 위해 1랏을 여는 데 필요한 여유 증거금의 양 을 찾는 방법은 무엇입니까?

mql5 제작자의 Moving Average.mq5 EA에서 로트는 다음과 같이 계산됩니다.

 input double MaximumRisk        = 0.02 ;     // Maximum Risk in percentage
input double DecreaseFactor     = 3 ;       // Descrease factor
input int     MovingPeriod       = 12 ;       // Moving Average period
input int     MovingShift        = 6 ;       // Moving Average shift
//---
int    ExtHandle= 0 ;
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized( void )
  {
//--- select lot size
   double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk/ 1000.0 , 2 );

MaximumRisk가 왜 그렇게 작고(0.02%) 로트를 계산할 때 1000으로 나눕니까? 이 1000은 무엇을 나타내는가? 아마도 1000 = 1랏을 구매하는 데 필요한 무료 자금에 100%를 곱한 것(0.02%를 0.0002의 일부로 변환)? 즉, 1랏 구매에 대한 무료 자금은 $10($10x100%=1000)과 같습니다. 올바른 방향으로 생각하고 계십니까?

그리고 질문 하나 더. 미결 주문의 최대 수에 제한이 있습니까?

 
gpwr :

그러면 MODE_MARGINREQUIRED에 해당하는 것은 무엇입니까? 아니면 1랏을 구매하기 위해 필요한 무료 자금의 양을 찾는 방법은 무엇입니까?

그리고 질문 하나 더. 미결 주문의 최대 수에 제한이 있습니까?


나는 이 질문을 했다.


다음은 개발자의 응답입니다.

라시드 우마로프 :

바라보다

SYMBOL_TRADE_CONTRACT_SIZE

거래 계약 규모

더블

그리고

SYMBOL_CURRENCY_MARGIN

담보가 계산되는 통화


내가 이해한대로, 당신은 계산해야 할 것입니다

 

gpwr :

mql5 제작자의 Moving Average.mq5 EA에서 로트는 다음과 같이 계산됩니다.

MaximumRisk가 왜 그렇게 작고(0.02%) 로트를 계산할 때 1000으로 나눕니까? 이 1000은 무엇을 나타내는가? 아마도 1000 = 1랏을 구매하는 데 필요한 무료 자금에 100%를 곱한 것(0.02%를 0.0002의 일부로 변환)? 즉, 1랏 구매에 대한 무료 자금은 $10($10x100%=1000)과 같습니다. 올바른 방향으로 생각하고 계십니까?

그리고 질문 하나 더. 미결 주문의 최대 수에 제한이 있습니까?


 AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk

이 라인은 위험을 자유 증거금 의 2%로 계산합니다. 내가 올바르게 이해했다면. 이 금액을 정확히 1000으로 나누는 이유는 개발자에게 있습니다.


그러나 내가 올바르게 이해한다면 $20,000의 보증금(무료 자금)으로 이 금액($400)의 2% 이상을 개설에 사용하지 않는 것이 좋습니다.

이 금액을 1000으로 나누면 논리적으로 0.4가 많이 나옵니다...

 

gpwr :

미결 주문의 최대 수에 제한이 있습니까?

이 질문도 하셨습니다. 개발자가 여전히 생각하고 있는 제안이 있습니다(그런데 응용 프로그램 15802).
 
Interesting :

이 라인은 위험을 자유 마진의 2%로 계산합니다. 내가 올바르게 이해했다면. 이 금액을 정확히 1000으로 나누는 이유는 개발자에게 있습니다.

그러나 내가 올바르게 이해한다면 $20,000의 보증금(무료 자금)으로 이 금액($400)의 2% 이상을 개설에 사용하지 않는 것이 좋습니다.

이 금액을 1000으로 나누면 논리적으로 0.4가 많이 나옵니다...

지금은 이해. 이동 평균 .mq5 코드에 오타가 있습니다. 대신에

 input double MaximumRisk        = 0.02 ;     // Maximum Risk in percentage

필요

 input double MaximumRisk        = 0.02 ;     // Maximum Risk as a fraction of a free margin

그러면 로트를 계산할 때 1000으로 나누는 것은 이해할 수 있습니다. $100,000(로트 크기)/100(레버리지) = 1000. mql5 개발자는 EA의 이러한 예를 설정하고 싶지 않지만. 교체 필요

 double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk / 1000 .0 , 2 );

 double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
int     Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double lot        = NormalizeDouble (FreeMargin*MaximumRisk/ LotRqdMgn , 2 );

그리고 더 좋은 것은

 double Step       = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
int     Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double lot        = NormalizeDouble ( MathFloor (FreeMargin*MaximumRisk/LotRqdMgn/Step)*Step, 2 );

MODE_MARGINREQUIRED가 마모되어 유감이지만. 개발자는 계산 횟수를 줄이기 위해 이 매개변수를 복원할 것입니다.

 
Interesting :
스트링고 :
짧은 이름은 항상 표시기 하위 창에 표시하기 위해서만 사용되었습니다.
그래서 거기에 표시되지 않거나 버그이거나 뭔가를 이해하지 못했습니다 ...
오류를 찾아 수정했습니다. 16051을 닫을 수 있습니다.
 

내 버그 보고서를 올바른 위치에 게시하고 있는지 모르겠습니다. 그렇지 않은 경우 저를 수정하십시오.

Expert Advisor를 테스트할 때 테스터가 마진을 올바르게 결정하는지 확인하기 위해 의도적으로 이러한 상황을 만들었습니다. 그래서, 100달러를 위한 창고. EURUSD를 거래합니다. 최소 로트 크기는 0.1입니다. EA에는 로트 계산을 위한 이 코드가 있습니다.

 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);

테스터는 다음 오류를 제공합니다.

2010.06.08 22:28:57 코어 1 돈이 충분하지 않음 [즉시 구매 0.10 EURUSD at 1.19242]
2010.06.08 22:28:57 핵심 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.24, NewFreeMargin: -19.24
2010.06.08 22:28:57 코어 1 1000 100
2010.06.08 22:28:57 코어 1 돈이 충분하지 않음 [즉시 구매 0.10 EURUSD at 1.19180]
2010.06.08 22:28:57 핵심 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.18, NewFreeMargin: -19.18
2010.06.08 22:28:57 코어 1 1000 100
2010.06.08 22:28:57 코어 1 돈이 충분하지 않음 [즉시 구매 0.10 EURUSD at 1.19362]
2010.06.08 22:28:57 핵심 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.36, NewFreeMargin: -19.36
2010.06.08 22:28:57 코어 1 1000 100

이 메시지로 판단하면 LotRqdMgn 1랏을 구매하는 데 필요한 여유 증거금이 1000으로 맞는 것 같습니다. 무료 마진 FreeMargin=100. 0.1랏에 1000을 곱하면 100이 됩니다. 즉, 첫 번째 랏을 열 수 있는 자금이 충분합니다. 그러나 테스터는 자금이 충분하지 않다고 보고합니다. 실수는 어디에 있습니까?

 
gpwr :

이 메시지로 판단하면 LotRqdMgn 1랏을 구매하는 데 필요한 여유 증거금이 1000으로 맞는 것 같습니다. 무료 마진 FreeMargin=100. 0.1랏에 1000을 곱하면 100이 됩니다. 즉, 첫 번째 랏을 열 수 있는 자금이 충분합니다. 그러나 테스터는 자금이 충분하지 않다고 보고합니다. 실수는 어디에 있습니까?

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

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

 
Renat :

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

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

고마워요 레나트. 나는 내 실수를 이해했다. LotRqdMgn 계산 공식을 변경했으며 이제 모든 것이 올바르게 작동합니다.

 

사서의 새로운 단어 또는 놀라운 주변...


라이브러리를 사용하는 어드바이저를 만들고 확인했으며 모든 것이 작동합니다. Expert Advisor, 이 라이브러리, 그리고 몇 가지 추가 MQL5 및 MQH 파일이 포함된 아카이브를 만들었습니다. 테스트를 위해 고객에게 아카이브를 제공했습니다.


그리고 모든 것이 아무것도 아니지만 다른 터미널에서 테스트를 수행하기로 결정했습니다. 그래서 이 아카이브를 풀고 차트에 전문가를 첨부하고 싶었습니다. 지금 당장(10회)...


그리고 터미널 로그에는 다음 두 줄이 작성됩니다.

2010.06.10 09:54:51 Experts Expert MechanicalTrading-Infinity-2010(EURUSD,Daily) 삭제됨
2010.06.10 09:54:51 전문가 MechanicalTrading-Infinity-2010(EURUSD,Daily) 로드 실패


나는 그것이 무엇을 어떻게 작동하는지 알아내기 시작했고(또는 오히려 작동하지 않음) 놀라운 사실을 발견했습니다. 터미널은 컴파일된 라이브러리를 디렉토리(* .ex5 형식)에서 봅니다. 그러나 동시에 그것은 완고하게 그것을 "습기"시킵니다. 당신이 이해하는 바와 같이, 그것은 그다지 좋지 않습니다 ...

이 동작의 가능한 원인을 분류한 후 터미널은 원본 파일(*.mq5 형식)을 라이브러리가 있는 디렉토리에 배치하기로 결정했습니다. 컴파일하지도 않은 채 파일을 배치했습니다. 차트에 Expert Advisor를 추가하려고 했습니다. 보라, 모든 것이 효과가 있었다.


연극이 진행되면서 몇 가지 질문이 떠올랐다.

1. 라이브러리가 .ex5로만 제공되는 경우 EA가 작동하지 않는 이유는 무엇입니까?

2. 터미널이 디렉토리에서 이 파일을 계속 제거하는 이유는 무엇입니까?

3. 터미널 로그에 위의 모든 것에 대한 명확한 설명이 없는 이유는 무엇입니까?

4. 문서에 그러한 행동의 가능성이 언급되어 있지 않은 이유는 무엇입니까?


마지막으로 다섯 번째이자 마지막 질문 - 이 모든 것을 처리하는 방법과 내가 무엇을 잘못하고 있습니까(터미널에 EX5 파일이 하나 누락되어 있고 헤더나 라이브러리 자체와 같은 것을 찾고 있는 것일 수 있습니다)?


추신

그건 그렇고, 같은 쓰레기가 EA 자체에 발생하고 * .ex5 파일은 영구적으로 삭제됩니다 ... :(

사유: