SetLastError 제공!!! - 페이지 5

 
vit46 :

그리고 이것은 무조건적인 영점 조정이 아니지만 last_error_fifo == 0인 경우에만 동일한 계란이 프로필에서만 더 짧습니다. 오류를 확인하기 전에 함수가 무엇을 반환했는지 확인하십시오.

 
Roger :
테마를 개발합니다.

당신만을 위해, 참조:

OrderSend () 작업을 완료하기 위한 옵션;

1. 오류가 없습니다. 여전히 GetLastError ()를 호출합니다. 원칙적으로 이전 오류를 읽고 처리하고 0으로 재설정해도 무섭지 않습니다.

IMHO - 필요하지 않습니다.

2. 오류가 있습니다. GetLastError ()를 호출할 때 내가 이해하는 한, 많은 것이 있을 수 있지만 하나만 분석합니다.

IMHO 더 나은 옵션은 다음과 같습니다.

        ticket= OrderSend (symbol,cmd,op_v,ordprice,slippage, 0 , 0 ,comment,magic,expiration,arrow_color);
         if (ticket< 0 )
        {
            err = GetLastError ();
             int err_res = ErrReaction(err);
.........................................

마지막 오류인 ErrReaction(err) 은 오류 처리입니다.

예를 들면 다음과 같습니다.

 int ErrReaction( int err)
{
     switch (err)
    {
         case ERR_TRADE_NOT_ALLOWED    :
                 Print ( "TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')" );
         case ERR_INVALID_FUNCTION_PARAMSCNT :    
         case ERR_INVALID_FUNCTION_PARAMVALUE :    
         case ERR_INVALID_STOPS        : 
         case ERR_INVALID_TRADE_VOLUME : 
         case ERR_MARKET_CLOSED        : 
         case ERR_TRADE_DISABLED       : 
         case ERR_NOT_ENOUGH_MONEY     : 
                 return (-err);
         case ERR_NO_CONNECTION        :
............................................
         case ERR_BROKER_BUSY          : 
         case ERR_TRADE_CONTEXT_BUSY   : 
..............................
         case ERR_PRICE_CHANGED : 
         case ERR_OFF_QUOTES    : 
         case ERR_REQUOTE       : 
.................................................
         default : break ;
    } //switch(err)
     return ( 0 );
} //int ErrReaction(int err)

처리 기능은 오류를 "복구 가능" 및 "복구 불가능"으로 구분합니다. "복구 가능"은 해결을 시도하고 복구할 수 없는 코드는 외부(호출) 프로시저에서 처리하기 위해 다시 반환됩니다.

 
sergeev :



음, 어쨌든, 내 바퀴벌레는 각 함수가 반환된 것을 확인할 필요가 없기 때문에 더 시원합니다. 그래서 코드가 더 좋아 보입니다... 게다가, 당신은 자신의 오류 코드 를 구성할 수 있습니다.
 
vit46 :
또한 고유한 오류 코드를 구성할 수 있습니다.


우리는 어떻게 든 우리 자신을 만들기에 충분합니다.

 
Roger :

그것은 당신의 논리에 달려 있습니다. 결국 , 각 오류의 처리를 수행할 수 있지만 이 상황에서 중요한 것만 수행할 수 있습니다.

물론 가장 중요한 모든 오류를 처리하는 기능을 갖는 것이 바람직합니다. 그러면 어드바이저에 포함된 논리가 우선 순위를 "수정"합니다.

이와 별도로, 제 질문이 주제의 주요 방향에서 벗어난 경우 주제 시작자에게 사과드립니다.

 
sergeev :


우리는 어떻게 든 우리 자신을 만들기에 충분합니다.



MQL5의 발명가는 누구를 위해 SetUserError에 그렇게 열심히 노력하고 있습니까... 그들은 스스로를 위해 65535개의 오류 코드 를 예약했으며 위의 모든 것에 대해 자신의 것을 구성할 수 있습니다. :)
 
VladislavVG :

당신만을 위해, 참조:

2. 오류가 있습니다. GetLastError ()를 호출할 때 내가 이해하는 한, 많은 것이 있을 수 있지만 하나만 분석합니다.

IMHO 더 나은 옵션은 다음과 같습니다.

마지막 오류인 ErrReaction(err) 은 오류 처리입니다.

논란의 여지가있는 것은이 옵션입니다. 오류를 재설정 하지 않고 OrderSend 이후에 오류가 없으면 이전 오류를 계속 처리합니다.
 

vit46 :

Ознакомьтесь с этим материалом. imho, не повредит.

https://www.mql5.com/ru/forum/131373

 
charter :

물론 가장 중요한 모든 오류를 처리하는 기능을 갖는 것이 바람직합니다. 그러면 어드바이저에 포함된 논리가 우선 순위를 "수정"합니다.


예를 들어, 주문을 5번 열고 시도를 멈추면 충분하다고 생각하지만, 20번이 필요하다고 생각하거나 "승리할 때까지" 열어야 할 수도 있습니다.
 
Roger :

예를 들어, 주문을 5번 열고 시도를 멈추면 충분하다고 생각하지만, 20번이 필요하다고 생각하거나 "승리할 때까지" 열어야 할 수도 있습니다.

아니, 나는 아무것도 계산하지 않습니다. 제 자신의 확고하고 확실한 의견이 없기 때문에 가장 가치 있는 오류 처리 기능을 추천해 달라고 요청합니다.