Вопрос к разработчикам МТ4: не корректная работа функции IndicatorCounted

 

Уже целую неделю пытаюсь собрать статистику по синхронной работе индикаторов на разных таймфреймах, но каждый день возникают сбои из-за не корректной работы функции IndicatorCounted.

Я установил индикаторы на 5 таймфреймах от М1 до Н1, первоначально длина истории в окне была 10000 баров, длина обрабатываемой выборки LengthSample=1000 баров. Для оптимизации вычислений использовал следующую конструкцию:

int Counted_bars=IndicatorCounted();

       i=Bars-Counted_bars-1;  

    if (i>LengthSample-1)
       i=LengthSample-1;
   while(i>=0)   
    { 
............................... i--;
    } 

По второму тику нового бара все необходимые показатели индикатора заносились в массив, который при удалении индикатора в функции int deinit() писался на диск.

При работе каждый день происходили разрывы связи с сервером, при этом, при восстановлении связи, индикатор пересчитывал не только пропущенные за период отсутствия связи бары, но и по несколько раз всю историю 10000 баров. Так что, за несколько часов работы в сохраняемый массив записывалось до 47000 баров, хотя реально поступало немногим более 1000.

Вчера я задал в окне графиков 500 баров и убрал условия if (i>LengthSample-1):

int Counted_bars=IndicatorCounted();

       i=Bars-Counted_bars-1;  

   while(i>=0)   
    {
............................
    i--;
    }

но ситуация не изменилась. В лог файле никаких сообщений нет, в журнале есть сообщение о разрыве связи в 4:48

2008.11.27 04:54:52 '1227442': login
2008.11.27 04:54:51 '1227442': login
2008.11.27 04:48:12 '1227442': connect failed [нет связи]
2008.11.26 18:54:53 '1227442': login
2008.11.26 18:54:52 '1227442': login
2008.11.26 18:54:51 '1227442': ping failed
2008.11.26 18:05:09 Custom indicator Atlant_H1 EURUSD,H1: loaded successfully
2008.11.26 18:04:55 Custom indicator Atlant_M30 EURUSD,M30: loaded successfully
2008.11.26 18:04:45 Custom indicator Atlant_M15 EURUSD,M15: loaded successfully
2008.11.26 18:04:35 Custom indicator Atlant_M5 EURUSD,M5: loaded successfully
2008.11.26 18:04:25 Custom indicator Atlant_M1 EURUSD,M1: loaded successfully
2008.11.26 18:04:04 '1227442': login
2008.11.26 18:03:59 '1227442': login
2008.11.26 18:03:08 MetaTrader 4.00 build 220 started (MetaQuotes Software Corp.)
На рисунках в правом верхнем углу - длина выборки, количество тиков в последнем баре, количество обработанных баров.

На старших таймфреймах все нормально, за 17 часов работы на М15 поступило 574-499=75 новых баров, на М5 722-499=223 новых бара, при этом на М1 обработано 3479-499=2980 новых баров, т.е. при разрыве связи с сервером и ее восстановлении, которое происходит не сразу, а неоднократно включаясь - выключаясь, четыре раза подряд пересчитывалась вся история, хотя должны были обработаться только бары за 6 минут отсутствия связи. Вчем проблема?

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

to Rosh

вопрос (ответ на который уже понятен)))

..
в тестере длина истории колеблется в течение одного прогона от 1000 до 1500, сбрасывается ли IndicatorCounted в ноль?
(значит сбрасывается)
если так, тогда зачем обрезать историю в тестере?
Это было когда то обосновано - тогда когда МТ-4 был молодой, RAM были 16...32М,
а тестер почти не работал.
но сейчас ЭТО исскуственное большое неудобство

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

однако число баров в процессе тестиррования не превышает 1500,
т.е. сбрасывается до 1000, накапливается до 1500 и так в цикле.
от некоторых индиктаоров приходится отказыватся,
гениальные идеи остаются непроверенными:-((

P.S. а стартует вообще с 300, для высшей математики это маловато будет, приходится тормозить на 700 баров до общеанной 1000

 
Rosh писал(а) >>
С этим можно было бы согласиться, если бы знать - зачем в действительности иметь более 1000 баров в начале тестирования. Попробуйте обосновать это и, кроме того, скольким процентам трейдеров может понадобиться более 1000 баров.

Действительно нужно ... Желательно более чем 1000 баров, хотя бы 5000 или 10000 (вообще хорошо, если самому задавать).

Тот же JMA ... он рассчитвается на истории, если ее мало - то он будет не корректный (будет перерисовываться до стабилизации)

И ответьте же на мой вопрос тут: 'Почему нельзя просматривать поле "Комментарий" в тестере?'

 
при каждой обрезке - индикаторы пересчитывают заново всю историю, тестер заметно "спотыкается",
а зачем это вообще нужно если памяти сейчас очень даже хватает.
 
Rosh писал(а) >>
При обрыве связи и последующем восстановлении происходит подкачка пропущенной истории. При подкачке IndicatorCounted сбрасывается в ноль, чтобы пользовательские индикаторы знали о необходимости пересчитать значения в индикаторных буферах заново. Подкачка может происходитьпорциями, соотвественно IndicatorCounted также будет сбрасываться по несколько раз.

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

 
Понятно, что разработчики Тестeра используют малую модель памяти, скорре всего Small,
а мы уговариваем их перейти на более длинные указатели)))
к чему это приведет?
- к замедлению работы тестера аж на 10%!!!!! = это мы потеряем(((
-зато что мы приобретем = свободу так сказать творчества в части удобной проверки всевозможных идей)))
 
Rosh писал(а) >>
При обрыве связи и последующем восстановлении происходит подкачка пропущенной истории. При подкачке IndicatorCounted сбрасывается в ноль, чтобы пользовательские индикаторы знали о необходимости пересчитать значения в индикаторных буферах заново. Подкачка может происходитьпорциями, соотвественно IndicatorCounted также будет сбрасываться по несколько раз.

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

Допустим следующую ситуацию. Тестируется идея (про неё чуть ниже) на минутках, т.к. именно там можно отловить некоторые особенности поведения конкретной валютной пары.

Идея - анализируется модель поведения валюты за два прошлых четверга (сейчас тоже четверг), собираются стат. данные, определяются характер и особенности поведения (параметры модели). И допустим определяется, что 2 четверга подряд с 8.00 до 12 одна модель, с 14-16 модель №5 (из некоего набора моделей). Естественно предположить, что эта модель будет работать и сегодня.

Но вот проблема 60*24*5=7200 баров нужно, если анализировать только недельные данные, а до 2-го четверга не дотянуться вообще ((.

И мне всегда было непонятно, почему терминал хранит 2 недели минуток, а вот тестер 1000 баров и все.

Piligrimm не вы один намучались с этой функцией, я тоже от неё отказался, из-за непонятных (непрогнозируемых) действий. Вот тут предложен выход ('Как писать быстрые неперерисовывающиеся зигзаги'), я пользуюсь им. Именно таким принципом построением индикатора без использования IndicatorCounted();.

 
Rosh >>:
С этим можно было бы согласиться, если бы знать - зачем в действительности иметь более 1000 баров в начале тестирования. Попробуйте обосновать это и, кроме того, скольким процентам трейдеров может понадобиться более 1000 баров.

Да, действительно, а зачем вообще нужны бары в тестере. От тиков уже избавились, давайте избавимся от баров. И пусть индикаторы выдают случайные значения вообще.

Если Ваша стратегия недостаточно робастая чтобы это выдержать - Вам нечего делать на рынке.

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