mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 125

 
Nikita Chernyshov :

고맙습니다!

그리고 이것은 더 오래된 코드이지만 사진에서: TrailingStop

 
테스터의 OnInit에 있는 EventSetTimer 는 첫 번째 틱의 시작 날짜부터가 아니라 테스트 간격의 시작 날짜인 균형 거래에서 계산됩니다.
 
fxsaber :
테스터의 OnInit에 있는 EventSetTimer는 첫 번째 틱의 시작 날짜부터가 아니라 테스트 간격의 시작 날짜인 균형 거래에서 계산됩니다.
EventSetTimer는 EventSetTimer가 호출 되는 순간부터 항상 타이머를 시작합니다. 테스터에 있는 것, 터미널에 있는 것
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql4 언어의 기능, 미묘함 및 작업 방법

fxsaber , 2019.02.12 13:12

다차원 배열 을 위한 ArrayResize의 기능
 void OnStart ()
{
   int Array[][ 2 ];
  
   Print ( ArrayResize (Array, 7 )); // MQL5 - 7, MQL4 - 14
   Print ( ArraySize (Array));       // 14
}
 

5명을 위한 김씨의 기능을 보는 것도 좋을 것 같다. 말해 주세요. 김에 그런 기능이 있었다

 //+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar( int magik = 0 , int bar = 0 , int typ = - 1 , string sy = "" , int per = 0 ){
   if (sy == "" ){sy = Symbol ();}
   if (per== 0 ){per= Period ();}
   for ( int i = OrdersTotal (); i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )){
         if ( OrderSymbol ()!=sy){ continue ;}
         if ( OrderType ()==typ||typ==- 1 ){
             if ( OrderMagicNumber ()==magik||magik== 0 ){
               if ( OrderOpenTime ()>= iTime (sy,per,bar)){ return ( true );}
            }
         }
      }
   }
   for (i = OrdersHistoryTotal (); i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )){
         if ( OrderSymbol ()!=sy){ continue ;}
         if ( OrderType ()==typ||typ==- 1 ){
             if ( OrderMagicNumber ()==magik||magik== 0 ){
               if ( OrderOpenTime ()>= iTime (sy,per,bar)){ return ( true );}
            }
         }
      }
   }   
   return ( false );
}

mql5에서 다시 작성하려고합니다. 그러나 그는 일하기를 원하지 않습니다. 그녀를 강제하는 방법? :)

 //+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar( ENUM_ORDER_TYPE type)
{

   for ( int i = OrdersTotal (); i>= 0 ; i--){
       if ( OrderSelect ( OrderGetTicket (i)) > 0 )
        {
         if ( OrderGetString ( ORDER_SYMBOL )!= _Symbol ){ continue ;}
         if ( OrderGetInteger ( ORDER_TYPE )==type)
           {
             if ( OrderGetInteger ( ORDER_MAGIC ) == magicN)
             {
               if ( OrderGetInteger ( ORDER_TIME_SETUP ) >= iTime ( NULL , Period (), 0 )){ return ( true );}
             }
           }
        }
      }
      
   for ( int i = HistoryOrdersTotal (); i>= 0 ; i--){
     if ( HistoryOrderSelect ( OrderGetTicket (i)) > 0 )
          {
         if ( OrderGetString ( ORDER_SYMBOL )!= _Symbol ){ continue ;}
         if ( OrderGetInteger ( ORDER_TYPE )==type)
           {
             if ( OrderGetInteger ( ORDER_MAGIC ) == magicN)
             {
               if ( OrderGetInteger ( ORDER_TIME_SETUP ) >= iTime ( NULL , Period (), 0 )){ return ( true );}
             }
           }
          }
    }
   
   return ( false );
}
 
Nikita Chernyshov :

5명을 위한 김씨의 기능을 보는 것도 좋을 것 같다. 말해 주세요. 김에 그런 기능이 있었다

mql5에서 다시 작성하려고합니다. 그러나 그는 일하기를 원하지 않습니다. 그녀를 강제하는 방법? :)

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: MT4Orders

fxsaber , 2019.01.13 17:23

Kim의 MT4 기능은 꽤 유명해서 그의 사이트에서 모든 소스를 다운로드하여 MT5용으로 간단한 "변환기"를 작성했습니다.
 #include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "e-Trailing.mq4" // http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=14

void OnTick () { start(); }
 
fxsaber :

목발 감사합니다 아주 유용합니다 :) 하지만 이 문제를 이해하고 이해하기 위해 상위 5개를 배우는 중이니 기본적으로 펜으로 정리하는 것이 중요합니다.

 

수백만 개의 틱을 파싱하면서 주기적으로 메모리 사용량을 살펴보기로 했습니다.

변경 후 실행 속도가 크게 떨어지는 것을 알았습니다.


원인: TerminalInfoInteger의 일부 사용은 매우 오랜 시간이 걸립니다.

 #define BENCH(A)                                                              \
{                                                                             \
   const ulong StartTime = GetMicrosecondCount ();                              \
  A;                                                                          \
   Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - StartTime)); \
}  

void OnStart ()
{
  BENCH( TerminalInfoInteger ( TERMINAL_MEMORY_USED )); // 28220
}
조심하세요.
 
TerminalInfoInteger ( TERMINAL_MEMORY_USED )

매우 비싼 기능입니다.

TERMINAL_MEMORY_AVAILABLE

TERMINAL_MEMORY_PHYSICAL 및 TERMINAL_MEMORY_TOTAL은 첫 번째 요청 후에 캐시됩니다. 후속 요청은 캐시된 값을 반환합니다.

 
FileIsExists는 일부(*.bat 등) 파일을 볼 수 없지만 FileFindNext 는 파일을 찾습니다.