찻주전자의 질문 - 페이지 33

 
Renat :
나>=0
고맙습니다. 내 입장에서는 부끄러운 일입니다.)) mql4에서 이 열거를 너무 많이 사용했고 그런 간단한 순간에 실수를 저질렀습니다.
 

위치를 선택할 수 없습니다. 예를 들어:

   double Stop_Loss   = NormalizeDouble ( OrderGetDouble ( ORDER_SL ), _Digits );
   double Open_Price  = NormalizeDouble ( OrderGetDouble ( ORDER_PRICE_OPEN ), _Digits );
   
   double Amount_Risk = 0.0 ;
         
   for (count = PositionsTotal ()- 1 ; count >= 0 ; count--)
      {
       if ( PositionSelect ( SymbolName (count, true )))
         {
           int tp_pos;
          tp_pos = ( ENUM_ORDER_TYPE ) PositionGetInteger ( POSITION_TYPE );
           if (tp_pos == ORDER_TYPE_BUY || tp_pos == ORDER_TYPE_SELL ) 
            {
             Amount_Risk = MathAbs (Open_Price - Stop_Loss);
             Print ( "PositionTotal(): " , PositionsTotal (), " Amount_Risk: " ,Amount_Risk);
            }
           if ( GetLastError () != 0 ) Print (ErrorDescription( GetLastError ()), ", " , GetLastError ());
         }
      }

로그 오류:

제대로 하는 방법?

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
Торговые функции / PositionSelect - Документация по MQL5
 
tol64 :

위치를 선택할 수 없습니다. 예를 들어:

먼저 오류를 수정하고 주문 유형과 위치 유형을 혼동하지 마십시오.

 tp_pos = ( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE );
 
tol64 :

위치를 선택할 수 없습니다. 예를 들어:

로그 오류:

제대로 하는 방법?

어디서 실수 안했는지 물어보면 더 쉬울텐데..

모든 것이 작동하려면 디자인이

if ( PositionSelect ( SymbolName (count, true ))) 는 다음으로 대체되어야 합니다.

if ( PositionSelect ( PositionGetSymbol (개수)))

ENUM_ORDER_TYPE과 혼동 하는 텍스트 아래로 ENUM_POSITION_TYPE

 
Rosh :

먼저 오류를 수정하고 주문 유형과 위치 유형을 혼동하지 마십시오.

블라딕스:

어디서 실수 안했는지 물어보면 더 쉬울텐데..

내 정말 심각한 실수에 대해 감사하고 죄송합니다. 이것은 일시적인 현상이며 곧 이 오해가 지나갈 것입니다.))
 

이 문제를 해결하는 방법을 알려주십시오.

저는 두 대의 컴퓨터에서 MT5용 Expert Advisors, 라이브러리 및 지표를 개발합니다.

한 시스템에서 다른 시스템으로 개발 전송을 구성하는 가장 쉬운 방법은 무엇입니까? 자동 동기화를 사용하는 것이 좋습니다. 저것들. 최신 파일을 컴퓨터에서 가져와 복제하도록 합니다.

컴퓨터가 동일한 네트워크에 있습니다. 인터넷을 통해 공유되는 공유 폴더가 있습니다.

 
VCS 사용
 
TheXpert :
VCS 사용
컴퓨터가 Windows7에 있다고 지정하지 않았습니다. 가장 어려운 것은 파일 시스템에서 파일을 채우는 방법을 이해하는 것입니다. XP에서는 모든 것이 명확했고 모든 것이 있는 하나의 디렉토리가 있었지만 여기에는 모든 것이 흩어져 있습니다.
 
Andrian22 :
컴퓨터가 Windows7에 있다고 지정하지 않았습니다. 가장 어려운 것은 파일 시스템에서 파일을 채우는 방법을 이해하는 것입니다. XP에서는 모든 것이 명확했고 모든 것이 있는 하나의 디렉토리가 있었지만 여기에는 모든 것이 흩어져 있습니다.
도움말 보기 시작하기 - 터미널 시작 하기 - "게스트 모드"(/portable 키 사용)
 
Vladix :

어디서 실수 안했는지 물어보면 더 쉬울텐데..

모든 것이 작동하려면 디자인이

if ( PositionSelect ( SymbolName (count, true ))) 는 다음으로 대체되어야 합니다.

if ( PositionSelect ( PositionGetSymbol (개수)))

나는 다양한 옵션을 보았고 최종 결과에서 모두 동일하다는 것을 알았습니다. 즉, 이러한 각 옵션은 다음과 같습니다.

  if ( PositionSelect ( Symbol ()))
  if ( PositionSelect ( PositionGetSymbol (count)))
  if ( PositionSelect ( SymbolName (count, true )))

... 동일한 결과를 반환합니다.

그리고 제 경우에는 결과에 영향을 미치지 않았습니다.))) 스크립트를 추가했습니다.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
 for ( int count = 0 ; count < PositionsTotal (); count++)
   {
     double Amount_Risk = 0.0 ;
     string Type_pos;
    
     if ( PositionSelect ( Symbol ()))
     //if(PositionSelect(PositionGetSymbol(count)))
     //if(PositionSelect(SymbolName(count,true)))
      {
       int tp_pos = ( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE );
       string Symbol_pos = PositionGetSymbol (count);
       double Acc_Blnc   = AccountInfoDouble ( ACCOUNT_BALANCE );
       double Order_Lots = PositionGetDouble ( POSITION_VOLUME );
       double Stop_Loss  = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), _Digits );
       double Open_Price = NormalizeDouble ( PositionGetDouble ( POSITION_PRICE_OPEN ), _Digits );
       
       switch (tp_pos)
         {
           case 0 : Type_pos = "LONG" ;   break ;
           case 1 : Type_pos = "SHORT" ; break ;
         }
       
       Amount_Risk += MathAbs (((((Open_Price - Stop_Loss)* 10000 )*(Order_Lots* 10 ))/Acc_Blnc)* 100 );
       
       Print ( "PositionTotal(): " , PositionsTotal (), ", Symbol: " ,Symbol_pos, ", Position: " ,Type_pos, ", Amount_Risk: " , DoubleToString (Amount_Risk, 2 ), "%" );

       if ( GetLastError () != 0 ) Print (ErrorDescription( GetLastError ()), ", " , GetLastError ()); ResetLastError ();
      }
   }
}

이제 모든 것이 올바르게 작동합니다. 위에서 언급한 옵션은 주석 처리되어 있으며 비교할 수 있습니다. 결과는 항상 로그에서 동일합니다.