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

 
hini #:

Just comment this line of code and it will be normal. But this is only treating the symptoms and not the root cause

Причину ошибки вчера нашел. Исправлю.

 
fxsaber # :

Я плохо понял ваше сообщение. Возможно, вас ввело в заблуждение название методов.

Нет, вам просто нужно добавить сюда эту строку кода.


 
fxsaber # :

Причину ошибки вчера нашел. Исправлю.

Хорошо, я жду твоих хороших новостей.

 

У меня есть небольшое предложение. Комментарии к заказам пользователя не должны перезаписываться при остановке теста. Насколько я понимаю, комментарии к каждому заказу имеют смысл

   void Stop( const MqlTick &Tick )
  {
     if (! this.Delete(Tick) && ! this.Close( this.Lots, Tick))
    {
       const string Str = this.comment.Get() + " end of test" ; 
       this.comment = Str;
    }

     return;
  }
 
hini #:

I have a little suggestion. The user's order comments should not be overwritten when the test is stopped. As far as I'm concerned, the comments for each order make sense

Я сделал такое же поведение, как у MQ-Tester.

 
fxsaber # :

Я сделал такое же поведение, как у MQ-Tester.

Понимаю, но я думаю, что это должно быть лучше, чем MQ-Tester. «конец теста» нужен только для того, чтобы отметить, какие ордера вызваны остановкой теста, и нет смысла перезаписывать комментарии пользователя к ордерам.

это неразумно

 
Правильно ли это? Возвращаемое значение TesterMultiApart равно 0, что означает реальную среду, верно?

CopyTicksRange всегда возвращает 0 в тестовом режиме MQ. Вы знаете, почему?
int OnInit() {
// ...
  TICKS_ARRAY ticksArray[];
  ArrayResize(ticksArray, symSize);
  ulong startTime = ((ulong)D'2024.01.01 00:00:00') * 1000;
  ulong endTime = LONG_MAX;
  for(uint i = 0; i < symSize; ++i) {
    int ret = CopyTicksRange(OnTickMultiObj.Symbols[i], ticksArray[i].Ticks, COPY_TICKS_ALL, startTime, endTime);
    if (!ret) {
      Print(OnTickMultiObj.Symbols[i], " CopyTicksRange Error = ", _LastError);
      return INIT_FAILED;
    } else Print("CopyTicksRange success ticks = ", ret);
  }
  int retHandle = VIRTUAL::TesterMultiApart(OnTickMultiObj.Symbols, ticksArray, OnTickMulti, 2000000, true);
  Print("Handle = ", retHandle);
//...
}
 
hini #:

Is this correct? The return value of TesterMultiApart is 0, which means the real environment, right?

CopyTicksRange always returns 0 in MQ test mode. Do you know why?

Никогда не использовал CopyTicks* в MQ-Tester, поэтому не знаю его особенностей.

 
fxsaber #:

Никогда не использовал CopyTicks* в MQ-Tester, поэтому не знаю его особенностей.

Хорошо, нужно ли мне создавать виртуальную среду перед использованием TesterMultiApart? Что, если я хочу сохранить каждую разновидность виртуальной среды, а не удалять ее после завершения, это похоже на простое изменение кода?

Я не понимаю, почему VIRTUAL::SelectOrders = PrevOrders;
  static int TesterMultiApart( const SYMBOL_BASE &sSymbols[], const TICKS_ARRAY &TicksArray[], const STRATEGY_MULTI StrategyMulti,
                           const double Balance = DBL_MIN, const bool Stop = true, const bool bNetting = false )
  {
    const int Handle = VIRTUAL::GetHandle();

    ORDERS* PrevOrders = NULL;

    for (uint i = ::MathMin(::ArraySize(sSymbols), ::ArraySize(TicksArray)); (bool)i--;)
      if (VIRTUAL::TesterMulti(sSymbols[i], TicksArray[i], StrategyMulti, Balance, Stop, bNetting) != -1)
      {
        if (PrevOrders != NULL)
        {
          PrevOrders += VIRTUAL::SelectOrders;

          VIRTUAL::Delete();
        }
        else
          PrevOrders = VIRTUAL::SelectOrders;
      }

    if (PrevOrders != NULL)
      VIRTUAL::SelectOrders = PrevOrders;

    return((PrevOrders != NULL) ? Handle : -1);
  }
 
hini #:

Alright,Should I create a virtual environment before using TesterMultiApart? What if I want to keep each variety of virtual environment instead of deleting it after the end, it seems like just modifying the code?

I don’t understand why    VIRTUAL::SelectOrders = PrevOrders;

В случае успешного выполнения возращается хэндл окружения (виртуальное или реальное), которое было ДО вызова Тестера.