Igor Knyazkov:
Здравствуйте. Не могу понять, почему во время оптимизации первые 400-430 проходов пролетают быстро, а потом начинается НЕЧТО. Оптимизация продолжается ТАААК медленно! Процессор у меня неслабый- i7 4790K. Но ооочень медленная оптимизация! Причем, насколько я помню, это началось после установки MQL5 cloud network.
Еще один вопрос: какой интервал будет АДЕКВАТНЫМ для оптимизации советника торгующего на таймфрейме М1?
Здравствуйте. Не могу понять, почему во время оптимизации первые 400-430 проходов пролетают быстро, а потом начинается НЕЧТО. Оптимизация продолжается ТАААК медленно! Процессор у меня неслабый- i7 4790K. Но ооочень медленная оптимизация! Причем, насколько я помню, это началось после установки MQL5 cloud network.
Еще один вопрос: какой интервал будет АДЕКВАТНЫМ для оптимизации советника торгующего на таймфрейме М1?
Вопрос по крайней мере некорректен без предоставления кода. Как вариант Вы неэкономно работаете:
- на каждом тике делаете неэффективные пересчёты
- на каждом тике обращаетесь на всю глубину торговой истрии
Vladimir Karputov:
Согласен, без кода мало, что можно сказать...Но, первые несколько десятков прогонов пролетают быстро. Причем, в MQL5 cloud network происходит тоже самое: по началу все летает, а после 400-450-ого прохода удаленные компы начинают "задыхаться".
Вопрос по крайней мере некорректен без предоставления кода. Как вариант Вы неэкономно работаете:
- на каждом тике делаете неэффективные пересчёты
- на каждом тике обращаетесь на всю глубину торговой истрии
Igor Knyazkov:
Согласен, без кода мало, что можно сказать...Но, первые несколько десятков прогонов пролетают быстро. Причем, в MQL5 cloud network происходит тоже самое: по началу все летает, а после 400-450-ого прохода удаленные компы начинают "задыхаться".
Я дал целых две наводки.
Согласен, без кода мало, что можно сказать...Но, первые несколько десятков прогонов пролетают быстро. Причем, в MQL5 cloud network происходит тоже самое: по началу все летает, а после 400-450-ого прохода удаленные компы начинают "задыхаться".
Vladimir Karputov:
Я дал целых две наводки.
Я нашел, в чем может быть проблема... У меня период индикатора-параметр оптимизируемый и он доходит до значения 300, и на каждом тике все значения копируются в буфер. Возможно, пока период индикатора небольшой, это не очень отображается на скорости прохода. Я дал целых две наводки.
Еще я использую стандартные функции iHigh() и iLow() из справочника, но они у меня вынесены за OnTick(). Больше к истории я нигде не обращаюсь. Я только перешел с MQL4.
Igor Knyazkov:
Я нашел, в чем может быть проблема... У меня период индикатора-параметр оптимизируемый и он доходит до значения 300, и на каждом тике все значения копируются в буфер. Возможно, пока период индикатора небольшой, это не очень отображается на скорости прохода.
Еще я использую стандартные функции iHigh() и iLow() из справочника, но они у меня вынесены за OnTick(). Больше к истории я нигде не обращаюсь. Я только перешел с MQL4.
Вы хоть не на каждом тике создаёте хендл индикатора? Какой индикатор используете? Покажите обращение к индикатору в OnTick()/
Я нашел, в чем может быть проблема... У меня период индикатора-параметр оптимизируемый и он доходит до значения 300, и на каждом тике все значения копируются в буфер. Возможно, пока период индикатора небольшой, это не очень отображается на скорости прохода.
Еще я использую стандартные функции iHigh() и iLow() из справочника, но они у меня вынесены за OnTick(). Больше к истории я нигде не обращаюсь. Я только перешел с MQL4.
Vladimir Karputov:
Вы хоть не на каждом тике создаёте хендл индикатора? Какой индикатор используете? Покажите обращение к индикатору в OnTick()/
Вы хоть не на каждом тике создаёте хендл индикатора? Какой индикатор используете? Покажите обращение к индикатору в OnTick()/
В OnInit() у меня следующее: double boll=iBands(symb,PERIOD_CURRENT,periodBB,BBshift,BBdeviation,PRICE_CLOSE);
В OnTick() :
double _bollm[], _bolllow[], _bollh[];
ArraySetAsSeries(_bollh,true);
ArraySetAsSeries(_bollm,true);
ArraySetAsSeries(_bolllow,true);
CopyBuffer(boll,0,1,periodBB,_bollm);
CopyBuffer(boll,1,1,periodBB,_bollh);
CopyBuffer(boll,2,1,periodBB,_bolllow);
ArraySetAsSeries(_bollh,true);
ArraySetAsSeries(_bollm,true);
ArraySetAsSeries(_bolllow,true);
CopyBuffer(boll,0,1,periodBB,_bollm);
CopyBuffer(boll,1,1,periodBB,_bollh);
CopyBuffer(boll,2,1,periodBB,_bolllow);
Igor Knyazkov:
В OnInit() у меня следующее: boll=iBands(symb,PERIOD_CURRENT,periodBB,BBshift,BBdeviation,PRICE_CLOSE);
В OnTick() :
double _bollm[], _bolllow[], _bollh[];
ArraySetAsSeries(_bollh,true);
ArraySetAsSeries(_bollm,true);
ArraySetAsSeries(_bolllow,true);
CopyBuffer(boll,0,1,periodBB,_bollm);
CopyBuffer(boll,1,1,periodBB,_bollh);
CopyBuffer(boll,2,1,periodBB,_bolllow);
ArraySetAsSeries(_bollh,true);
ArraySetAsSeries(_bollm,true);
ArraySetAsSeries(_bolllow,true);
CopyBuffer(boll,0,1,periodBB,_bollm);
CopyBuffer(boll,1,1,periodBB,_bollh);
CopyBuffer(boll,2,1,periodBB,_bolllow);
Вот код для СОВЕТНИКА: объявление, использование и получение данных с индикатора iBands ... Сейчас сделаю....
Код:
//+------------------------------------------------------------------+
//| Test_iBands.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
int handle_iBands; // variable for storing the handle of the iBands indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iBands
handle_iBands=iBands(Symbol(),Period(),20,0,2.0,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iBands==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iBands indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double upper =iBandsGet(UPPER_BAND,0);
double lower =iBandsGet(LOWER_BAND,0);
double middle=iBandsGet(BASE_LINE,0);
//---
Comment("Upper ",DoubleToString(upper,Digits()+1),"\n",
"Lower ",DoubleToString(lower,Digits()+1),"\n",
"Middle ",DoubleToString(middle,Digits()+1));
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iBands |
//| the buffer numbers are the following: |
//| 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
{
double Bands[];
ArraySetAsSeries(Bands,true);
//--- reset error code
ResetLastError();
//--- fill a part of the iStochasticBuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iBands,buffer,0,index+1,Bands)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(Bands[index]);
}
//+------------------------------------------------------------------+
//| Test_iBands.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
int handle_iBands; // variable for storing the handle of the iBands indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iBands
handle_iBands=iBands(Symbol(),Period(),20,0,2.0,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iBands==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iBands indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double upper =iBandsGet(UPPER_BAND,0);
double lower =iBandsGet(LOWER_BAND,0);
double middle=iBandsGet(BASE_LINE,0);
//---
Comment("Upper ",DoubleToString(upper,Digits()+1),"\n",
"Lower ",DoubleToString(lower,Digits()+1),"\n",
"Middle ",DoubleToString(middle,Digits()+1));
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iBands |
//| the buffer numbers are the following: |
//| 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
{
double Bands[];
ArraySetAsSeries(Bands,true);
//--- reset error code
ResetLastError();
//--- fill a part of the iStochasticBuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iBands,buffer,0,index+1,Bands)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(Bands[index]);
}
//+------------------------------------------------------------------+
и результат работы:
Файлы:
Test_iBands.mq5
7 kb
Vladimir Karputov:
СПАСИБО за помощь! Теперь все понятно!
Код:
//+------------------------------------------------------------------+
//| Test_iBands.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
int handle_iBands; // variable for storing the handle of the iBands indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iBands
handle_iBands=iBands(Symbol(),Period(),20,0,2.0,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iBands==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iBands indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double upper =iBandsGet(UPPER_BAND,0);
double lower =iBandsGet(LOWER_BAND,0);
double middle=iBandsGet(BASE_LINE,0);
//---
Comment("Upper ",DoubleToString(upper,Digits()+1),"\n",
"Lower ",DoubleToString(lower,Digits()+1),"\n",
"Middle ",DoubleToString(middle,Digits()+1));
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iBands |
//| the buffer numbers are the following: |
//| 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
{
double Bands[];
ArraySetAsSeries(Bands,true);
//--- reset error code
ResetLastError();
//--- fill a part of the iStochasticBuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iBands,buffer,0,index+1,Bands)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(Bands[index]);
}
//+------------------------------------------------------------------+
//| Test_iBands.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
int handle_iBands; // variable for storing the handle of the iBands indicator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create handle of the indicator iBands
handle_iBands=iBands(Symbol(),Period(),20,0,2.0,PRICE_CLOSE);
//--- if the handle is not created
if(handle_iBands==INVALID_HANDLE)
{
//--- tell about the failure and output the error code
PrintFormat("Failed to create handle of the iBands indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped early
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double upper =iBandsGet(UPPER_BAND,0);
double lower =iBandsGet(LOWER_BAND,0);
double middle=iBandsGet(BASE_LINE,0);
//---
Comment("Upper ",DoubleToString(upper,Digits()+1),"\n",
"Lower ",DoubleToString(lower,Digits()+1),"\n",
"Middle ",DoubleToString(middle,Digits()+1));
}
//+------------------------------------------------------------------+
//| Get value of buffers for the iBands |
//| the buffer numbers are the following: |
//| 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
{
double Bands[];
ArraySetAsSeries(Bands,true);
//--- reset error code
ResetLastError();
//--- fill a part of the iStochasticBuffer array with values from the indicator buffer that has 0 index
if(CopyBuffer(handle_iBands,buffer,0,index+1,Bands)<0)
{
//--- if the copying fails, tell the error code
PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculated
return(0.0);
}
return(Bands[index]);
}
//+------------------------------------------------------------------+
и результат работы:
Igor Knyazkov:
СПАСИБО за помощь! Теперь все понятно!
Пожалуйста 🙂. Как видите ничего сложного в MQL5 нет.
СПАСИБО за помощь! Теперь все понятно!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Еще один вопрос: какой интервал будет АДЕКВАТНЫМ для оптимизации советника торгующего на таймфрейме М1?