Режимы работы тестера и типы ордеров - страница 3

 
rider писал (а):

что есть AG? 

Как "что есть AG" ? :))

AG - это приложение AutoGraf 4 - самый лучший AutoGraf из всего семейства AutoGraf-ов.
Произведение искусства, непревзойдённая по своей красоте MQL-роспись по MetaTrader-у:)
Вот же: https://forum.mql4.com/ru/12195.

 

см. пост выше.

осознал уже и просветлился :))

 
1. Учим матчасть - Тестер в терминале MetaTrader 4: Это необходимо знать:

Моделирование на разных тайм-фреймах тестируемого инструмента

Тестер в MetaTrader 4 позволяет видеть не только тестируемый тайм-фрейм, но и другие старшие и младшие тайм-фреймы. Таким образом, если мы тестируем советника на EURUSD M15, то можем смотреть значения индикаторов для EURUSD H1 или EURUSD M5. А также видеть максимальную и миимальную цену текущего нулевого бара на любом доступном тайм-фрейме EURUSD. Если нам необходимо получить максимальную цену текущего дня, мы просто смотрим значение iHigh(NULL,PERIOD_D1,0). Также как и при торговле в онлайне. И не имеет значения на каком периоде мы тестируем советника, или на график какого тайм-фрейма он прикреплен в режиме реального времени.

Важно: моделирование всех тайм-фреймов родного инструмента происходит также корректно - цены Open, High, Low и Close моделируются 100% корректно. Объемы старших тайм-фреймов также моделируются 100% корректно.


2. Не обманываем себя - индикатор, наброшенный на график визуализации, работает с реальными данными, и не надо их давать эксперту (чтоб не смотреть в будущее). Индикатор, вызванный через iCustom, работает с тестируемыми данными, и не подсматривает в будущее (если специально какую-нибудь хитрость не придумать). Если есть сомнения по этому пункту, тщательно проверяем и выкладываем результаты здесь.

 
komposter:
1. Учим матчасть

Угу.

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

 
komposter:
1. Учим матчасть - Тестер в терминале MetaTrader 4: Это необходимо знать:......

...............тщательно проверяем и выкладываем результаты здесь.

Андрей, все что мне необходимо знать для грамотного применения ВСЕХ функций языка, должно быть описано в справке по применению, а не в топиках и статьях, ну хотя бы как в нелюбимом и распятом VB. А в этой справке, также как и в учебнике (при всем уважении к SK - "нельзя объять необъятное") за кадром не фрагменты, а пласты целые остаются, причем, не самые простые для понимания. Теперь добавьте сюда отсутствие элементарного отладчика и нормальную логику программиста - прежде всего баг в своем коде найти, а потом уже со средой разработки разбираться..... Ладно, это эмоция :). Вот пример, который непосредственно темы касается:

Есть индикаторы, которые при полной функциональности на реальном графике, категорически не работают (или среднюю темп. по палате показывают) в режиме визуализации тестирования. При разборке след. выяснилось. Рисуем простейший индюк, который ничего не делает, а просто выведет на экран Time[0] и соответствующие TimeCurrent().

//+------------------------------------------------------------------+
//|                                                           TC.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
//---- indicator buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexBuffer(0, ExtBuffer);
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int start()
  {
   Alert ("Time[0] - ",Time[0]," - ",TimeToStr(Time[0],TIME_DATE|TIME_SECONDS),
         "  TimeCurrent() - ", TimeCurrent()," - ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   return(0);
  }
//+------------------------------------------------------------------+

Кладем его на график (здесь к H1 прикреплялся)  в режиме визуализации тестирования любого эксперта, и получаем следующую картинку:


Пояснения не нужны, видимо. А теперь смотрим справку по функции:

datetime TimeCurrent( )
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании последнее известное время сервера моделируется.
Пример:
if(TimeCurrent()-OrderOpenTime()<360) return(0);

Собственно, это полбеды. У меня так вышло, что через Time[0] - эту мелочь обойти еще и лучше получилось :).

А теперь представьте, что вам потребовалось на 0-м баре рабочего ТФ (пусть H1) что-то обсчитать на младшем (пусть М1) - не надуманная ситуация, действительно нужно. Вы не сможете этого сделать, т.к. без TimeCurrent  не будете знать какое количество периодов младшего уже сформировано. И просто программно это никак не решить. Здесь три варианта:
- перенести всю работу на М1 (что и делается, судя по некоторым высказываниям на форуме);
- смириться с дискретностью расчетов, равной одному периоду рабочего ТФ;
- взять это количество наугад, рискуя подсмотреть будущее :).
- использовать глобальные переменные.... но это означает,- вы жестко привяжете индикатор к эксперту, что само по себе неверно
Мне это не нравится.

Приблизительно такая же беда и при обращении к ДРУГИМ таймфреймам и инструментам. Тесткод не привожу - не сохранился, а по новой делать лениво :). Просто, там действительно обращение идет не к моделируемым данным, а к истории. Ничего страшного, вот только прописать это все в справке как-то нужно.



 

Индикатор, наброшенный вручную на график в режиме тестирования некоторые данные берёт из реала. Этого просто нельзя делать.

Попробуйте этот индикатор вызывать по iCustom(). Возможно, в данном случае это и есть причина.

--

Интуитивно ожидается, что в тестере все данные будут тестерные. К сожалению, в МТ4 это не всегда так.

Надемся, что в МТ5 эта концепция будет изменена.

 
SK. писал (а):

Интуитивно ожидается, что в тестере все данные будут тестерные.

Моя очередь про ключевую фразу говорить :).....

Во всех причинах разобрался уже. Это не вопрос - разъяснение было.

Пока TimeCurrent выполняется в индикаторе никакой icustom не поможет - всегда будет последнее известное реальное время сервера (время последней котировки) и нигде об этом не написано.
Что касается iHigh, iLow и т.д., то там просто номер бара надо по времени, через ibarshift считать, тогда и подглядывания никакого не будет, пока специально подсмотреть кто-нить не захочет....

Правильно, в общем, все работает, только "интуиция" у всех разная :)..... это как с любой софтиной: если у нее интуитивно-понятный интерфейс, то нафига полторы тысячи страниц описания?  )

 
rider:

Что касается iHigh, iLow и т.д., то там просто номер бара надо по времени, через ibarshift считать, тогда и подглядывания никакого не будет, пока специально подсмотреть кто-нить не захочет....

Валера, я без претензий ;) Про справку и поведение визуализатора однозначно согласен.
А вот последнее утверждение я бы проверил еще раз - разработчики прямо заявляют что подсмотреть будущее из эксперта (например, через iHigh в iCustom-е) невозможно. И я склонен верить им. Надо бы поэксперементировать...

 
Если нам необходимо получить максимальную цену текущего дня, мы просто смотрим значение iHigh(NULL,PERIOD_D1,0).

...но при условии, то мы тестируем(и кодируем и-Хаем) ЭКСПЕРТА. В случае теста индикатора - посыл выше не верен(что совершенно верно было замечено далее по тексту цитируемого сообщения).

Не обманываем себя - индикатор, наброшенный на график визуализации, работает с реальными данными

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

Замечание: при тестировании последнее известное время сервера моделируется.

:))) Очередная ключевая фраза. Правильная ее редакция:

Замечание: при тестировании ЭКСПЕРТА последнее известное время сервера моделируется для кода этого ЭКСПЕРТА. При совместном тестировании наряду с последним любого индикатора моделирование времени сервера для ИНДИКАТОРА не гарантируется.

Индикатор, наброшенный вручную на график в режиме тестирования некоторые данные берёт из реала. Этого просто нельзя делать.

Нельзя, простите, что? С реала брать котировки? Это конечно нет! Или же набрасывать график на тест-чарт?? Ну тут нееет... что ж это за "визуализация в слепую" тогда у нас получится?

Попробуйте этот индикатор вызывать по iCustom().

Это как это? :) Вы хотите что бы эксперт рисовал кривую вместо индикатора? Нам же линия на чарте нужна... Не просто поток цифр из iCustom.

А вот последнее утверждение я бы проверил еще раз - разработчики прямо заявляют что подсмотреть будущее из эксперта (например, через iHigh в iCustom-е) невозможно. И я склонен верить им.

Тут действительно нужен краш-тест. Осмелюсь предречь ему... провал. Основание: на текущий момент нет никаких сомнений, что в тестере для эксперта и индикатора цены моделируются по разному. Однако дополнительная проверка связки expert->iCustom(call)->indicator(return iHigh) для подтверждения моей теории нужна!

 

Про подглядывание через icustom, честно говоря, протупил малость - мозги индикатором безотносительно к эксперту заняты.... через такой вызов действительно подсмотреть нельзя, но для того, чтобы и индюк в эксперте и, накладываемый для визуализации, идентично работали без ibarshift все равно не обойтись ((

Кстати, может чуть не в тему, -  ссылочка Несколько зигзагов в одном окне.... когда на график при визуализации положите, слюнки потекут - на себе испытал :)

Это не совсем по ihigh ilow, но то что заглянуть индикатором, без особых изысков, куда угодно можно - лучше наглядного пособия не придумать. Только автор тут не виноват - он просто картинку делал :)

to komposter - вы его хорошо знаете, он тут частенько прогуливается ;)