오류, 버그, 질문 - 페이지 1857

 

다음과 같이 작성할 수 있도록 [] 및 = 연산자를 오버로드하는 방법:

class A
{
private:
   int arr[5];
};

A *obj = new A();

for(int i = 0; i < 5; ++i)    obj[i] = i;

 
Konstantin :

다음과 같이 작성할 수 있도록 [] 및 = 연산자를 오버로드하는 방법:

 class A
{
   int arr[ 5 ];
   
   int CurrentPos;
   
public :
  A* operator []( const int Pos )
  {
     this .CurrentPos = Pos;
    
     return (& this );
  }

   void operator =( const int Value )  
  {
     this .arr[ this .CurrentPos] = Value;
  }
};
 
fxsaber :


감사합니다. 하지만 [] 연산자를 다시 오버로드하여 위와 같이 추가로 작성할 수 있도록 하는 방법은 다음과 같습니다.

 class A
{
   int arr[ 5 ];
   
   int CurrentPos;
   
public :
  A* operator []( const int Pos )
  {
     this .CurrentPos = Pos;
    
     return (& this );
  }

   void operator =( const int Value )  
  {
     this .arr[ this .CurrentPos] = Value;
  }
};

for(int i = 0; i < 5; ++i)

   int _value = obj[i];

 
Konstantin :

감사합니다. 하지만 [] 연산자를 다시 오버로드하여 위와 같이 추가로 작성할 수 있도록 하는 방법은 다음과 같습니다.

 class A
{
   int arr[ 5 ];
   
   int CurrentPos;
   
public :
  A* operator []( const int Pos )
  {
     this .CurrentPos = Pos;
    
     return (& this );
  }

   void operator =( const int Value )  
  {
     this .arr[ this .CurrentPos] = Value;
  }

   int operator []( const uint Pos ) const
  {
     return ( this .arr[Pos]);
  }
};

void OnStart ()
{
  A obj;

   for ( int i = 0 ; i < 5 ; ++i)  
    obj[i] = i;
    
   for ( uint i = 0 ; i < 5 ; ++i)  
     int _value = obj[i];
}
 
fxsaber :

다시 한 번 감사합니다. 그렇지 않으면 이러한 과부하를 처리하는 방법을 몰랐습니다. 별도로 수행하고 모든 것이 잘되지만 함께 작동하지 않습니다))
 

문서의 오타?

https://www.mql5.com/ru/docs/series/copyticksrange

 int    CopyTicks (
   const string      symbol_name,           // имя символа
   MqlTick &         ticks_array[],         // массив для приёма тиков
   uint              flags= COPY_TICKS_ALL ,   // флаг, определяющий тип получаемых тиков
   ulong             from_msc= 0 ,             // дата, начиная с которой запрашиваются тики
   ulong             to_msc= 0                // дата, по которую запрашиваются тики
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyTicksRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

테스터는 25K 트랜잭션 후에 끔찍한 브레이크 모드로 들어갑니다.

1585 출시, 틱별, RTS-6.17, Metaquotes-Demo

 #include <MT4Orders.mqh>

void OnTick ()
{  
   static bool Error = false ;  
   static int Type = OP_BUY ;
  
   if (Error)
     return ;
  
   MqlTick Tick;    

   if ( OrderSelect ( 0 , SELECT_BY_POS ) && ( OrderType () <= OP_SELL ))
     OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 0 );    
   else if (( OrdersTotal () == 0 ) && SymbolInfoTick ( _Symbol , Tick) && (Tick.bid != 0 ) && (Tick.ask != 0 ))
  {
    Error = ( OrderSend ( _Symbol , Type + OP_BUYLIMIT , 1 , (Type == OP_BUY ) ? Tick.ask : Tick.bid, 0 , 0 , 0 , "" , 0 , 0 , INT_MAX ) == - 1 );        
    
     if (!Error)
    {
       OrderSend ( _Symbol , Type + OP_BUYLIMIT , 1 , (Type == OP_BUY ) ? Tick.ask : Tick.bid, 0 , 0 , 0 );
      
      Type = OP_SELL - Type;
    }    
  }
}

나는 브레이크가 나타나는 이유를 보지 못한다. ArrayResize (Orders, ArraySize(Orders) + 1)가 쓰여진 것 같습니다. 저것들. Reserve_Size는 사용되지 않습니다.

 
만료된 레코드가 진행 중인 경우 테스터 로그에 시간이 없습니다.
 2017.04 . 19 10 : 46 : 15.165 2017.04 . 06 23 : 09 : 37    sell limit 1.00 RTS- 6.17 at 114300 ( 114290 / 114300 / 114300 )
2017.04 . 19 10 : 46 : 15.168 order expired [ # 284 sell limit 1.00 RTS- 6.17 at 114300 ]
2017.04 . 19 10 : 46 : 15.168 2017.04 . 07 09 : 45 : 04    buy limit 1.00 RTS- 6.17 at 114170 ( 114140 / 114180 )
 
테스터의 로그에 기록된 시간에 밀리초를 추가하도록 요청합니다.
 

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

오류, 버그, 질문

fxsaber , 2017.04.19 08:58

테스터는 25K 트랜잭션 후에 끔찍한 브레이크 모드로 들어갑니다.

1585 출시, 틱별, RTS-6.17, Metaquotes-Demo

 #include <MT4Orders.mqh>

void OnTick ()
{  
   static bool Error = false ;  
   static int Type = OP_BUY ;
  
   if (Error)
     return ;
  
   MqlTick Tick;    

   if ( OrderSelect ( 0 , SELECT_BY_POS ) && ( OrderType () <= OP_SELL ))
     OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 0 );    
   else if (( OrdersTotal () == 0 ) && SymbolInfoTick ( _Symbol , Tick) && (Tick.bid != 0 ) && (Tick.ask != 0 ))
  {
    Error = ( OrderSend ( _Symbol , Type + OP_BUYLIMIT , 1 , (Type == OP_BUY ) ? Tick.ask : Tick.bid, 0 , 0 , 0 , "" , 0 , 0 , INT_MAX ) == - 1 );        
    
     if (!Error)
    {
       OrderSend ( _Symbol , Type + OP_BUYLIMIT , 1 , (Type == OP_BUY ) ? Tick.ask : Tick.bid, 0 , 0 , 0 );
      
      Type = OP_SELL - Type;
    }    
  }
}

재생산하는 사람이 있습니까? 테스터 설정은

결과

Tester  RTS- 6.17 ,M1: 254907 ticks, 785 bars generated. Test passed in 0 : 15 : 54.180 (including ticks preprocessing 0 : 00 : 00.047 ).

저것들. 16분 동안 250K 틱으로 실행하십시오.


테스터에서 성능 저하를 어떻게 측정할 수 있습니까? GetTickCount 및 전역 변수를 통해 시도 - 종료되지 않습니다.