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

 
VIRTUAL::SelectByHandle(virHandle);
VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, -1, false, ""); // VIRTUAL::Snapshot()

Я выбрал виртуальную среду перед созданием снимка, поэтому снимок сохраняется для этой виртуальной среды, верно?

Разница между созданием снимка реальной или виртуальной среды заключается в выборе виртуальной/реальной среды перед созданием снимка, верно?
 
hini #:

Возможно возникновение ошибки деления на ноль


Есть некоторые отличия вычисления свопов для CloseBy-позиций в MT5-тестере и Virtual.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define REPORT_TESTER             // В тестере будут автоматически записываться отчеты
#define REPORT_BROWSER            // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh> // https://www.mql5.com/ru/code/18801

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static const datetime BeginTime = TimeCurrent();

  static const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  static const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0);
    
  if (OrdersTotal() && (TimeCurrent() - BeginTime > 24 * 3600))
  {
    OrderCloseBy(Ticket1, Ticket2);
    
    VIRTUAL::CalcSwaps();
  }
}


 
hini #:

Я выбрал виртуальную среду перед созданием снимка, поэтому снимок сохраняется для этой виртуальной среды, верно?

Разница между созданием снимка реальной или виртуальной среды заключается в выборе виртуальной/реальной среды перед созданием снимка, верно?

Нет, Snapshot всегда создается только для реальной среды, вне зависимости от того, где вы находитесь.

Вы можете вообще не использовать виртуальные окружения и при этом работать через Snapshot.

 
  // Синхронизирует VirtualPointerTo-окружение на основе текущего (выбранного) и VirtualPointerOut (для закрытия позиций).
  static bool SyncChannel( const string &Symb, const MAGIC_TYPE Magic, const double Lots,
                           const VIRTUAL_POINTER &VirtualPointerTo, const VIRTUAL_POINTER &VirtualPointerOut, const int FlagChange = false )
  {      
    // Нужно для механизма IsNull.
    if (!VirtualPointerTo.GetHandle() || !VIRTUAL::GetHandle())
      _B2(VIRTUAL::Snapshot());    
    
    const bool IsNull = !OrdersTotal() && !_VP(VirtualPointerTo, OrdersTotal());
    bool Res = IsNull || !FlagChange || _B(SYNCCHANNEL::IsNotChange(true), 500);
  
    if (!IsNull)
    {
      Res &= SYNCCHANNEL::IsCloseBy(/*Symb*/) && MACRO_ISCHANGE(SYNCCHANNEL::SyncCloseBy(Symb, Magic, VirtualPointerTo/*, (inMinLotCorrection <= 0)*/));
      
      Res &= MACRO_ISCHANGE(SYNCCHANNEL::SyncExistOrders(Symb, Magic, VirtualPointerTo, VirtualPointerOut));

      if (Lots && (inMinLotCorrection > Lots))
        ::Alert("inMinLotCorrection(" + (string)inMinLotCorrection + ") > Lots(" + (string)Lots + ")");
      
      Res &= MACRO_ISCHANGE(SYNCCHANNEL::SetNewLimit(Symb, Magic, Lots, OP_BUYLIMIT, VirtualPointerTo, inMinLotCorrection));
      Res &= MACRO_ISCHANGE(SYNCCHANNEL::SetNewLimit(Symb, Magic, Lots, OP_SELLLIMIT, VirtualPointerTo, inMinLotCorrection));
    }    

    return(Res);    
  }

Эта функция только синхронизирует две виртуальные среды? Или она может синхронизировать реальную и виртуальную среды? Например, я хочу, чтобы при открытии позиции в виртуальной среде она сразу же открывалась и в реальной среде (или наоборот). Как это сделать?

 
fxsaber #:
Snapshot всегда создается только для реальной среды, вне зависимости от того, где вы находитесь.
Кажется, я начинаю понимать.
 
fxsaber #:
Есть некоторые отличия вычисления свопов для CloseBy-позиций в MT5-тестере и Virtual.

Я проверю еще раз, когда будет время.

 
hini #:

Эта функция только синхронизирует две виртуальные среды? Или она может синхронизировать реальную и виртуальную среды?

Любое окружение с любым другим.

Например, я хочу, чтобы при открытии позиции в виртуальной среде она сразу же открывалась и в реальной среде (или наоборот). Как это сделать?

Вам нужно написать свою функцию. Это непросто даже не в универсальном варианте, к сожалению.

 
fxsaber #:

Любое окружение с любым другим.

Вам нужно написать свою функцию. Это непросто даже не в универсальном варианте, к сожалению.

Это действительно сложно и требует постепенного понимания.

 
Привет, автор, у меня есть вопрос, по которому хотел бы проконсультироваться. Как мне сбросить виртуальную среду? Я имею в виду не удаление и повторное создание среды, а именно сброс информации конкретной VIRTUAL_POINTER - например, очистку истории ордеров, позиций, тиков и т.д. Есть ли готовый метод для этого?
 
hini #:
Привет, автор, у меня есть вопрос, по которому хотел бы проконсультироваться. Как мне сбросить виртуальную среду? Я имею в виду не удаление и повторное создание среды, а именно сброс информации конкретной VIRTUAL_POINTER - например, очистку истории ордеров, позиций, тиков и т.д. Есть ли готовый метод для этого?

Если вы сбрасываете все значения, то VIRTUAL_POINTER-переменную замените просто новой средой.

Если же нужно уменьшить историю торговли, то для этого есть VIRTUAL::ReduceHistory.