Спасибо.
Проверим.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот код простого индикатора для пробы:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
#property indicator_color1 Red
#property indicator_label1 "Proba"
input int _intPeriod=15;
input ENUM_MA_METHOD _enumMA=MODE_LWMA;
input ENUM_APPLIED_PRICE _enumPrice=PRICE_CLOSE;
double _adblArray[];
int _intHandle_iMA;
//-------------------------------------------------------------------------------------------------
int OnInit() {
SetIndexBuffer(0,_adblArray,INDICATOR_DATA);
ArraySetAsSeries(_adblArray,true);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
ArrayInitialize(_adblArray,0.0);
_intHandle_iMA=iMA(_Symbol,_Period,_intPeriod,0,_enumMA,_enumPrice);
Print("OnInit");
return(0);
}
//-------------------------------------------------------------------------------------------------
int OnCalculate (const int rates_total,const int prev_calculated,const datetime& time[],
const double& open[],const double& high[],const double& low[],const double& close[],
const long& tick_volume[],const long& volume[],const int& spread[]) {
int intBarsForCalc;
if(prev_calculated > rates_total || prev_calculated <= 0) {
intBarsForCalc = rates_total - _intPeriod;
Print("prevCalc= "+prev_calculated);
}
else {
intBarsForCalc = rates_total - prev_calculated + 1;
}
CopyBuffer(_intHandle_iMA,0,0,intBarsForCalc,_adblArray);
return(rates_total);
}
//-------------------------------------------------------------------------------------------------
Если вызвать диалог свойств этого индикатора и нажать кнопку ОК не изменяя Входных параметров, то иногда, но часто происходит следующее:
OnInit отрабатывается - печатается "OnInit"
OnCalculate тоже отрабатывается, но prev_calculated не обнуляется, а остается прежним. (Это видно по печати Print("prevCalc= "+prev_calculated))
Поэтому график индикатора исчезает и начинает постепенно отрисовываться с этого момента.
А иногда prev_calculated обнуляется и при следующем тике индикатор считает предыдущие бары, как и положено.
Из пяти раз вызова Свойств индикатора и нажатии ОК без изменения такая ситуация у меня обязательно случается.
Если в окне диалога Свойств индикатора изменить какую-нибудь входную переменную и потом нажать ОК, то вроде все работает нормально - prev_calculated обнуляется и индикатор полностью пересчитывается.
Заметил это не я, но все-таки решил задать вопрос.
Уважаемые разработчики! Вряд ли это можно назвать фичей :)
Прошу Вас рассмотреть данный случай. Спасибо.