SL과 Account Risk를 기반으로 한 자금관리 LOT 사이즈 공식이 필요합니다! - 페이지 4

 
darelco :

... 코드의 이 부분에서 새 컴파일에 문제가 있습니다(오류 ---> 'MarketInfo' - 잘못된 스위치 표현식 유형). 아마도 MT4 빌드 600+로 업데이트하기 전까지는 모두 괜찮았을 것입니다 ... 하지만 그 이후로는 더 이상 작동하지 않습니다.

따라서 최신 버전을 게시해 주시겠습니까? 물론 아직 사용 중이라면.


나는 당신이 변경하면 생각

                 switch ( MarketInfo( strSymbol, MODE_DIGITS ) )

에게

                 int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                 switch ( dig )

그것은 잘 컴파일됩니다

 
darelco :

... 코드의 이 부분에서 새 컴파일에 문제가 있습니다(오류 ---> 'MarketInfo' - 잘못된 스위치 표현식 유형). 아마도 MT4 빌드 600+로 업데이트하기 전까지는 모두 괜찮았을 것입니다 ... 하지만 그 이후로는 더 이상 작동하지 않습니다.

따라서 최신 버전을 게시해 주시겠습니까? 물론 아직 사용 중이라면.


   switch (( int )MarketInfo(strSymbol,MODE_DIGITS))
 

https://book.mql4.com/operators/switch

"Expression 및 Parameters의 값은 int 유형의 값만 될 수 있습니다. Expression은 상수, 변수, 함수 호출 또는 표현식이 될 수 있습니다. 각 변형 'case'는 정수 상수, 문자로 표시될 수 있습니다. 상수 또는 상수 표현식입니다. 상수 표현식은 변수나 함수 호출을 포함할 수 없습니다."

 
angevoyageur :
   switch (( int )MarketInfo(strSymbol,MODE_DIGITS))

다시 한번, 당신은 더 간단하고 더 나은 해결책을 제시합니다.
 
GumRai :
다시 한번, 당신은 더 간단하고 더 나은 해결책을 제시합니다.
우리는 모두 서로에게서 배운다.
 
                 int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                 switch ( dig )
또는
   switch (( int )MarketInfo(strSymbol,MODE_DIGITS))
또는 개체 스타일 (포인터 캐스트를 제외하고 작동)
   switch ( int (MarketInfo(strSymbol,MODE_DIGITS)) )
 

내 다른 EA에서는 다음과 같이 작성합니다.

extern double       Risk_Percent                   = 3 ;
extern int          StopLoss                       = 5 0 ;

//+------------------------------------------------------------------+
  {
   double lot = MathCeil ( AccountFreeMargin () * Risk_Percent / 1000 ) / 100 ;
   if (lot< MarketInfo ( Symbol (), MODE_MINLOT ))lot= MarketInfo ( Symbol (), MODE_MINLOT );
   if (lot> MarketInfo ( Symbol (), MODE_MAXLOT ))lot= MarketInfo ( Symbol (), MODE_MAXLOT );
   return ( MathMin ( NormalizeDouble (lot,PipMultiplier),MaxLotSize));
  }
//+------------------------------------------------------------------+
   if ( _Digits == 5 || _Digits == 3 )PipMultiplier= 10 ;
   else PipMultiplier= 1 ;
   slippage=Slippage*PipMultiplier;
   if ( _Digits < 4 )
     {
      point= 0.01 ;
     }
   else
     {
      point= 0.0001 ;
     }
   return ( 0 );
//+------------------------------------------------------------------+

 
Sebastien Pelle : 내 다른 EA에서는 다음과 같이 작성합니다.

   double lot = MathCeil ( AccountFreeMargin () * Risk_Percent / 1000 ) /


  1. 무료 마진은 귀하의 위험과 관련이 없습니다. 브로커 손절매입니다(계정의 50%).
  2. 전체 스레드를 읽고 게시하지 않았어야 합니다. 요약:
    • 거래의 이유가 더 이상 유효하지 않은 곳에 중지를 둡니다. 예를 들어 지지 바운스를 거래하면 정지가 지지 아래로 떨어집니다.
    • 계정 잔고 * 퍼센트/100 = 위험 = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot + CommissionPerLot) (참고 OOP-OSL에는 SPREAD가 포함되고 DeltaPerLot는 일반적으로 약 $10/pip이지만 쌍의 환율을 고려합니다. 대 계정 통화).
    • TickValue 자체를 사용하지 마십시오 - DeltaPerLot
    • 로트를 적절하게 정규화 하고 min 및 max 에 대해 확인해야 합니다.
    • 중단 을 피하기 위해 FreeMargin도 확인해야 합니다.