Лечится просто.
В исходном тексте Period_converter.mq4 в конце последнего цикла (перед его завершающей фигурной скобкой) вставьте Sleep(500);
Не забудьте откомпилировать
В исходном тексте Period_converter.mq4 в конце последнего цикла (перед его завершающей фигурной скобкой) вставьте Sleep(500);
Не забудьте откомпилировать
Тогда получиться, что не будет отрабатываться каждый тик.
А нельзя ли понежнее...?
А нельзя ли понежнее...?
На самом деле в скрипте обрабатываются не приход тиков, а новое состояние текущего бара. Поэтому ничего страшного.
Я использую в работе зацикленные скрипт и эксперт.
В МТ 4 оч. хороший движок. Около 10 000 строк кода обрабатывается в цикле прибл за 5 - 50 мс в зависимости от ситуации. Небольшие программные фрагменты будут обрабатываться ещё быстрее, скажем от 1 до 5 мс. Одним словом, если Вы поставите Sleep(10) то это может разгрузить процессор со 100% до 10% ( или меньше, в зависимости от длительности обработки Вашего кода).
В МТ 4 оч. хороший движок. Около 10 000 строк кода обрабатывается в цикле прибл за 5 - 50 мс в зависимости от ситуации. Небольшие программные фрагменты будут обрабатываться ещё быстрее, скажем от 1 до 5 мс. Одним словом, если Вы поставите Sleep(10) то это может разгрузить процессор со 100% до 10% ( или меньше, в зависимости от длительности обработки Вашего кода).
Чтоб что-то сказать по коду, нужен как минимум код.
Это стандартный Period_Converter, который в МТ4 идет
//+------------------------------------------------------------------+
//| 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; }
}
//+------------------------------------------------------------------+
Cо стандартным - к разработчикам.
А у Вас { SK } есть похожее по смыслу ПО?
А у Вас { SK } есть похожее по смыслу ПО?
Нету.
У меня только вот это "MQL4: AutoGraf - графический способ управления торговлей."
Там есть такое:AG_Semafor_scr.mq4, в кот. такой фрагмент кода:
//--------------------------------------------------------------------------------------------------------------------
while ( All_Yes==1 && Tick==0 ) // Теперь нас может прервать только тик
{ // ..или если кто-то ушёл с поля боя
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AG_Work_scr(); // Вот здесь-то всё и происходит
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All_Yes = 0; // Обнуление, т.к. GV могут уже..
Tick = 1; // .. и не существовать
All_Yes = GlobalVariableGet(GV_All_Yes );
Tick = GlobalVariableGet(GV_Tick ); // Ловим новый тик. Если он попался..
// .. то выходим из текущего цикла..
// .. интересоваться состоянием кнопки
if (GlobalVariableGet(GV_Extern_New)==1)AG_Renew_scr();
Sleep(1);
}
Анализировать код без представления о программе нет смысла, но к данному вопросу имеет отношение бесконечный цикл и в нём пауза всего 1мс. Для справки: AG_Work_scr - сам основной довольно большой код.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Заметил следующую картину: при запущенном скрипте Period_converter и открытом графике, в который происходит конвертация, загрузка процессора компьютера 100%. Пробовал на двух разных машинах - картина одинаковая (Windows XP + последняя версяи терминала от этого брокера http://www.usb.com.ua/common/f/ru/services/forex/library/mt4setup.zip ).
Как вылечить эту проблему?