Expert Advisors 구현에 대한 논의. - 페이지 2

 
Georgiy Merts :

나는 그것이 어떻게 작동하는지 이해하지 못합니다. 게다가 이 포럼 회원은 질문을 받았을 때 더 이상 기억이 나지 않는다고 말했습니다. 단지 이 코드가 이미 여러 번 테스트되었기 때문에 신뢰할 수 있을 뿐입니다.

음 ... 이 어리석은 "질문"을 정상적인 if 문으로 대체할 수 있다면 어떻게 그리고 무엇을 ... 지금까지 - 그래서 ...

그건 그렇고, 오늘 나는이 공포에 대한 분석을 취했습니다.

의미는 다음과 같습니다.

 ENUM_ORDER_TYPE_FILLING otfMyRes  = WRONG_VALUE ;   

if (iFillingMode == 0 || (otfFilingType >= ORDER_FILLING_RETURN ) || ((iFillingMode & (otfFilingType + 1 )) != otfFilingType + 1 ))
	{
         if (steExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE || steExeMode == SYMBOL_TRADE_EXECUTION_INSTANT )
                otfMyRes = ORDER_FILLING_RETURN ;
         else    
                 if (iFillingMode == SYMBOL_FILLING_IOC )
                        otfMyRes = ORDER_FILLING_IOC ;
                 else
                        otfMyRes = ORDER_FILLING_FOK ;
        }
   else       
        otfMyRes = otfFilingType;

return(otfMyRes);  

제 생각에는 이러한 "질문"이 없으면 if와 들여 쓰기가 훨씬 더 이해하기 쉽습니다. 그러나 코드의 효율성은 정확히 동일합니다.

그건 그렇고, 저자가 iFillingMode 및 otfFilingType의 숫자 값에 집착하고 있음이 즉시 명백합니다. 제 생각에는 이는 좋은 습관이 아닙니다.

 
Georgiy Merts :

그건 그렇고, 오늘 나는이 공포에 대한 분석을 취했습니다.

의미는 다음과 같습니다.

제 생각에는 이러한 "질문"이 없으면 if와 들여 쓰기가 훨씬 더 이해하기 쉽습니다. 그러나 코드의 효율성은 정확히 동일합니다.

그건 그렇고, 저자가 iFillingMode 및 otfFilingType의 숫자 값에 집착하고 있음이 즉시 명백합니다. 제 생각에는 이는 좋은 습관이 아닙니다.

내 라이브러리에서 다음과 같이

 #ifdef __MQL5__
   ENUM_ORDER_TYPE_FILLING COrder::GetFilling(ENUM_FILLING_MODE mFilling){
       if (!_fillingMode) return ORDER_FILLING_RETURN ;
       else if (mFilling==FILLING_AUTO||mFilling==FILLING_FOK) return !(_fillingMode& SYMBOL_FILLING_FOK )? ORDER_FILLING_IOC : ORDER_FILLING_FOK ;
       else return   !(_fillingMode& SYMBOL_FILLING_IOC )? ORDER_FILLING_FOK : ORDER_FILLING_IOC ;}
#endif

_fillingMode는 이 필드를 역참조하도록 확장하는 매크로입니다.

fillingMode=( int ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE );
 
Georgiy Merts :

그건 다른 문제입니다.

추산, 가끔 내 자신의 코드를 보는데 왜 여기에서 그렇게 쓰여졌는지 이해가 되지 않는다. 그러므로 나는 모든 미묘함을 언급하려고 노력하면서 그러한 장소에 대해 아주 자세하게 언급하려고 노력합니다. 동시에, 어쨌든, 나는 정기적으로 내가 몇 가지 점을 고려하지 않은 것을 봅니다.

또한 - 저는 매우 권위 있는 포럼 회원이 작성한 다음 코드(실행 유형을 결정하기 위해)를 사용합니다.

나는 그것이 어떻게 작동하는지 이해하지 못합니다. 게다가 이 포럼 회원은 질문을 받았을 때 더 이상 기억이 나지 않는다고 말했습니다. 단지 이 코드가 이미 여러 번 테스트되었으며 신뢰할 수 있다는 것 입니다.

음 ... 이 어리석은 "질문"을 정상적인 if 문으로 대체할 수 있다면 어떻게 그리고 무엇을 ... 지금까지 - 그래서 ...

노란색 - 사람이 자신이 작성한 사소한 코드를 즉시 이해할 수 없다는 것은 매우 이상합니다.

빨간색 - 너무 게으르지 않고 다시 확인했습니다. 시장에서 실행할 때 ORDER_FILLING_RETURN 할 수 없습니다. 거래소에서만 가능합니다(도크에 오류가 있음). 이것은 존경받는 포럼 회원이 반환하는 것입니다. )))

 
Vladimir Simakov :

노란색 - 사람이 자신이 작성한 사소한 코드를 즉시 이해할 수 없다는 것은 매우 이상합니다.

빨간색 - 너무 게으르지 않고 다시 확인했습니다. 시장에서 실행할 때 ORDER_FILLING_RETURN 할 수 없습니다. 거래소에서만 가능합니다(도크에 오류가 있음). 이것은 존경받는 포럼 회원이 반환하는 것입니다. )))

모르겠어요. 이 코드가 그러한 기록에서 "사소한" 한. 작업의 논리를 파악하는 데 최소 15분이 걸렸고 if에 대한 일정을 잡은 후에야 명확해졌습니다.

그리고 "indock error"에 대해 - 더 자세하게 가능합니까?

 
Georgiy Merts :

모르겠어요. 이 코드가 그러한 기록에서 "사소한" 한. 작업의 논리를 파악하는 데 최소 15분이 걸렸고 if에 대한 일정을 잡은 후에야 명확해졌습니다.

그리고 "indock error"에 대해 - 더 자세하게 가능합니까?

거래소 실행으로

 SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE )

0을 반환하지만 시장과 함께(Alpari에서 테스트됨)

 SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK

, 이는 0x3과 같습니다. 이것을 시도하면

 MqlTradeRequest::filling_mode=ORDER_FILLING_RETURN

, 열리지 않습니다.

 
Vladimir Simakov :

열리지 않습니다.

원래 기능을 확인했습니다.

 #include <MT4Orders.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnTick ()
{
   if (! OrdersTotal ())
  {
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, ORDER_FILLING_FOK , 0 , 0 );    
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, ORDER_FILLING_IOC , 0 , 0 );    
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, ORDER_FILLING_RETURN , 0 , 0 );    
  }  
}

공장.

 
fxsaber :

원래 기능을 확인했습니다.

공장.

거래소가 아닌 시장의 실행을 시도하십시오)

UPD: 즉각적인 실행을 위한 수정

SYMBOL_TRADE_EXECUTION_INSTANT

 
Vladimir Simakov :

거래소가 아닌 시장의 실행을 시도하십시오)

UPD: 즉각적인 실행을 위한 수정

SYMBOL_TRADE_EXECUTION_INSTANT

위의 테스트 고문. 노력하다.

 
Vladimir Simakov :

거래소가 아닌 시장의 실행을 시도하십시오)

UPD: 즉각적인 실행을 위한 수정

SYMBOL_TRADE_EXECUTION_INSTANT

예를 들어 A-ri의 표준형 계정이죠?

그리고 거래 중개인은 항상 이런 종류의 실행을 가지고 있습니다. 그렇죠?

그래서 설명을 위해 썼다.

 

왜 그렇게 고통을 당합니까?

표준 클래스 를 사용하면 구조( MqlTradeRequest )를 채울 필요가 없고 채우기 및 인스턴트를 알 필요가 없습니다.


 #include<Trade\SymbolInfo.mqh>
#include<Trade\AccountInfo.mqh>
#include<Trade\Trade.mqh>

CTrade  
CAccountInfo 
CPositionInfo