Ошибки, баги, вопросы - страница 1916

 
Anton Ohmat:
В тестере стратегии в визуализации текущая история открывается с опозданием (начиная со второй сделки), пока не переключишь на сделки или ордера и обратно, или через 1-2 сделки обновляется

Выставьте скорость перемотки минус три шага от максимальной скорости. Также, вероятно, у вас идёт вывод "Comment" на график - "Comment" всегда замораживает обновление информации в тестере на скоростях перемотки близкой к максимальной.


 
Anton Ohmat:
В тестере стратегии в визуализации текущая история открывается с опозданием (начиная со второй сделки), пока не переключишь на сделки или ордера и обратно, или через 1-2 сделки обновляется

В СД висит заявка (без ответа)

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.06.07 22:33

GUI торгового окружения при отладке на истории (ползунок скорости - максимум) не соответствует реальности
#include <Trade\Trade.mqh>

input int Interval = 3600;
input int AmountLastDeals = 5;
input double Lots = 1;

double CorrectLot( const double Lot )
{
  static const double StepVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
  static const double MaxVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  static const double MinVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
  
  const double Vol = StepVol * (int)(Lot / StepVol + 0.5);
  
  return((Vol < MinVol) ? MinVol : ((Vol > MaxVol) ? MaxVol : Vol));
}

void OnTick()
{
  static CTrade Trade;
  static CDealInfo Deal;
  static CPositionInfo Position; 

  if (!Position.Select(_Symbol))
  {
    if (HistorySelect(0, TimeCurrent()))
    {
      const int Total = HistoryDealsTotal() - 1;

      double SumProfit = 0;
      double SumLots = 0;

      for (int i = Total, Count = 0; (i >= 0) && (Count < AmountLastDeals); i--)
        if (Deal.SelectByIndex(i) && (Deal.Entry() == DEAL_ENTRY_OUT))
        {        
          SumProfit += Deal.Profit() * (AmountLastDeals - Count) / AmountLastDeals;
          SumLots += Deal.Volume() * (AmountLastDeals - Count) / AmountLastDeals;
          
          Count++;
        }

      if (Total == 2)
      {
        string Str;
        
        for (int i = Total; i >= 0; i--)
          if (Deal.SelectByIndex(i))
            Print(Deal.FormatDeal(Str));
        
        DebugBreak();
      }

      if ((Total >= 0) && Deal.SelectByIndex(Total) && (Deal.DealType() == DEAL_TYPE_SELL))
        Trade.Sell((SumProfit >= 0) ? Lots : CorrectLot(SumLots));
      else
        Trade.Buy((SumProfit >= 0) ? Lots : CorrectLot(SumLots));
    }       
  }
  else if (TimeCurrent() - Position.Time() >= Interval)
    Trade.PositionClose(_Symbol);
}
Лог на момент DebugBreak
2017.06.07 23:29:03.554 EURUSD : real ticks begin from 2017.04.10 00:00:00
2017.06.07 23:29:03.564 2017.04.10 00:00:00   instant buy 1.00 EURUSD at 1.05918 (1.05885 / 1.05918)
2017.06.07 23:29:03.564 2017.04.10 00:00:00   deal #2 buy 1.00 EURUSD at 1.05918 done (based on order #2)
2017.06.07 23:29:03.564 2017.04.10 00:00:00   deal performed [#2 buy 1.00 EURUSD at 1.05918]
2017.06.07 23:29:03.564 2017.04.10 00:00:00   order performed buy 1.00 at 1.05918 [#2 buy 1.00 EURUSD at 1.05918]
2017.06.07 23:29:03.566 2017.04.10 00:00:00   CTrade::OrderSend: instant buy 1.00 EURUSD at 1.05918 [done at 1.05918]
2017.06.07 23:29:03.569 2017.04.10 01:00:00   instant sell 1.00 EURUSD at 1.05833 (1.05833 / 1.05845 / 1.05831)
2017.06.07 23:29:03.569 2017.04.10 01:00:00   deal #3 sell 1.00 EURUSD at 1.05833 done (based on order #3)
2017.06.07 23:29:03.569 2017.04.10 01:00:00   deal performed [#3 sell 1.00 EURUSD at 1.05833]
2017.06.07 23:29:03.569 2017.04.10 01:00:00   order performed sell 1.00 at 1.05833 [#3 sell 1.00 EURUSD at 1.05833]
2017.06.07 23:29:03.570 2017.04.10 01:00:00   CTrade::OrderSend: instant sell 1.00 EURUSD at 1.05833 [done at 1.05833]
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #3 sell 1.00 EURUSD at 1.05833
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #2 buy 1.00 EURUSD at 1.05918
2017.06.07 23:29:03.570 2017.04.10 01:00:00   CSymbolInfo::CheckMarketWatch: Unknown symbol ''
2017.06.07 23:29:03.570 2017.04.10 01:00:00   #1 balance 100000.00 []
Скрин


Последняя сделка в GUI не отображена. Воспроизводится на 1596-1606.

 
fxsaber:

В СД висит заявка

Уже много раз говорили, что на максимуме ползунка скорости в визуальном тестере правды не ищите. Гуй забит на 100 процентов и не даёт возможности многим компонентам (в основном лист-контролы) обновляться
 
Slava:
Уже много раз говорили, что на максимуме ползунка скорости в визуальном тестере правды не ищите. Гуй забит на 100 процентов и не даёт возможности многим компонентам (в основном лист-контролы) обновляться

В СД речь про отладку со 100% воспроизведения.

 
Slava:
Уже много раз говорили, что на максимуме ползунка скорости в визуальном тестере правды не ищите. Гуй забит на 100 процентов и не даёт возможности многим компонентам (в основном лист-контролы) обновляться
Скорость не максимум. На паузе. При нажатии f12 такое происходит. При этом отпустить f12 - все равно ничего не происходит -  история не обновляется
 
Anton Ohmat:
Скорость не максимум. На паузе. При нажатии f12 такое происходит. При этом отпустить f12 - все равно ничего не происходит -  история не обновляется

Установите скорость минус три шага от максимума - иначе обновление интерфейса не гарантированно. 

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.06.15 10:08

Почему это компилируется?
class A {};

class B : public A
{
public:  
  int i;
};

void OnStart()
{
  A* a = new B;
  
  ((B*)a).i = 1;
  
  dynamic_cast<B*>(a).i = 1;
  
  delete a;
}
Support Team 2017.06.29 12:04
А почему этот код не должен компилироваться?

A является предком B, поэтому такое приведение может быть валидным, валидность проверятся на выполнеии и если приведение объекта невозможно возникает исключение и MQL программа завершается.

В отличие от явного приведения dynamic_cast не вызывает исключение, а вместо результата возвращается NULL, в этом случае программа продолжит выполнение.
 
Vladimir Karputov:

Установите скорость минус три шага от максимума - иначе обновление интерфейса не гарантированно. 

Эта скорость на середине - до максимума там далеко
 
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE)
почему-то всегда возвращает 0.0 в тестере

код ошибки при этом тоже 0

 
Anton Ohmat:
почему-то всегда возвращает 0.0

код ошибки при этом тоже 0

Эта штука насколько понял, работает только на Московской бирже