Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
оказывается неуместной ? Учись читать (в т.ч. между строк)
Открой график М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 в свойствах скрипта.