2 Merab Открой график М1. Прицепи к нему period_converter с параметром, который тебе нужен. 45, если тебе нужен ТФ М45, 120, если тебе нужен ТФ Н2.
открыл график М1 EURUSD прицепил на него period_converter с параметром М10. Затем открыл грайфик EURUSD M10 - через минуту в журнале появляется надпись "2006.05.09 16:02:31 Script period_converter EURUSD,M1: removed " и никаких движений на М10 не замечалось ни внутри этой минуты, ни, естественно, потом. Запускаем еще раз 2006.05.09 16:07:24 Script period_converter EURUSD,M1: loaded successfully и опять 2006.05.09 16:08:04 Script period_converter EURUSD,M1: removed
Никаких движений на графике М10
Потом открой оффлайн график - меню "Файл\Открыть автономно". Найди там (если, допустим прицепил конвертер на EURUSD) инструмент с именем EURUSD,M45 для первого случая, или EURUSD,H2 для второго случая. На этих нестандартных фреймах увидишь всё, что тебе нужно. Т.е. график будет двигаться, как любой стандартный ТФ. Можешь вешать любых индюков и экспертов. Всё будет работать. Только минутное окно закрывать ни в коем случае нельзя. В этом случае твой нестандартный фрейм "шевелиться" перестанет. Если тебе надо одновременно наблюдать несколько нестандартных фреймов, тогда тебе надо открыть несколько минутных и на каждый минутный повесить конвертер с нужным периодом. А потом открыть все соответствующие "автономные". Все нестандартные будут "шевелиться". Не очень удобно, но других вариантов нет. Но хоть такой есть...
Скрипт (Script) - программа, предназначенная для одноразового выполнения каких-либо действий. В отличие от экспертов, скрипты запускаются не потиково, а по запросу. Скрипты хранятся в директории каталог_терминала\experts\scripts
По всей видимости, скрипты и не предназначены для подобных действий - это надо делать индикатор на основе этого скрипта.
По всей видимости, скрипты и не предназначены для подобных действий - это надо делать индикатор на основе этого скрипта.
Скрипт period_converter имеет бесконечный цикл, который обновляет данные по приходу новых тиков и посылает команду окну нестандартного графика (если он открыт) для обновления. Поэтому этот зацикленный скрипт сам не должен выгружаться.
Я не знаю, какой вариант период конвертера Вы использовали
Скрипт (Script) - программа, предназначенная для одноразового выполнения каких-либо действий. В отличие от экспертов, скрипты запускаются не потиково, а по запросу. Скрипты хранятся в директории каталог_терминала\experts\scripts
По всей видимости, скрипты и не предназначены для подобных действий - это надо делать индикатор на основе этого скрипта.
оказывается неуместной ? Учись читать (в т.ч. между строк)
Открой график М1. Прицепи к нему period_converter с параметром, который тебе нужен. 45, если тебе нужен ТФ М45, 120, если тебе нужен ТФ Н2.
открыл график М1 EURUSD прицепил на него period_converter с параметром М10. Затем открыл грайфик EURUSD M10 - через минуту в журнале появляется надпись "2006.05.09 16:02:31 Script period_converter EURUSD,M1: removed " и никаких движений на М10 не замечалось ни внутри этой минуты, ни, естественно, потом.
Запускаем еще раз
2006.05.09 16:07:24 Script period_converter EURUSD,M1: loaded successfully
и опять
2006.05.09 16:08:04 Script period_converter EURUSD,M1: removed
Никаких движений на графике М10
Вопрос, что я делаю не так и почему не работает?
По всей видимости, скрипты и не предназначены для подобных действий - это надо делать индикатор на основе этого скрипта.
Скрипт period_converter имеет бесконечный цикл, который обновляет данные по приходу новых тиков и посылает команду окну нестандартного графика (если он открыт) для обновления. Поэтому этот зацикленный скрипт сам не должен выгружаться.
Я не знаю, какой вариант период конвертера Вы использовали
//+------------------------------------------------------------------+ //| 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; } } //+------------------------------------------------------------------+2006.05.09 17:02:29 period_converter EURUSD,M1: deinitialized
2006.05.09 17:02:29 period_converter EURUSD,M1: expert stopped
2006.05.09 17:02:29 period_converter EURUSD,M1: dll calls are not allowed; 'user32.dll'-'PostMessageA'
2006.05.09 17:02:29 period_converter EURUSD,M1: Chart window detected
2006.05.09 17:02:28 period_converter EURUSD,M1: 453 record(s) written
2006.05.09 17:02:23 period_converter EURUSD,M1: loaded successfully
По всей видимости, скрипты и не предназначены для подобных действий - это надо делать индикатор на основе этого скрипта.
ВОт здесь надо почитать - "MQL4: Вызовы функций из библиотеки"
2006.05.09 17:02:29 period_converter EURUSD,M1: expert stopped
2006.05.09 17:02:29 period_converter EURUSD,M1: dll calls are not allowed; 'user32.dll'-'PostMessageA'
Вот и ответ.
Надо разрешить вызовы dll в свойствах скрипта.