По периодам графика - поищите скрипт period_converter.
А масштаб графика фиксируется в свойствах грайика (пр. кнопка мыши на графике - меню "Свойства" или F8)
А масштаб графика фиксируется в свойствах грайика (пр. кнопка мыши на графике - меню "Свойства" или F8)
Спасибо, komposter, что откликнулись.
По масштабу вопрос исчерпан.
period_converter нашел и нашел, что для изменения таймфрейма в коде меняется значение ExtPeriodMultiplier.
Это то что надо, но одна загвоздка - скрипт запускается но изменений на графике никаких:( - нет достаточных знаний по работе с кодом и с МТ4.
Подскажите, кто знает, где об этом почитать, или перелопачивать весь инет и конференции по теме?
По масштабу вопрос исчерпан.
period_converter нашел и нашел, что для изменения таймфрейма в коде меняется значение ExtPeriodMultiplier.
Это то что надо, но одна загвоздка - скрипт запускается но изменений на графике никаких:( - нет достаточных знаний по работе с кодом и с МТ4.
Подскажите, кто знает, где об этом почитать, или перелопачивать весь инет и конференции по теме?
СПАСИБО !!!
Теперь остался открытым вопрос, как привязать график к коннкретной минуте/часу начала отсчета не обрезая данные слева. К примеру есть график М144 и как ему (графику/индикатору) указать начало отсчета минуту 2006.01.06 15:51 ?
Спасибо.
Спасибо.
Чуть подправить код скрипта, чтоб он данные до определённого времени не трогал ;)
В цикл, в котором идёт перебор баров вставить что-то типа:
В цикл, в котором идёт перебор баров вставить что-то типа:
if ( Time[i] < StrToTime(2006.01.06 15:51) ) { continue; }
Довольно громоздко получается... каждый сигнал поправлять код.
А можно-ли сделать так, чтоб точку отсчета задавать в самом period_converter как и таймфрейм задается.
Например если точка отсчета 0 - то и вопросов нет, а если YYYY.MM.DD HH:MM - то от этого тика как влево так и вправо по оси времени и конвертировать.
Если это сделать не сложно, то кусок кода, который вставить надо, as is процитируйте.
А можно-ли сделать так, чтоб точку отсчета задавать в самом period_converter как и таймфрейм задается.
Например если точка отсчета 0 - то и вопросов нет, а если YYYY.MM.DD HH:MM - то от этого тика как влево так и вправо по оси времени и конвертировать.
Если это сделать не сложно, то кусок кода, который вставить надо, as is процитируйте.
Не будет-ли любезен, кто-нибудь знающий, куда вставить строку, приведенную Уважаемым komposter
указать ЭТО место в коде period_converter
указать ЭТО место в коде period_converter
Чуть подправить код скрипта, чтоб он данные до определённого времени не трогал ;)
В цикл, в котором идёт перебор баров вставить что-то типа:
if ( Time[i] < StrToTime(2006.01.06 15:51) ) { continue; }
В цикл, в котором идёт перебор баров вставить что-то типа:
if ( Time[i] < StrToTime(2006.01.06 15:51) ) { continue; }
//+------------------------------------------------------------------+ //| Period_Converter.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property show_inputs #include <WinUser32.mqh> extern int ExtPeriodMultiplier=3; // new period multiplier factor int ExtHandle=-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=Period()*ExtPeriodMultiplier; int i_digits=Digits; int i_unused[13]; //---- 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]; } } FileFlush(ExtHandle); Print(cnt," record(s) written"); //---- collect incoming ticks int last_time=LocalTime()-5; while(IsStopped()==false) { 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]; } 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; } } } //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void deinit() { if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; } } //+------------------------------------------------------------------+
Примерно так:
extern int ExtPeriodMultiplier=3; // new period multiplier factor int ExtHandle=-1; ................. extern string StartTime = "2006.01.06 15:51"; //дата начала "сборки" файла истории ............ ............. for(i=start_pos-1;i>=0; i--) { time0=Time[i]; if ( time0 < StrToTime(StartTime) ) { continue; } //вот СЮДА
Итого 2 строки. Не проверял. Может не работать ;)
Спасибо за разъяснения, но, как всегда не все гладко.
С
С
extern string StartTime = "2006.01.06 15:51"; //дата начала "сборки" файла истории
разобрался. Перед выполнением запрашивает дату начала перебора и т.д. - эта часть работает,
а вот с
for(i=start_pos-1;i>=0; i--) { time0=Time[i]; if ( time0 < StrToTime(StartTime) ) { continue; } //вот СЮДА
сложнее. Если без { continue; } , то скрипт запускается , но в результатах история с одним баром, да и та
не открывается, а если с { continue; }, то скрипт не запускается вообще.
Ниже кусок кода, с которым вообще не запускается скрипт.
i_time=Time[start_pos]/periodseconds; i_time*=periodseconds; for(i=start_pos-1;i>=0; i--) { time0=Time[i]; if(time0<StrToTime(StartTime)){continue;} // <-- ЭТО МЕСТО, КОТОРОЕ НЕ РАБОТАЕТ :( HELP! { 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);
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для тех.анализа требуется график с произвольным (настраеваемым) таймфреймом. Допустим от 1 минуты до 999 минут, от 1 часа до 999 и т.д. Как его в МТ реализовать?
И второе: как у графика отключить масштабирование и зафиксировать его ( как по вертикали так и по горизонтали).
Спасибо.