Библиотеки: Virtual - страница 68

 
fxsaber #:

производительность 37 миллионов тиков в секунду на старой машине.

Максимальная теоретическая производительность.
input int inAmountTicks = 1e7;

double GetTickData( const MqlTick &Tick )
{
  return(Tick.bid + Tick.ask);
}

void OnStart()
{ 
  Print("Compiler Version: " + (string)__MQLBUILD__ + " " + __CPU_ARCHITECTURE__);
  
  MqlTick Ticks[];
  
  ArrayResize(Ticks, inAmountTicks);
  
  double Res = 0;
    
  // Замер времени выполнения.
  const ulong StartTime = GetMicrosecondCount();

  for (int i = 0; i < inAmountTicks; i++)
    Res += GetTickData(Ticks[i]);

  Print((string)(int)(inAmountTicks * 1e6 / (GetMicrosecondCount() - StartTime)) + " ticks/sec.");
  Print(Res);
}


Compiler Version: 4789 X64 Regular
93 365 451 ticks/sec.


Т.е. тупой for-цикл быстрее Virtual-тестера в 2.5 раза.

 
Отлично! Я обновлю и протестирую.
 

Если вы встретили платформу с ценой золота, отображаемой с точностью до трех знаков после запятой, это выражение не является точным. Чтобы оно было верным, его нужно разделить на 10.

 this.TickValue = 1 / this.Point
 
hini #:

If you encounter a platform with a gold price displayed to three decimal places, the expression is not accurate. It needs to be divided by 10 to be correct.

Здесь нет ошибки.

 
fxsaber # :

Здесь нет ошибки.

Так почему же результат здесь именно такой?


 
hini #:

So why is the result like this here?

1724 (pips) * 0.01 (lots) = 17.24.

 

Балансы, отображаемые в них, отличаются. Почему так?

void OnDeinit(const int reason) {
  if (VIRTUAL::SelectByHandle(handle))
    Print("AccountBalance = ", AccountBalance(), "   AccountEquity = ", AccountEquity());
 
  if (IsUseVirtual) {
    VIRTUAL::SelectByHandle(handle);
  } else VIRTUAL::SelectByHandle();
  REPORT::ToFile();
}
 
hini #:

The balances displayed by the two are different. Why is that?

Что выдает этот вызов?

Print(VIRTUAL::GetMode());
 
fxsaber # :

Что выдает этот вызов?

выход

 
hini #:

output

Отключение VIRTUAL_ALTERNATIVE помогает?