Особенности языка mql5, тонкости и приёмы работы - страница 29

 
Andrey Dik:

При тестировании минутные данные считаются более достоверными.

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

Я раньше по наивности делал так: тестировал на минутках, потом тестировал на тиках, потом на реальных тиках как окончательная прецизионная проверка. Теперь понимаю, что в третьей проверке нет смысла особого.


ноги растут отсюда

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
Vladimir Karputov:


Не нужно вырывать предложение из контекста. Фраза звучит так:

Как видите, если не пытаться манипулировать, то окажется, что Вы неверно истолковали справку.

Ничего я не манипулировал. В справке четко сказано, что минутки имеют первостепенное значение. За недостатком тиковых данных - тики генерируются согласно минутным барам.

На мой взляд, минутные ТФ должны формироваться из реальных тиков в режиме "Реальные тики", в противном случает нет смысла особого в этом режиме.

 
Andrey Dik:

На мой взляд, минутные ТФ должны формироваться из реальных тиков в режиме "Реальные тики", в противном случает нет смысла особого в этом режиме.


ориентирование на минутную историю и приводит к ситуации,когда реальных тиков с 02.04.17 по 08.04.17

2017.04.08 18:06:17.780 сколько тиков (GOLD-9.17,H1)    Колво тиков за 2017.04.02 00:00:00 = 116844

а тестер же использует тики только для 88 существующих минутных баров. все остальные тики существуют только где-то в ...

2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0:00:00.070. Test passed in 0:00:03.125 (including ticks preprocessing 0:00:00.070).
2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: total time from login to stop testing 0:00:03.195 (including 0:00:02.944 for history data synchronization)
2017.04.08 18:05:17.263 Core 1  166135 total ticks for all symbols
2017.04.08 18:05:17.263 Core 1  GOLD-9.17: generate 5918 ticks in 0:00:00.020, passed to tester 5918 ticks
 
Лог тестера
GOLD-6.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-6.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-6.17,H1: 145777 ticks, 70 bars generated. Environment synchronized in 0:00:01.388. Test passed in 0:00:00.062 (including ticks preprocessing 0:00:00.031).

А вот количество реальных тиков


Это Metaquotes-Demo.

Получается, что реальных тиков 147700 за неделю, а тестер в самом точном своем режиме выдает 145777 незнамо каких тиков.

 
fxsaber:
Лог тестера

А вот количество реальных тиков


Это Metaquotes-Demo.

Получается, что реальных тиков 147700 за неделю, а тестер в самом точном своем режиме выдает 145777 незнамо каких тиков.


отсутствует несколько М1 баров, а так как ориентир на них,то тестер использует меньше тиков,чем было на самом деле.

лучше смотрите на дальних фьчерсах,там картина более наглядная

 
kaus_bonus:


отсутствует несколько М1 баров, а так как ориентир на них,то тестер использует меньше тиков,чем было на самом деле.

M1-бары формируются, когда есть ласт-цена. Если ее нет, бара нет. А то, что в это время были bid/ask тики - игнорируется!

Т.е. проблема не только в тестере, но и в алгоритме формирования баров.

лучше смотрите на дальних фьчерсах,там картина более наглядная

Как раз на дальних фьючах именно такая ситуация, как написал выше, и происходит чаще всего.

Вы верно это подметили, я только доказательство данной ситуации приведу более наглядное

GOLD-9.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-9.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-9.17,H1: 5918 ticks, 39 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:00.046.

Реальных тиков 116844, тестерных тиков в самом точном режиме - 5918. В скромные 20 раз меньше.


ЗЫ Опровержение гипотезы, что данная ситуация складывается из-за пропуска тестером одинаковых тиков

#include <TypeToBytes.mqh>

#define TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2017.04.03' * 1000, D'2017.04.08' * 1000);
  
  int Count = 1;
  
  for (int i = 1; i < Amount; i++)
    if (_R(Ticks[i]) != Ticks[i - 1])
      Count++;
      
  Print(TOSTRING(Amount) + TOSTRING(Count));
}
Результат
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

Всего 4 одинаковых тика можно было пропустить.

 
Перевод MqlTick в string

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

Библиотеки: Price_Compare

fxsaber, 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
  string flag = "";

#define TICKFLAG_MACRO(A) flag += ((bool)(tickflag & TICK_FLAG_##A)) ? " TICK_FLAG_" + #A : "";
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

  if (flag == "")
    flag = " FLAG_UNKNOWN (" + (string)tickflag + ")";
    
  return(flag);
}

#define TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  return(TOSTRING(time) + "." + (string)IntegerToString(Tick.time_msc %1000, 3, '0') +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(TickToString(Tick));
}
Результат
time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber:
Перевод MqlTick в string
Результат

Нечитабельно:

time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
Dennis Kirichenko:

Нечитабельно:

Не понял. Сам использую такой вариант распечатки любых простых структур, типов и массивов.

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

MetaEditor build 1463

fxsaber, 2016.11.10 10:42

class PRINTCLASS
{
public:  
  template <typename T>
  static void MyPrint( const T &Value )
  {
    T Array[1];
    
    Array[0] = Value;
    
    ::ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
  template <typename T>
  static void MyPrint( const T Value )
  {
    ::Print(Value);
  }

  template <typename T>
  static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print(A) PRINTCLASS::MyPrint(A)

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(Tick);
}

Результат
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04.07 23:58:18  110620  110640  110630        1 1491609498000      30

Все зависит от целей.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам".