Проверяйте, чтобы в High была наибольшая цена из OHLC, а в Low - наименьшая.
Вставить свой фильтр для отсеивания-исправления таких баров.
Спасибо.
Немного исправил ваш вариант:
#define AMOUNT_OHLCV 5 //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= // записывает в файл данные начиная от текущего положения //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= void WriteBar( int Pos ){ static double OLHCV[AMOUNT_OHLCV]; for (int i = 0; i < AMOUNT_OHLCV - 1; i++) OLHCV[i] = iCustom(0,0,"Grafic_for_History",ener,speed,i,Pos); double Tmp = OLHCV[ArrayMaximum(OLHCV, AMOUNT_OHLCV - 1, 0)]; OLHCV[1] = OLHCV[ArrayMinimum(OLHCV, AMOUNT_OHLCV - 1, 0)]; OLHCV[2] = Tmp; OLHCV[AMOUNT_OHLCV - 1] = 600; FileWriteInteger(handle, Time[Pos]); //4 байта, по умолчанию FileWriteArray(handle, OLHCV, 0, AMOUNT_OHLCV); FileFlush(handle); }
Попробовав увидеть такие бары не нашел их,
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= // записывает в файл данные начиная от текущего положения //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= void WriteBar( int Pos ){ close =iCustom(0,0,"Grafic_for_History",ener,speed,0,Pos); open = iCustom(0,0,"Grafic_for_History",ener,speed,1,Pos); high = iCustom(0,0,"Grafic_for_History",ener,speed,3,Pos); low = iCustom(0,0,"Grafic_for_History",ener,speed,4,Pos); if((high<open||high<close||high<low)||(low>open||low>close||low>high)){ Alert("Fib,jxrf yf ,fht "+Pos); } FileWriteInteger(handle, Time[Pos]); //4 байта, по умолчанию FileWriteDouble(handle, open); //8 байтов, по умолчанию FileWriteDouble(handle, low); //8 байтов, по умолчанию FileWriteDouble(handle, high); //8 байтов, по умолчанию FileWriteDouble(handle, close); //8 байтов, по умолчанию FileWriteDouble(handle, 600); //8 байтов, по умолчанию //и того 44 байта FileFlush(handle); }
Уменьшил количество записываемых баров -7 баров и все отлично, спосибо. ( WriteBars(Bars-7); //пишем все бары )
Немного исправил ваш вариант:
#define AMOUNT_OHLCV 5 //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= // записывает в файл данные начиная от текущего положения //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= void WriteBar( int Pos ){ static double OLHCV[AMOUNT_OHLCV]; for (int i = 0; i < AMOUNT_OHLCV - 1; i++) OLHCV[i] = iCustom(0,0,"Grafic_for_History",ener,speed,i,Pos); double Tmp = OLHCV[ArrayMaximum(OLHCV, AMOUNT_OHLCV - 1, 0)]; OLHCV[1] = OLHCV[ArrayMinimum(OLHCV, AMOUNT_OHLCV - 1, 0)]; OLHCV[2] = Tmp; OLHCV[AMOUNT_OHLCV - 1] = 600; FileWriteInteger(handle, Time[Pos]); //4 байта, по умолчанию FileWriteArray(handle, OLHCV, 0, AMOUNT_OHLCV); FileFlush(handle); }
А э зачем, проверять ведь надо при написании, в дальнейшем ведь при появлении ошибки Вы уведите ее в журнале терм.,
иначе ошибка затрется (хай подменится на опен если опен > хая лоу и клосе).
Думаю не рационально использовать, да и строк больше получается ))
Спасибо за помощь!
А э зачем, проверять ведь надо при написании, в дальнейшем ведь при появлении ошибки Вы уведите ее в журнале терм
Если есть вероятность ошибки, почему не исправить?
Например, NASDAQ, Yahoo! Finance и Google Finance содержат иногда в своих исторических данных подобные ошибки, а иногда не содержат. Поэтому здесь сразу учтены варианты таких ошибок, что вам рекомендую сделать тоже.
Если есть вероятность ошибки, почему не исправить?
Например, NASDAQ, Yahoo! Finance и Google Finance содержат иногда в своих исторических данных подобные ошибки, а иногда не содержат. Поэтому здесь сразу учтены варианты таких ошибок, что вам рекомендую сделать тоже.
Спасибо, отличный скрипт для примера.
Я формирую графики из "обзора рынка", ошибка возможна лишь когда нет данных какого элемента,
пересчет новых баров через 20 сек., столько времени нужно моему случаю на подкачку данных, решает проблему.
if(дополнительный_пересчет_через(20)>0){ FileClose(handle); ...
Еще раз Спасибо!
Проверяйте, чтобы в High была наибольшая цена из OHLC, а в Low - наименьшая.
При формировании баров из по тиковой истории, при последующем открытии оффлайн графика примерно половина баров не отображается, хотя изначально в файл записывается.
В журнале сообщение такое же - как у топикстартера.
Например: Бар с параметрами T=04:00:00 O=1.46520000 L=1.46410000 H=1.46670000 C=1.46670000 V=815 по мнению терминала ошибочен.
Вылечилось путем добавления к high + 0.00000001 и к low - 0.00000001.
Какой-то бред....
..........
Посмотрел в hex редакторе файлы истории терминала, в них полно одинаковых значений high и open, low и close и при этом никаких ошибок терминала нет.
...............
Кто в материале, прокомментируйте пожалуйста ситуацию.
Увеличьте Дижитс до 8, наверно в расчетах ошибка, и проверьте high >= low уменьшить колво Bars - 10
if(hi<lo){Alert(hi+" < "+lo);return;}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= // создает и записывает в файл заголовок hst файла //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= void CreateHandle(string Symbol_Create, int &handle.XXX){ int Tmp[15], TmpTime; string FileName = Symbol_Create + Period() + ".hst"; handle.XXX = FileOpenHistory(FileName, FILE_BIN|FILE_WRITE); FileWriteInteger(handle.XXX, 400); //4 байта, по умолчанию FileWriteString(handle.XXX, "Created by xz", 64); //64 FileWriteString(handle.XXX, Symbol_Create, 12); //12 FileWriteInteger(handle.XXX, Period()); //4 байта, по умолчанию FileWriteInteger(handle.XXX, 6); //4 байта, по умолчанию FileWriteArray(handle.XXX, Tmp, 0, 15); //15*4=60 и того 148 байт на заголовок !!! //int, bool, datetime и color записываются поэлементно как 4-байтовые целые //double записываются поэлементно как 8-байтовые }
терминал ест только high < low и считает их колво потом пишет в журнал .
"хотя изначально в файл записывается" читали файл после создания но перед открытием оффлайн граф?!!
При формировании баров из по тиковой истории, при последующем открытии оффлайн графика примерно половина баров не отображается, хотя изначально в файл записывается.
В журнале сообщение такое же - как у топикстартера.
Например: Бар с параметрами T=04:00:00 O=1.46520000 L=1.46410000 H=1.46670000 C=1.46670000 V=815 по мнению терминала ошибочен.
Вылечилось путем добавления к high + 0.00000001 и к low - 0.00000001.
Какой-то бред....
..........
Посмотрел в hex редакторе файлы истории терминала, в них полно одинаковых значений high и open, low и close и при этом никаких ошибок терминала нет.
...............
Кто в материале, прокомментируйте пожалуйста ситуацию.
У меня были те же ошибки, поставив проверку, что бы High был не меньше, а Low не больше, чем любое другое значение и не было бы 2 баров с одним временем, как результат исправил собственную ошибку в алгоритме и теперь где надо бывают нулевые бары где H=O=L=C и Volume=0;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Создаю индексы валют, а при обновлении графика
2011.02.23 20:07:35 HistoryBase: 6 errors in '#USD60'
Как избавиться от ошибки (надоели красные замечания фильтра терминала в журнале) .
Смотрел гугел, оказывается такие ошибки и в архиве котировок есть и связанно с плохим временем бара (6 ошибок не много, но журнал нужен адекватным).
Далее записываю бары ()
Хелп ми если кто нить сталкивался, спасибо.