Доброго времени суток!
Прошу подсказать почему не перекрашивается цвет индикатора?
Смена положения работает, а цвет не меняется.
#property indicator_plots 1 #property indicator_buffers 2
#property indicator_separate_window #property indicator_plots 1 #property indicator_buffers 2 #property indicator_label1 "Symbol_1" #property indicator_type1 DRAW_COLOR_ARROW double bufferSymbol1[]; double bufferSymbolColor1[]; int chartBars = 2200; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, bufferSymbol1, INDICATOR_DATA); SetIndexBuffer(1, bufferSymbolColor1, INDICATOR_COLOR_INDEX); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); PlotIndexSetInteger(0, PLOT_ARROW, 111); PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 3); PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, clrMediumAquamarine); PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, clrBlack); PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, clrSandyBrown); //ArraySetAsSeries(bufferSymbol1, true); IndicatorSetInteger(INDICATOR_DIGITS, 2); IndicatorSetInteger(INDICATOR_FIXED_MAXIMUM, true); IndicatorSetInteger(INDICATOR_FIXED_MINIMUM, true); IndicatorSetDouble(INDICATOR_MAXIMUM, 100); IndicatorSetDouble(INDICATOR_MINIMUM, 0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 limit = prev_calculated - 1; if(prev_calculated <= 0) limit = 1; for(int c = limit; c < rates_total; c++) { if(iClose(_Symbol, PERIOD_CURRENT, c) > iClose(_Symbol, PERIOD_CURRENT, c - 1)) { bufferSymbol1[c] = 50; bufferSymbolColor1[c] = 0; } else { bufferSymbol1[c] = 15; bufferSymbolColor1[c] = 1; } } return(rates_total); } //+------------------------------------------------------------------+
Доброго времени!
Значительные изменения я увидел только в кол-ве расчетов баров.
В вашем коде ведется расчет всех доступных баров, я же хочу рассчитывать последние 2200.
Не ужели в этом нюанс прорисовки?
Весь нюанс указан в начале сообщения.
#property indicator_plots 1 #property indicator_buffers 2
Код я добавил потом, так на всякий случай, чтоб понятнее было.
Оказалось зря добавил)))
Ваш код выдавал ошибку "выход за пределы массива" мне лениво было смотреть код, поэтому сделал как мне удобнее.
ArraySetAsSeries(bufferSymbol1, true);
Почему только один буфер разворачиваете шиворот навыворот, а второй оставляете обычным?
Весь нюанс указан в начале сообщения.
Код я добавил потом, так на всякий случай, чтоб понятнее было.
Оказалось зря добавил)))
Ваш код выдавал ошибку "выход за пределы массива" мне лениво было смотреть код, поэтому сделал как мне удобнее.
Почему только один буфер разворачиваете шиворот навыворот, а второй оставляете обычным?
Благодарен вам.
Развернул буфер цветов и все заработало)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Прошу подсказать почему не перекрашивается цвет индикатора?
#property indicator_label1 "Symbol_1"
#property indicator_type1 DRAW_COLOR_ARROW
double bufferSymbol1[];
double bufferSymbolColor1[];
int chartBars = 2200;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
SetIndexBuffer(0, bufferSymbol1, INDICATOR_DATA);
SetIndexBuffer(1, bufferSymbolColor1, INDICATOR_COLOR_INDEX);
PlotIndexSetInteger(0, PLOT_ARROW, 111);
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 3);
PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, clrMediumAquamarine);
PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, clrBlack);
PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, clrSandyBrown);
ArraySetAsSeries(bufferSymbol1, true);
IndicatorSetInteger(INDICATOR_DIGITS, 2);
IndicatorSetInteger(INDICATOR_FIXED_MAXIMUM, true);
IndicatorSetInteger(INDICATOR_FIXED_MINIMUM, true);
IndicatorSetDouble(INDICATOR_MAXIMUM, 100);
IndicatorSetDouble(INDICATOR_MINIMUM, 0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//---
for(int c = 0; c < chartBars; c++)
{
if(iClose(_Symbol, PERIOD_CURRENT, c) > iClose(_Symbol, PERIOD_CURRENT, c + 1))
{
bufferSymbol1[c] = 50;
bufferSymbolColor1[c]=0;
}
else
{
bufferSymbol1[c] = 15;
bufferSymbolColor1[c]=1;
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
Смена положения работает, а цвет не меняется.