초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1163

 
Roman :

입력했다면 차이가 있습니다.
초기화된 변수를 읽는 것이 함수를 읽는 것보다 항상 빠릅니다.

다른 점이 없다. 지금은 링크를 찾을 수 없지만 답변은 오래전에 제공되었습니다.

 
Vladimir Karputov :

다른 점이 없다. 지금은 링크를 찾을 수 없지만 답변은 오래전에 제공되었습니다.

Juan 및 컴파일러 경고 의 경우 차이가 없습니다))

 
Vladimir Karputov :

다른 점이 없다. 컴파일되면 모든 것이 단일 호출로 축소됩니다. 따라서 모든 것을 함수로 하는 것이 더 정확 합니다 .

그리고 이것에 대해 별도의 스레드를 시작하고 핍과 포인트에 대해 논쟁합시다... 그건 사람들이 해야 할 일입니다...

모든 사람과 모든 사람에게 자신의 의견을 어떻게 부과하고 싶습니까?

 

약간의 이동이 있는 MA가 있습니다. MA_shift = 5라고 합시다.

이중 음수 시프트가 CopyBuffer 에 전달된 경우에만 차트의 0 막대에서 올바른 MA 값을 가져올 수 있는 이유는 무엇입니까?
CopyBuffer(hMA, 0, -2*5 , rate_total, MA_Buf);

MA_Buf[0]은 이제 올바른 값입니다.

 
RickD :

약간의 이동이 있는 MA가 있습니다. MA_shift = 5라고 합시다.

이중 음수 이동이 CopyBuffer에 전달된 경우에만 차트의 0 막대에서 올바른 MA 값을 가져올 수 있는 이유는 무엇입니까?
CopyBuffer(hMA, 0, -2*5 , rate_total, MA_Buf);

MA_Buf[0]은 이제 올바른 값입니다.

먼저 그림을 그리고 shift 매개변수가 있는 표시기에 대해 "0 막대"를 표시합니다.

 
Roman :

변수를 읽는 것이 함수보다 빠릅니다.

사실과 거리가 먼 _Symbol 또는 Symbol() https://www.mql5.com/ru/forum/160683/page933#comment_12780905

저것들. 일대일 액세스 시간, MQL의 코드 최적화는 매우 훌륭하게 작동하므로 더 편리한 것을 사용하십시오.

내 테스트에 따르면 변수에 대한 액세스 시간은 변수가 설명된 위치와 수정자에 따라 다를 수 있지만 2-5% 속도가 있으며 이는 원칙적으로 특정 빌드의 구현에 기인할 수 있습니다. 확실히 빌드 번호에 따라 다릅니다

 
현재 심볼에 대한 마지막 거래의 결과를 얻는 가장 쉽고 빠른 방법을 알려주세요. 그리고 문서의 모든 것이 어떻게 든 복잡합니다. 결과를 얻으려면 먼저 원하는 거래의 티켓을 찾아야합니다. 티켓을 찾으려면 인덱스로 기록에서 거래를 찾아야하며 인덱스는 기록에서 검색해야하며 다른 것은 말할 것도 없습니다. 기호로 필터링해야 합니다. 복잡한 일을 끝낸 것 같아
 
WinZip :
현재 기호에 대한 마지막 거래의 결과를 얻는 가장 쉽고 빠른 방법을 알려주세요. 그리고 문서의 모든 것이 어떻게 든 복잡합니다. 결과를 얻으려면 먼저 원하는 거래의 티켓을 찾아야합니다. 티켓을 찾으려면 인덱스로 기록에서 거래를 찾아야하며 인덱스는 기록에서 검색해야하며 다른 것은 말할 것도 없습니다. 기호로 필터링해야 합니다. 복잡한 일을 끝낸 것 같아

매번 거래 내역에 들어가지 않으려면 그냥 유형으로 거래 를 잡아라.

TRADE_TRANSACTION_DEAL_ADD - 내역에 트랜잭션 추가


 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       long      deal_ticket       = 0 ;
       long      deal_order        = 0 ;
       long      deal_time         = 0 ;
       long      deal_time_msc     = 0 ;
       long      deal_type         =- 1 ;
       long      deal_entry        =- 1 ;
       long      deal_magic        = 0 ;
       long      deal_reason       =- 1 ;
       long      deal_position_id  = 0 ;
       double    deal_volume       = 0.0 ;
       double    deal_price        = 0.0 ;
       double    deal_commission   = 0.0 ;
       double    deal_swap         = 0.0 ;
       double    deal_profit       = 0.0 ;
       string    deal_symbol       = "" ;
       string    deal_comment      = "" ;
       string    deal_external_id  = "" ;
       if ( HistoryDealSelect (trans.deal))
        {
         deal_ticket       = HistoryDealGetInteger (trans.deal, DEAL_TICKET );
         deal_order        = HistoryDealGetInteger (trans.deal, DEAL_ORDER );
         deal_time         = HistoryDealGetInteger (trans.deal, DEAL_TIME );
         deal_time_msc     = HistoryDealGetInteger (trans.deal, DEAL_TIME_MSC );
         deal_type         = HistoryDealGetInteger (trans.deal, DEAL_TYPE );
         deal_entry        = HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
         deal_magic        = HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
         deal_reason       = HistoryDealGetInteger (trans.deal, DEAL_REASON );
         deal_position_id  = HistoryDealGetInteger (trans.deal, DEAL_POSITION_ID );

         deal_volume       = HistoryDealGetDouble (trans.deal, DEAL_VOLUME );
         deal_price        = HistoryDealGetDouble (trans.deal, DEAL_PRICE );
         deal_commission   = HistoryDealGetDouble (trans.deal, DEAL_COMMISSION );
         deal_swap         = HistoryDealGetDouble (trans.deal, DEAL_SWAP );
         deal_profit       = HistoryDealGetDouble (trans.deal, DEAL_PROFIT );

         deal_symbol       = HistoryDealGetString (trans.deal, DEAL_SYMBOL );
         deal_comment      = HistoryDealGetString (trans.deal, DEAL_COMMENT );
         deal_external_id  = HistoryDealGetString (trans.deal, DEAL_EXTERNAL_ID );
        }
       else
         return ;
       ENUM_DEAL_ENTRY enum_deal_entry=( ENUM_DEAL_ENTRY )deal_entry;
       if (deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if (deal_type== DEAL_TYPE_BUY || deal_type== DEAL_TYPE_SELL )
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - 현재 기호, InpMagic - 고유 전문가 ID

 
안녕하세요 사이트와 페이스북 메일로 회원가입했는데 메타트레이더 5-4 도움말로 로그인이 안되고 계정충전이 안되네요
 
Igor Makanu :

사실과 거리가 먼 _Symbol 또는 Symbol() https://www.mql5.com/ru/forum/160683/page933#comment_12780905

저것들. 일대일 액세스 시간, MQL의 코드 최적화는 매우 훌륭하게 작동하므로 더 편리한 것을 사용하십시오.

내 테스트에 따르면 변수에 대한 액세스 시간은 변수가 설명된 위치와 수정자에 따라 다를 수 있지만 2-5% 속도가 있으며 이는 원칙적으로 특정 빌드의 구현에 기인할 수 있습니다. 확실히 빌드 번호에 따라 다릅니다

옵티마이저가 잘 작동한다는 데 동의하지만 항상 컴파일러 옵티마이저에 의존하는 것은 사실이 아닙니다.
메모리 수준에서 코드가 어떻게 실행되는지, 초기화 및 값 반환에 대해 미리 생각할 필요가 있습니다.
즉, 작업당 수행되는 작업 수를 계산하려면 작업이 적을수록 코드가 빨라집니다. 그리고 즉시 최적의 코드를 작성하는 연습을 하십시오.
짧은 코드에서는 별 차이가 없을 수 있지만 수백 개의 파일이 있는 프로젝트가 있을 때 지연이 나타나며,
그런 다음 프로파일러와 코드 재작성만 수행됩니다. 모두가 자신의 갈퀴를 선택합니다))

키워드도 구글링

 __inline 
__forceinline
이상하게도 그들은 문서화되지 않은 mql에 있습니다.
사유: