Тестер МТ4 не отдает инфу с других тайм-фреймов - страница 9

 
avatara >>:

да не в том вопрос.

Получается, что на тесторе нельзя тестировать советника если его логика основана на показаниях мультитайфреймных индикаторов.

Нужно выносить расчётную часть в советник.

Или я не прав?

не прав - можно

 
Vinin >>:


Конечно не прав.
Но правда не понятно зачем использовать мультитаймфреймные индикаторы?
Советник может обращаться к нужному таймфрейму или брать значения индикатора с нужного таймфрейма.
Использование мультитаймфреймных индикаторов нужно только для ручной торговли.
Получается дополнительное усложнение кода и возможность вноса дополнительных ошибок.

В чём неправ? Логи смотрели?

Часть пишущих свято верят в тестор и iCustom...

За попытку разобраться - грозит бан.

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

Не очевидное как по мне ограничение. Нигде не обнаружил.

-----------------

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

 
avatara писал(а) >>

В чём неправ? Логи смотрели?

Часть пишущих свято верят в тестор и iCustom...

За попытку разобраться - грозит бан.

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

Не очевидное как по мне ограничение. Нигде не обнаружил.


Если ты хочешь получить корректные данные в визуальном режиме работы тестера (точнее в индикаторе, наброшенном на график визуального тестирования), то нужно в индикаторе предусмотреть синхронизацию времени.
Так любые обращение типа iOpen(), iClose и прочее в таком режиме работы некорректно. Идет обращение к реальным данным. И обращение к нулевому бару означает обращение к действительному последнему бару.

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

Но это не относится к вызову АйКустом из советника

 
Vinin >>:


Если ты хочешь получить корректные данные в визуальном режиме работы тестера (точнее в индикаторе, наброшенном на график визуального тестирования), то нужно в индикаторе предусмотреть синхронизацию времени.
Так любые обращение типа iOpen(), iClose и прочее в таком режиме работы некорректно. Идет обращение к реальным данным. И обращение к нулевому бару означает обращение к действительному последнему бару.

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

Повторяю.

Проверьте без визуализации.

Ваш советник вызывает мой индюк.

неважно что и как он считает. посмотрите логи, что он получает в качестве цены с минутного ТФ.

-------

немного подправил пример. На tf=1 работает некорректно, на других - как положено.

Файлы:
curval.mq4  4 kb
 
avatara писал(а) >>

Повторяю.

Проверьте без визуализации.

Ваш советник вызывает мой индюк.

неважно что и как он считает. посмотрите логи, что он получает в качестве цены с минутного ТФ.


Твой индикатор будет возвращать нулевое значение, потому как он сделан с логической ошибкой.
После небольшой корректировки работает нормально
 
Vinin >>:

Зачем так сложно
В режиме визуализации работать будет не корректно

Извините, отлучася на сон, здесь +6gmt.
На счет "сложного" Вы напрасно, предствавленный код всего часть кода советника, выведена в индикатор для проверки
 правильности  работы советника в режиме теста.
Теперь по поводу "В режиме визуализации работать будет не корректно", для програм написанных правильно и при правильной их работе программа будет делать (да и должна) делать то что ей задали программисты и никак по другому,
если по другому то ПО сырое и неолаженное, это мое мнение, и не только мое.
Что касаемо визуализации и не визуализации  - это из области сказок о светлом будущем:)
Я предоставил код по которому проверял обрабатываемые данные, там явно видно что соседние ТФ
не меняют свои данные, Вы можете повесить этот индикатор на ОНлине советник и убедится что в ОНлине
представленный код работает корректно, причем все 5 индикаторов показывают примерно одинаковые логически
связанные данные, код детально описан, должно быть как описано НО... Как обойти недостатки тестора?
Если есть конструктивные доводы, предложения, можна Ваш код увидеть где практически будет доказано
и показано - вот данные текущего ТФ, а вот данные старших и младших - в режиме ТЕСТОРА.
Прошу, споры ни о чем перенести в другие ветки, а то в этих ненужных спорах упустим дельную мысль.

Извиняюсь, если что не так. Без обид. Отлаживать ПО то как то надо, предложения еще есть.

 
vladv002 писал(а) >>

Извините, отлучася на сон, здесь +6gmt.
На счет "сложного" Вы напрасно, предствавленный код всего часть кода советника, выведена в индикатор для проверки
правильности работы советника в режиме теста.
Теперь по поводу "В режиме визуализации работать будет не корректно", для програм написанных правильно и при правильной их работе программа будет делать (да и должна) делать то что ей задали программисты и никак по другому,
если по другому то ПО сырое и неолаженное, это мое мнение, и не только мое.
Что касаемо визуализации и не визуализации - это из области сказок о светлом будущем:)
Я предоставил код по которому проверял обрабатываемые данные, там явно видно что соседние ТФ
не меняют свои данные, Вы можете повесить этот индикатор на ОНлине советник и убедится что в ОНлине
представленный код работает корректно, причем все 5 индикаторов показывают примерно одинаковые логически
связанные данные, код детально описан, должно быть как описано НО... Как обойти недостатки тестора?
Если есть конструктивные доводы, предложения, можна Ваш код увидеть где практически будет доказано
и показано - вот данные текущего ТФ, а вот данные старших и младших - в режиме ТЕСТОРА.
Прошу, споры ни о чем перенести в другие ветки, а то в этих ненужных спорах упустим дельную мысль.

Извиняюсь, если что не так. Без обид. Отлаживать ПО то как то надо, предложения еще есть.


Индикатор предназначен для работы в реал-тайм.
Я еще раз повторюсь что он берет свои значения с не с графика виртуализации, а с вполне реальных последних данных
Можно сделать что бы он работал и на графике виртуализации, но надо понимать что будет не совсем корректная работа, так как данные все равно будут браться с реальной истории, а не с моделированной. Будет заглядывание в будущее, возможно не будет хватать истории для расчетов. Да и много еще что может быть.
Появятся совсем другие вопросы.
 
Вот простой индикатор, который пишет в 6 своих буферов значения Close с 6-ти таймфреймов.
//+------------------------------------------------------------------+
//|                                               MultiTimeframe.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 Navy
#property indicator_color3 DarkSlateGray
#property indicator_color4 Orange
#property indicator_color5 Magenta
#property indicator_color6 CornflowerBlue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,ExtMapBuffer6);
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   ExtMapBuffer1[0]=iClose(Symbol(),PERIOD_M1,0);
   ExtMapBuffer2[0]=iClose(Symbol(),PERIOD_M5,0);
   ExtMapBuffer3[0]=iClose(Symbol(),PERIOD_M15,0);
   ExtMapBuffer4[0]=iClose(Symbol(),PERIOD_M30,0);
   ExtMapBuffer5[0]=iClose(Symbol(),PERIOD_H1,0);
   ExtMapBuffer6[0]=iClose(Symbol(),PERIOD_H4,0);   
//----
   return(0);
  }
//+------------------------------------------------------------------+
А вот эксперт, который получает значения из этого индикатора и выводит полученные значения на график только в режиме визуального тестирования.

//+------------------------------------------------------------------+
//|                                                     SimpleEA.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(IsTesting())
     {
      if(IsVisualMode())
        {
         double M1_Value=iCustom(Symbol(),0,"MultiTimeframe",0,0);
         double M5_Value=iCustom(Symbol(),0,"MultiTimeframe",1,0);
         double M15_Value=iCustom(Symbol(),0,"MultiTimeframe",2,0);
         double M30_Value=iCustom(Symbol(),0,"MultiTimeframe",3,0);
         double H1_Value=iCustom(Symbol(),0,"MultiTimeframe",4,0);
         double H4_Value=iCustom(Symbol(),0,"MultiTimeframe",5,0);
         string com="Last Bid="+DoubleToStr(Close[0],Digits)+"\n";
         com=com+"iClose(M1,0)="+DoubleToStr(M1_Value,Digits)+"\n";
         com=com+"iClose(M5,0)="+DoubleToStr(M5_Value,Digits)+"\n";
         com=com+"iClose(M15,0)="+DoubleToStr(M15_Value,Digits)+"\n";
         com=com+"iClose(M30,0)="+DoubleToStr(M30_Value,Digits)+"\n";
         com=com+"iClose(H1,0)="+DoubleToStr(H1_Value,Digits)+"\n";
         com=com+"iClose(H4,0)="+DoubleToStr(H4_Value,Digits)+"\n";
         Comment(com);
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Если и после этого вы продолжите утверждать, что в тестере неверно считаются индикаторы или моделируются ценовые данные с неродных таймфреймов, то вы обязаны будет предоставить доказательства, иначе бан. Надоело.
 
Vinin >>:


Индикатор предназначен для работы в реал-тайм.
Я еще раз повторюсь что он берет свои значения с не с графика виртуализации, а с вполне реальных последних данных
Можно сделать что бы он работал и на графике виртуализации, но надо понимать что будет не совсем корректная работа, так как данные все равно будут браться с реальной истории, а не с моделированной. Будет заглядывание в будущее, возможно не будет хватать истории для расчетов. Да и много еще что может быть.
Появятся совсем другие вопросы.

Видимо я чтото не так изложил, простите попробу еще раз подробней.
Каждый ТФ имеет свои бары у ктоторых есть свое время - причем тут заглядавание в перед, запрос данных с
учетом времени именно нужного бара и нужного ТФ - то что есть эксперты с заглядыванием в будущее - я знаю, 
это детское кино. 
Вы о чем "Индикатор предназначен для работы в реал-тайм.", речь идет о ТЕСТЕРЕ!
Конкретный вопрос - тестер не отдает данные из соседних ТФ, только с текущего ТФ идуд данные - КАК правильно
обойти этот недостаток тестера системы MT4.

Ни одна функция MQL4 не может вернут данные в тестере с соседних ТФ, как выше так и ниже онного. 
Если данные есть то их можна зафиксировать, проверить, отобразить -  Comment,Alert,Print - или передать на обработку.
Есть предложения по устранению недостатка ТЕСТЕРА, буду весьма благодарен и думаю не я один.


 
Rosh >>:
Вот простой индикатор, который пишет в 6 своих буферов значения Close с 6-ти таймфреймов.
А вот эксперт, который получает значения из этого индикатора и выводит полученные значения на график только в режиме визуального тестирования.


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

Спасибо за убедительный пример от разработчиков.

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

Но мои локальные проблемы остались - как видим М1=0.0. :(

Хотя файлы истории удалил и прочее...

Буду осваивать дальше.

Еще раз спасибо за помощь.

Причина обращения: