28 !!! валютных пар, 1 эксперт. Опять грааль, но такого помоему еще никто не показывал. + ДЕМО СЧЕТ - страница 11

 

Про "Трое отважных":

http://www.libex.ru/detail/book74148.html

 
Точно, обложка та самая.
 
MetaQuotes:
Парад картинок без исходников и доказательств...


2 Rosh

В своем советнике, приведенном на 5-й странице, Вы проверяли на несовпадение Bid и Close всех т/ф. Отсутствие таких несовпадений Вы трактуете, как подтверждение того, что в тестере заглядывание в будущее невозможно. Мне еще тогда показалась странной эта связка. С моей точки зрения тестировать надо не поведение Close, а поведение High и Low вышестоящих т/ф. А после приведенного выше не слишком справедливого упрека, прозвучавшего от MQ, решил все-таки посвятить этому некоторое время. Хоть и с опозданием.

Ниже приведен код советника, который сам формирует текущие High и Low часа или дня на минутном графике. Затем на каждом тике он сравнивает их с High и Low часа или дня, полученных с т/ф Н1 или D1. В случае расхождений выводит данные в журнал и в файл.

 
//+------------------------------------------------------------------+
//|                                           Simple Prospection.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2007, Yurixx"
#property link      ""
double curHi,curLo,HiH1,LoH1;
int    mm,hh,dd,curM1,curH1,curD1,kk,nn,handle;
string str,mHi,mLo,hHi,hLo;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  handle = FileOpen("FU.csv",FILE_CSV|FILE_WRITE," ");
  if(handle<1) { Print("File FU.csv not found, Error:", GetLastError());
                 return(false);   }
  if (Period()>PERIOD_M1)
  {  Print("Период тестирования не соответствует задаче");
     return(-1);
  }
  Print("Период тестирования ",Period()," минут");
  FileWrite(handle,"Date","Time","curHi","HiH1","curLo","LoH1");
  nn=D'2007.07.12 23:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:02:00';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  curHi=0.0;
  curLo=1000.0;
  curD1=-1;
  curH1=-1;
  curM1=-1;
  nn=0;//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {  
//----
  mm = TimeMinute(TimeCurrent());
  hh = TimeHour(TimeCurrent());
  dd = TimeDay(TimeCurrent());
  if (mm!=curM1)
  {  if (hh!=curH1)
     {  if (dd!=curD1)
        {  curHi=NormalizeDouble(Bid,Digits);
           curLo=NormalizeDouble(Bid,Digits);
           curD1=dd;
        }
        //curHi=NormalizeDouble(Bid,Digits);
        //curLo=NormalizeDouble(Bid,Digits);
        curH1=hh;
     }
     curM1=mm;
  }
  if (NormalizeDouble(Bid,Digits)>curHi) curHi=NormalizeDouble(Bid,Digits);
  if (NormalizeDouble(Bid,Digits)<curLo) curLo=NormalizeDouble(Bid,Digits);
  //HiH1 = iHigh(NULL,PERIOD_H1,0);
  //LoH1 =  iLow(NULL,PERIOD_H1,0);
  HiH1 = iHigh(NULL,PERIOD_D1,0);
  LoH1 =  iLow(NULL,PERIOD_D1,0);
  HiH1 = NormalizeDouble(HiH1,Digits);
  LoH1 = NormalizeDouble(LoH1,Digits);
  str = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
  mHi = ", curHi=" + DoubleToStr(curHi,Digits);
  mLo = ", curLo=" + DoubleToStr(curLo,Digits);
  hHi = ", HiH1="  + DoubleToStr(HiH1, Digits);
  hLo = ", LoH1="  + DoubleToStr(LoH1, Digits);
  if (HiH1!=curHi||LoH1!=curLo)
  {  Print(str,mHi,hHi,mLo,hLo);
     FileWrite(handle,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),curHi,HiH1,curLo,LoH1);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{  Print("Работа закончена");
   FileClose(handle);
//---- done
   return(0);
}

А это кусок журнала, полученного при прогоне этого советника на EURUSD, M1 в период с 2007.07.10 по 2007.07.14. Как можно понять из текста советника, сравнение шло с дневными данными. Однако при сравнении с часовыми данными ситуация не лучше. Я хотел получить подтверждение возможности заглядывания в будущее или убедиться, что такой возможности нет. Однако, получилось нечто совершенно третье.

Как видно из картинки, время, которое печатает в журнале тестер, и время, которое выводит советник, периодически отличаются друг от друга. Кроме того, происходят какие-то непонятные возвраты назад. В приведенном куске время тестера 2007.07.13 00:58 встречается четыре раза между моментами времени 2007.07.12 00:58, 2007.07.13 00:02, 2007.07. 13 00:04, 2007.07.13 00:06 и 2007.07.13 00:07. И каждый раз советник в этот момент выводит 2007.07.12 23:58:59.

Возможно, что сопутствующее несоответствие данных по High и Low в эти моменты спровоцированы как раз этими сбоями по времени.

Кроме того, советую обратить внимание на тестовую печать в файл, которая стоит в функции init(). Эта печать показывает, что в тестере не работают секунды. Соответственно не работают TimeToStr() в режиме секунд и функция TimeSeconds(). Может быть это так и задумано, но тогда зачем и тестер, и советник печатают данные с секундами ?

Вопрос о несоответствии данных по High и Low даже не ставлю, поскольку совершенно непонятно откуда эти данные брались в это непонятное время.

И еще. Почему-то при тестировании в интервале с 2007.07.09 по 2007.07.14, а не с 2007.07.10 по 2007.07.14 сыпется какая-то непонятная ерунда - данные со старших т/ф вообще не получаются, то есть переменные HiH1 и LoH1 все время имеют нулевое значение.

Может это я где ошибся ?

 
Здравствуйте, Yurixx.
Я прогнал Вашего эксперта не изменив ничего в коде. Вот все данные из файла. которые он вывел:
Date Time curHi HiH1 curLo LoH1
2007.07.12 23:58:00 0 58 23 12
2007.07.13 00:58:00 0 58 0 13
2007.07.13 00:02:00 0 2 0 13
Вот лог:
2007.08.13 09:54:51 2007.07.13 22:59 Simple Prospection EURUSD,M1: Работа закончена
2007.08.13 09:54:48 2007.07.10 00:00 Simple Prospection EURUSD,M1: Период тестирования 1 минут
2007.08.13 09:54:48 Simple Prospection started for testing
2007.08.13 09:54:45 Simple Prospection: loaded successfully
Ни одной ошибки несовпадения при тестировании с 2007.07.10 по 2007. 07.14. Правда, потом я вспомнил, что у меня тестовая спецсборка с прошлой недели. В обычном 208 билде от 01 августа (сейчас обновил один терминла по LibeUpdate)тоже нет ошибки:
2007.08.13 10:13:04 2007.07.13 22:59 Simple Prospection EURUSD,M1: Работа закончена
2007.08.13 10:13:04 2007.07.10 00:00 Simple Prospection EURUSD,M1: Период тестирования 1 минут
2007.08.13 10:13:04 Simple Prospection started for testing
Дело в том, что перед тестиованием я закачал пропущенные данные из History Center (пару месяцев не запускал этот терминал), а потом еще и пересчитал все таймфреймы - вторично нажал "Download" в History Center, в этом случае он предлагает пересчитать все т/ф автоматом и period converter не нужен (вдруг народ не знает об этом свойстве).


Но перед этим были выводы ошибок в лог:

2007.08.13 10:08:19 1999.05.26 02:01 Simple Prospection GBPUSD,M1: Работа закончена
2007.08.13 10:08:18 1999.01.04 09:31 Simple Prospection GBPUSD, M1: 1999.01. 04 09:31:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:30 Simple Prospection GBPUSD, M1: 1999.01. 04 09:30:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:29 Simple Prospection GBPUSD, M1: 1999.01. 04 09:29:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:28 Simple Prospection GBPUSD, M1: 1999.01. 04 09:28:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:27 Simple Prospection GBPUSD, M1: 1999.01. 04 09:27:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:26 Simple Prospection GBPUSD, M1: 1999.01. 04 09:26:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:25 Simple Prospection GBPUSD, M1: 1999.01. 04 09:25:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:24 Simple Prospection GBPUSD, M1: 1999.01. 04 09:24:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:23 Simple Prospection GBPUSD, M1: 1999.01. 04 09:23:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:22 Simple Prospection GBPUSD, M1: 1999.01. 04 09:22:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:21 Simple Prospection GBPUSD, M1: 1999.01. 04 09:21:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:20 Simple Prospection GBPUSD, M1: 1999.01. 04 09:20:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:19 Simple Prospection GBPUSD, M1: 1999.01. 04 09:19:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:18 Simple Prospection GBPUSD, M1: 1999.01. 04 09:18:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:17 Simple Prospection GBPUSD, M1: 1999.01. 04 09:17:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:16 Simple Prospection GBPUSD, M1: 1999.01. 04 09:16:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:15 Simple Prospection GBPUSD, M1: 1999.01. 04 09:15:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:14 Simple Prospection GBPUSD, M1: 1999.01. 04 09:14:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6686
2007.08.13 10:08:18 1999.01.04 09:13 Simple Prospection GBPUSD, M1: 1999.01. 04 09:13:00, curHi=1.6682, HiH1=1.6697, curLo=1.6682, LoH1=1. 6597
2007.08.13 10:08:15 1999.01.04 09:13 Simple Prospection GBPUSD,M1: Период тестирования 1 минут
2007.08.13 10:08:15 Simple Prospection started for testing

Я скачал то данные по EURUSD, а запустил тестирование по GBPUSD, который не был подкачана и пересчитан. В этом и была причина нестыковок.
Попробуйте сделать также - загрузить данные и синхронизировать автоматом либо скриптом period converter.

По поводу секунд будем разбираться, спасибо.
 

Привет, Rosh !

Спасибо за ответ. Насколько я Вас понял, Вы полагаете, что несовпадение данных по High и Low с разных т/ф связано с качеством котировочного потока. То есть на разных т/ф свечи формируются по разному и, в результате, могут быть отличия на 1-2-3 пункта. Вполне возможно.

Я тестировал на данных демо-сервера MQ. Причем я пишу их не в режиме реального времени, а закачиваю все т\ф раз в неделю, в выходные. Вообще-то я полагал, что построение свечей на всех т\ф, по крайней мере на сервере, делается программно, серверным софтом, синхронно для всех т/ф, на основе единого котировочного потока и, поэтому, такие расхождения невозможны. Если это не так, жаль, придется это как-то учитывать ... Причесывание данных, синхронизация и т.п. для того чтобы все выглядело красиво - это, по-моему, неправильный путь. Что ваш сервер, что серверы брокеров поставляют данные в том виде, в котором поставляют. И торговать приходится именно на таких данных, а не на том, во что они превращаются через время. Для процесса тестирования это особенно важно. Всем ведь известна проблема граалей - космос в тестере и слив в реале. Откуда она берется ? MQ настаивает на том, что заглядывание в будущее невозможно и что моделирование тиков вполне отвечает процессу. Надо полагать, что это так и есть. Следовательно, действительно, проблема в данных ? Решить эту проблему MQ не может, данные от нее не зависят. Тогда необходимо сделать так, чтобы тестер корректно работал на любых данных, а не только на тех, которые аккуратно причесали.

Но пост мой был посвящен не расхождению данных с разных т/ф, а непоняткам со временем. И то, что Вы опубликовали, вопроса не снимает. Наоборот, в связи с Вашим постом хочу спросить следующее.

В моем журнале данные времени как тестера, так и советника содержат секунды. В Вашем - данные тестера секунд не содержат вообще, а данные советника содержат только нулевые значения секунд. В связи с этим возникает вопрос: в каком режиме вы проводили тестирование. Хочу уточнить - данный советник предназначен для тестирования только в режиме "все тики". И ошибка, на которую я наткнулся, может быть воспроизведена только из этого режима. Поэтому, если Вы тестировали в другом режиме, прошу Вас повторить тест, благо это займет секунды.

В принципе совершенно все равно на какой паре и в каком диапазоне дат проводить тестирование. А на т/ф отличных от М1 советник работать не будет. Однако, для возможности сравнения наших результатов, я прошу Вас выполнить тест на EURUSD в диапазоне с 2007.07.10 по 2007.07.14, и, отдельным тестом, в диапазоне с 2007.07.09 по 2007.07.14.

Заранее благодарю.

 
Yurixx:

Привет, Rosh !

моем журнале данные времени как тестера, так и советника содержат секунды. В Вашем - данные тестера секунд не содержат вообще, а данные советника содержат только нулевые значения секунд. В связи с этим возникает вопрос: в каком режиме вы проводили тестирование. Хочу уточнить - данный советник предназначен для тестирования только в режиме "все тики". И ошибка, на которую я наткнулся, может быть воспроизведена только из этого режима. Поэтому, если Вы тестировали в другом режиме, прошу Вас повторить тест, благо это займет секунды.

В принципе совершенно все равно на какой паре и в каком диапазоне дат проводить тестирование. А на т/ф отличных от М1 советник работать не будет. Однако, для возможности сравнения наших результатов, я прошу Вас выполнить тест на EURUSD в диапазоне с 2007.07.10 по 2007.07.14, и, отдельным тестом, в диапазоне с 2007.07.09 по 2007.07.14.

Заранее благодарю.


Действительно, сейчас поглядел и увидел, что у меня секунд не было. Это все же связано (я думаю), что по GBPUSD у меня не были подкачаны автоматом данные для часовок и дневок в первый раз тестирования (у меня вообще графики по нему не открыты в том терминале), а вот во второй раз сейчас я хотел проверить и уже ни одной ошибки -необходимые данные были подкачаны в период первого запуска тестирования.

То есть, в первый раз данные для перидов H1 и D1 по GBPUSD отсутствовали, и поэтому были ошибки в моделировании.
 
Я сделал тестирование "по EURUSD в диапазоне с 2007.07.10 по 2007.07.14, и, отдельным тестом, в диапазоне с 2007.07.09 по 2007.07.14" как Вы просили, разницы никакой нет.
 
Rosh:

По поводу секунд будем разбираться, спасибо.


Ошибку с секундами исправили (в компиляторе). Исправленный билд скоро будет доступен.
 
Rosh:
 Ошибку с секундами исправили (в компиляторе).  Исправленный билд скоро будет доступен.
Можно надеяться. что в исправленном билде уже не будет работать тестерный грааль77 ?
 
granit77:
Rosh:
Ошибку с секундами исправили (в компиляторе). Исправленный билд скоро будет доступен.
Можно надеяться. что в исправленном билде уже не будет работать тестерный грааль77 ?

Завтра проверю.
Причина обращения: