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

 
Aleksei Kuznetsov #:

Тоже не очень понимаю, хотел даже где-нибудь на форуме спросить/обсудить преимущества перед просто Эквити. Может можно и тут обсудить, раз тема поднята. Или перенести в отдельную ветку с помощью модераторов.

Немного по теме.

У меня два сервера показывают верно, с одним исключением - MyOrderCalcMarginRate.
У меня два сервера показывают верно, с одним исключением - MyOrderCalcMarginRate.
  • 2017.02.27
  • www.mql5.com
вот только остался последний вопрос почему в два раза меньше. что на SGDJPY маржа в разы отличается на серверах MetaQuotes-Demo. что в MT5 в разные стороны могут быть совсем другие маржинальные требования. В этой ситуации MyOrderCalcMargin считает правильно
 
Aleksei Kuznetsov #:

Ну вообще мне не принципиально - могу и просто % от эквити брать. От баланса наверное не стоит.

Для бэктестов забыть про маржу и использовать такой подход.
input double inLots = 1; // С какого лота начать

double GetLotsRaw( void )
{
  static const double Koef = inLots / AccountInfoDouble(ACCOUNT_BALANCE);
  
  return(Koef ? Koef * AccountInfoDouble(ACCOUNT_BALANCE) : 0.1);
}
 
Добавлен нестандартный режим исполнения STOP-приказов.
#define VIRTUAL_STOPORDER_OPPOSITE_PRICE // Stop-ордера и SL акцептируются по противоположной цене.
 
fxsaber #:
Добавлен нестандартный режим исполнения STOP-приказов.
Для чего это нужно?
 
hini #:
Для чего это нужно?
Потому что пробивание уровня вверх - это только Bid-цена. Вниз - Ask-цена.
 

Реализация быстрого проброса тика во множество виртуальных окружений.

#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

// Быстрый проброс тика во множество виртуальных окружений.
void NewTick_NoCheck( const MqlTick &Tick, const VIRTUAL_POINTER &Pointers[] )
{
  for (uint i = ArraySize(Pointers); (bool)i--;)
    Pointers[i].NewTick_NoCheck(Tick);
}

void OnStart()
{
  VIRTUAL_POINTER Pointers[]; // Виртуальные окружения.
  const int Size = ArrayResize(Pointers, 5);
  
  for (int i = 0; i < Size; i++)
    Pointers[i] = VIRTUAL::CreateSingle();
    
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))  
    NewTick_NoCheck(Tick, Pointers);
}