Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А можно в следушчем булде увидет опцию графика каторая заполнит пустые бары(кокда цена нименяется или нету цены) вот таким образом?
http://forum.alpari-idc.ru/attachment.php?attachmentid=33576&stc=1&d=1161123185
Вот мой код скрипта
//+------------------------------------------------------------------+ //| period_converter_all_nogaps.mq4 | //| Copyright © 2006, By T-1000 | //| irc://irc.omnitel.net/forex | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, By T-1000" #property link "irc://irc.omnitel.net/forex" #property show_inputs #include <WinUser32.mqh> int ExtPeriodMultiplier=2; // new period multiplier factor int ExtHandle=-1; //int ExtHandle2=-1; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { int i, start_pos, i_time, time0, last_fpos, periodseconds; double d_open, d_low, d_high, d_close, d_volume, last_volume; int hwnd=0,cnt=0; //---- History header int version=400; string c_copyright; string c_symbol=Symbol(); int i_period; int i_digits=Digits; int i_unused[13]; int timeperiod; int firsttimeperiod=Time[Bars-1]; int lasttimeperiod; int timeshift=Period(); int counter; if (timeshift !=1) { Alert("Error: This script MUST run in M1 period."); return(0); } for (counter=0;counter<5;counter++) { switch(counter) { case 0: ExtPeriodMultiplier=5;break;// M5 case 1: ExtPeriodMultiplier=15;break;// M15 case 2: ExtPeriodMultiplier=30;break;// M30 case 3: ExtPeriodMultiplier=60;break;// H1 case 4: ExtPeriodMultiplier=240;break;// H4 default:break; } i_period=Period()*ExtPeriodMultiplier; hwnd=0; cnt=0; //---- ExtHandle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE); if(ExtHandle < 0) return(-1); //---- write history file header c_copyright="(C)opyright 2003, MetaQuotes Software Corp."; FileWriteInteger(ExtHandle, version, LONG_VALUE); FileWriteString(ExtHandle, c_copyright, 64); FileWriteString(ExtHandle, c_symbol, 12); FileWriteInteger(ExtHandle, i_period, LONG_VALUE); FileWriteInteger(ExtHandle, i_digits, LONG_VALUE); FileWriteInteger(ExtHandle, 0, LONG_VALUE); //timesign FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync FileWriteArray(ExtHandle, i_unused, 0, 13); //---- write history file periodseconds=i_period*60; start_pos=Bars-1; d_open=Open[start_pos]; d_low=Low[start_pos]; d_high=High[start_pos]; d_volume=Volume[start_pos]; //---- normalize open time i_time=Time[start_pos]/periodseconds; i_time*=periodseconds; for(i=start_pos-1;i>=0; i--) { time0=Time[i]; if(time0>=i_time+periodseconds || i==0) { if(i==0 && time0<i_time+periodseconds) { d_volume+=Volume[0]; if (Low[0]<d_low) d_low=Low[0]; if (High[0]>d_high) d_high=High[0]; d_close=Close[0]; } last_fpos=FileTell(ExtHandle); last_volume=Volume[i]; FileWriteInteger(ExtHandle, i_time, LONG_VALUE); FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE); FileFlush(ExtHandle); cnt++; if(time0>=i_time+periodseconds) { i_time=time0/periodseconds; i_time*=periodseconds; d_open=Open[i]; d_low=Low[i]; d_high=High[i]; d_close=Close[i]; d_volume=last_volume; } } else { d_volume+=Volume[i]; if (Low[i]<d_low) d_low=Low[i]; if (High[i]>d_high) d_high=High[i]; d_close=Close[i]; } // fill gaps with last close price timeperiod=time0+periodseconds; lasttimeperiod=Time[i-1]; if (i>ExtPeriodMultiplier && lasttimeperiod > timeperiod) if (i>ExtPeriodMultiplier) while (lasttimeperiod >= timeperiod) { last_fpos=FileTell(ExtHandle); FileWriteInteger(ExtHandle, timeperiod-periodseconds, LONG_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, 1.0, DOUBLE_VALUE); FileFlush(ExtHandle); timeperiod=timeperiod+periodseconds; cnt++; } } FileFlush(ExtHandle); Print(Symbol(),ExtPeriodMultiplier,": ",cnt," record(s) written"); //---- collect incoming ticks int last_time=LocalTime()-5; while(IsStopped()==false && IsConnected() && !RefreshRates()) { int cur_time=LocalTime(); //---- check for new rates if(RefreshRates()) { time0=Time[0]; FileSeek(ExtHandle,last_fpos,SEEK_SET); //---- is there current bar? if(time0<i_time+periodseconds) { d_volume+=Volume[0]-last_volume; last_volume=Volume[0]; if (Low[0]<d_low) d_low=Low[0]; if (High[0]>d_high) d_high=High[0]; d_close=Close[0]; timeperiod=time0+periodseconds; lasttimeperiod=cur_time; // fill gaps with last close price while (lasttimeperiod >= timeperiod) { //Print(TimeToStr(i_time,TIME_DATE),": Filling gap.."); last_fpos=FileTell(ExtHandle); FileWriteInteger(ExtHandle, timeperiod-periodseconds, LONG_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, 1.0, DOUBLE_VALUE); FileFlush(ExtHandle); timeperiod=timeperiod+periodseconds; cnt++; } } else { //---- no, there is new bar d_volume+=Volume[1]-last_volume; if (Low[1]<d_low) d_low=Low[1]; if (High[1]>d_high) d_high=High[1]; //---- write previous bar remains FileWriteInteger(ExtHandle, i_time, LONG_VALUE); FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE); last_fpos=FileTell(ExtHandle); //---- i_time=time0/periodseconds; i_time*=periodseconds; d_open=Open[0]; d_low=Low[0]; d_high=High[0]; d_close=Close[0]; d_volume=Volume[0]; last_volume=d_volume; } //---- FileWriteInteger(ExtHandle, i_time, LONG_VALUE); FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE); FileFlush(ExtHandle); //---- if(hwnd==0) { hwnd=WindowHandle(Symbol(),i_period); if(hwnd!=0) Print("Chart window detected"); } //---- refresh window not frequently than 1 time in 2 seconds if(hwnd!=0 && cur_time-last_time>=2) { PostMessageA(hwnd,WM_COMMAND,33324,0); last_time=cur_time; } } } //---- if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; } } Alert("Periods gaps filling complete,\nplease close and re-run Metatrader."); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void deinit() { // if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; } //if(ExtHandle2>=0) { FileClose(ExtHandle2); ExtHandle2=-1; } } //+------------------------------------------------------------------+Правда скрипт с МТ4 воюет так как после подключения сервера бары истории MT переписывает заново и имеет некоторые ошыбки - истории ошыбки после запуска, но работает.
Я бы и сам мог бы такое вставитъ в МТ как опцию для полново отрисования графика "без дыр", но исходные файлы у вас... :)
А в виде эксперта я уже достаточно давно делал ;)
Статья посвящена реализации графиков без пропущенных баров.
Статья посвящена реализации графиков без пропущенных баров.
Я сам нипробовал запуститъ но люди говорят - с ошыбками глючит там...
http://forum.alpari-idc.ru/thread31138-17.html
А в принципе МТ мог бы иметъ болше опции для отрисования графика так как счас в принципе толъко свечи, ОХЛЦ, линия и отрисовка баров толко по новой цене и никак иначе.
Поставили русифицированную клавиатуру? А то приходилось напрягаться, чтобы читать транслит.
практика показала что это был ошибочный ход - создание группы... все чем она помогла - я нашел партнера - программера..."?
Насколько понял я, это не о моей проге =)
Или не так понял?
Или не так понял?
Надо почитатъ ветку выше.
Да,хорошо что в Лондон свой ноутбук забитим стуфом взял, а то бы опят бы транслитил:)))
Все равно не могу найти...
Можно ссылочку?
Не производите никаких манипуляций с историческими данными на терминале и все будет нормально. То есть, не импортируйте, не удаляйте и не изменяйте данных в терминале. Как все данные устаканятся, перестанет идти трафик на рефрешах измененной истории.
Я и не дергаюсь он сам сколько бы не висел столько и принимант и отправляет че-то... А вот на работе я не ставил 198 билд. А стоит там еще 193 и все ОК. Ничего лишнего не качает.