Всем, кто хотел видеть графики без пропущенных баров - сюда =) - страница 2

 
komposter:

Потому, что индикаторы расчитываются на определенное количество баров назад. При наличии пропусков - понятно, что те же MA могут в различные моменты времени быть расчитаны на различные периоды ВРЕМЕНИ назад. Т.е. вычисляя MA(9) - подразумевается, что MA считаем по 9 последним периодам времени. А при наличии пропусков мы получим (по факту) то MA(10), то MA(20).


Почему? И на графиках ALL* тоже?


Я специально уточнил: на графиках, генерируемых экспертом AllMinutes тоже неправильно?

Правильно настолько, насколько могут быть правильными индикаторы на придуманных данных :) По любому, правильнее, чем на данных с пропусками, но все же :(

Вопрос с ПРИЧИНОЙ пропуска все равно открыт.


Как вариант - постоянная проверка IsConnected().
Кроме того, если баров не было из-за потери связи, при её возобновлении они должны докачаться.
Правда, такую ситуацию я не тестировал, и не знаю, как поведёт себя "заполнитель дыр".
Заплатка. Но опять не решение - что делать например с подвисшим сервером (только не говорите мне, что эт нереально!)? На самом деле таких варантов еще можно напридумывать множество - глюки клиента, ошибки в протоколе, настройки сетей и т.п. При этом IsConnected() будет докладывать, что все ок. А котировки - задерживаться. Или вообще теряться. Единственный вариант решения вопроса, который я вижу - это подтверждение НЕИЗМЕННОСТИ цены со стороны сервера. А уж если такого подтверждения нет - значит проблемы в чем-то другом. Я не настаиваю, что таких проблем не должно быть, но Я ХОЧУ ЗНАТЬ, КОГДА они имеют место быть.
 
max_cpr писал (а):

Единственный вариант решения вопроса, который я вижу - это подтверждение НЕИЗМЕННОСТИ цены со стороны сервера.


А если подтверждение о неизменности потеряется так же, как сейчас может потеряться пинг?
Опрос доступности сервера, насколько я понимаю, происходит постоянно. И разницы между обычной проверкой состояния соединения и запросом неизменившейся цены - ни какой.
Имхо, конечно.
 
komposter:
max_cpr:

Единственный вариант решения вопроса, который я вижу - это подтверждение НЕИЗМЕННОСТИ цены со стороны сервера.


А если подтверждение о неизменности потеряется так же, как сейчас может потеряться пинг?
Опрос доступности сервера, насколько я понимаю, происходит постоянно. И разницы между обычной проверкой состояния соединения и запросом неизменившейся цены - ни какой.
Имхо, конечно.
Как раз в этом и суть - если теряется подтверждение цены (в виде сообщения о цене на настоящий момент) - понятно, что имеют место технические неполадки. И причина уже потери уже даже не так интересна - важно лишь корректно обработать такую ситуацию. Запросы к серверу в плане подтверждения актуальности цены в общем-то не имеют смысла - хотя подтверждение цены по запросу и неплохо было бы получать (например, непосредственно перед выставлением ордера). Опрос доступности сервера не гарантирует правильность последнего известного значения цены. Как собственно и в общем случае, нормальное прохождение ping пакетов не гарантирует возможности обмена данными с удаленным сервером. Еще раз подчеркну разницу - подтверждение работоспособности сервера должно проявляться (как ни странно :) в ЕГО РАБОТЕ, т.е. поставке котировок. И отсутствие котировок со стороны сервера должно толковаться однозначно как ошибочная ситуация, на которую нужно соответственно реагировать. Чего чейчас сделать без кривых заплаток невозможно..
 
Кажется, мы друг друга не слышим. Или не понимаем )
 
А на генерацию тиковых данных эта заполнение никак не отразиться?
 
nikkei:
А на генерацию тиковых данных эта заполнение никак не отразиться?
Если генерация из стандартных графиков (стандартными средствами МТ) - не отразится.
 
Пробовал переименовывать имя файла заполненной истории и подсовывать вместо неполной - вообще не хочет генерировать тики в тестере. Там наверное формат файла другой, так что наверное для бэктеста не покатил, только в реалтайме сгодиться. 
 
Нет, можно и на "заштопанных" графиках тестировать.
Только для этого кроме изменения имени файла надо изменить имя символа в заголовке файла.

Для этого в эксперте AllMinutes надо везде, где строка "ALL" соединяется со строкой _Symbol[curChart] (имя символа), оставить только _Symbol[curChart].
Будьте внимательны, иногда они объединяются функцией StringConcatenate(), тогда, если аргумена у функции всего 2, её использовать вообще не надо. Например, вместо
StringConcatenate( "ALL", _Symbol[curChart] )
должно быть
_Symbol[curChart]

Но если аргументов больше, функцию надо оставить, просто удалив из неё "ALL". Например, вместо
StringConcatenate( "ALL", _Symbol[curChart], _Period[curChart], ".hst" );
должно быть
StringConcatenate( _Symbol[curChart], _Period[curChart], ".hst" );


Кроме того, график соответствующего символа и периода должен быть закрыт. Иначе МТ сам скачает "правильные" (на залатанные) котировки.
А вообще, как по мне, такое тестирование не имеет смысла =)
Лучше тестировать на стандартном инструменте, а индикаторы считать по ALL-графикам. Для этого достаточно сгенерировать необходимые графики, открыть их в режиме офф-лайн, и при расчёте индикаторов первым аргументом указывать StringConcatenate( "ALL", Symbol() )

Удачи ;)
 

[Quote]Пробовал переименовывать имя файла заполненной истории и подсовывать вместо неполной - вообще не хочет генерировать тики в тестере. Там наверное формат файла другой, так что наверное для бэктеста не покатил, только в реалтайме сгодиться. [/Quote]
А я просто импортировал котировки из ALL... да и всё... :)
Скажи, komposter, а можно ли таким образом засунуть в тестер реальные тиковые котировки? Вроде как ребята с MetaQuotes говорили что можно. ..

 
Но вот что интересно... Сваял простенький советник с такой вот строкой:
WriteLineInFile(esFileNameOfReport,GetCurRusTime()+"Минута: "+TimeMinute(CurTime()));
Из залатанных минуток сконвертировал все остальные таймфреймы, удалил все .fxt. Тестирую, модель "Все тики". Жму галку "пересчитать". На таймфрейме М1 все окейно, минутка к минутке... А вот на М15, например, опять пропуски минуток... Вопрос: откуда этот гад (тестер) берет минутки? Есть подозрение, что он все по тому же алгоритму просто напросто игнорирует минутки у которых OHLC одинаковы... Вопрос: зачем тогда нужно лотание дыр?
Причина обращения: