エラー、バグ、質問 - ページ 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:

また、これらのオーバーロードをどうすればいいのかわかりませんでした、別々にやるとうまくいくのですが、一緒にやるとうまくいきません ))
 

typo in the documentation?

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は使用されない。

 
Expiredの録画中にテスターログに時間が表示されない
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).

すなわち、250Kティックを16分で走らせる。


テスターで性能劣化を測定するにはどうしたらいいのでしょうか?GetTickCountとグローバル変数を試しましたが、失敗します。