нужна помощь по логике в mql5

 

Помогите развернуть гистограмму в право от 0 бара, как на скриншоте


вот внешняя функция у меня такая

void CalculateForecastHistogram()
{
    // Очищаем ТОЛЬКО буферы прогноза
    ArrayInitialize(bufferForecastUp, 0.0);
    ArrayInitialize(bufferForecastDown, 0.0);
    ArrayInitialize(bufferForecastMain, 0.0);
    
    int historical_bars = ArraySize(bufferMain);
    if(historical_bars < period) return;
    
    // Берем последние значения основной гистограммы для анализа
    double last_value = bufferMain[historical_bars-1];
    
    // Метод Фурье для прогноза - синусоидальные колебания
    int lookback = MathMin(historical_bars, 30);
    
    // Анализ амплитуды и частоты
    double amplitude = 0.0;
    int zero_crossings = 0;
    
    for(int i = 1; i < lookback; i++)
    {
        int idx = historical_bars - i;
        amplitude += MathAbs(bufferMain[idx]);
        
        if((bufferMain[idx] > 0 && bufferMain[idx-1] <= 0) || 
           (bufferMain[idx] < 0 && bufferMain[idx-1] >= 0))
        {
            zero_crossings++;
        }
    }
    
    amplitude /= lookback;
    double frequency = (zero_crossings > 0) ? (double)lookback / zero_crossings : 10.0;
    
    // Создаем прогнозируемую гистограмму СПРАВА
    for(int i = 0; i < forecast_bars; i++)
    {
        // Прогноз начинается сразу после текущего бара
        double forecast_val = last_value * 0.8 + amplitude * MathSin(2 * M_PI * i / frequency);
        
        // Записываем в буферы прогноза
        bufferForecastMain[i] = forecast_val;
        
        if(forecast_val > 0)
        {
            bufferForecastUp[i] = forecast_val;
            bufferForecastDown[i] = 0;
        }
        else
        {
            bufferForecastUp[i] = 0;
            bufferForecastDown[i] = forecast_val;
        }
    }
}

вот что получается


 
Igor Nagorniuk:

Помогите развернуть гистограмму в право от 0 бара, как на скриншоте

в качестве примера возьмите Alligator -- в нём МА рисуются со сдвигом -- сдвиг прописывается не в расчётной функции, а здесь:

   PlotIndexSetInteger(0,PLOT_SHIFT,InpJawsShift);
   PlotIndexSetInteger(1,PLOT_SHIFT,InpTeethShift);
   PlotIndexSetInteger(2,PLOT_SHIFT,InpLipsShift);

см. Документацию https://www.mql5.com/ru/docs/constants/indicatorconstants/drawstyles#enum_plot_property_integer:

PLOT_SHIFT

Сдвиг графического построения индикатора по оси времени в барах

 
Andrey F. Zelinsky #:

в качестве примера возьмите Alligator -- в нём МА рисуются со сдвигом -- сдвиг прописывается не в расчётной функции, а здесь:

см. Документацию https://www.mql5.com/ru/docs/constants/indicatorconstants/drawstyles#enum_plot_property_integer:

PLOT_SHIFT

Сдвиг графического построения индикатора по оси времени в барах

Спасибо, буду пробывать
 
Igor Nagorniuk #:
как работать со сдвигом -- пример можно посмотреть в Документации к Alligator https://www.mql5.com/ru/docs/indicators/ialligator
 
Andrey F. Zelinsky #:

в качестве примера возьмите Alligator -- в нём МА рисуются со сдвигом -- сдвиг прописывается не в расчётной функции, а здесь:

см. Документацию https://www.mql5.com/ru/docs/constants/indicatorconstants/drawstyles#enum_plot_property_integer:

PLOT_SHIFT

Сдвиг графического построения индикатора по оси времени в барах

Аллигатор не подошёл, он сдвигает гистограмму. А мне нужно что бы, гистограмма рисовалось с права от 0 бара. При этом на истории не должно оставаться гистограммы (я это на скрине указал)
 
Igor Nagorniuk #:
Аллигатор не подошёл, он сдвигает гистограмму. А мне нужно что бы, гистограмма рисовалось с право от 0 бара. При этом на истории не должно оставаться гистограммы (я это на скрине указал)

буффер -- это массив -- справа от =0 в буффере нет элементов массива -- т.е. в mql есть только один вариант нарисовать буффер справа от нуля -- это сдвиг.

вы можете заполнить буффер ровно на =10 элементов последних и сделать сдвиг =10

 
Andrey F. Zelinsky #:

буффер -- это массив -- справа от =0 в буффере нет элементов массива -- т.е. в mql есть только один вариант нарисовать буффер справа от нуля -- это сдвиг.

вы можете заполнить буффер ровно на =10 элементов последних и сделать сдвиг =10

Вот что получается при смещении


а мне нужно вот так


 
Igor Nagorniuk #:

Вот что получается при смещении


а мне нужно вот так


Вам же уже ответили: заполняйте только те элементы, которые должны отображаться на графике. Остальная часть массива должна содержать EMPTY_VALUE.
 
Sergey Gridnev #:
Вам же уже ответили: заполняйте только те элементы, которые должны отображаться на графике. Остальная часть массива должна содержать EMPTY_VALUE.
Да в том и дело что не
Sergey Gridnev #:
Вам же уже ответили: заполняйте только те элементы, которые должны отображаться на графике. Остальная часть массива должна содержать EMPTY_VALUE.
это как? как можно половина гистограммы "закрасить", цена же движется по одному алгоритму, а метод фурье движется по другому методу. Два этих подхода могут не совпадать. И как же быть с изображением. Допустим есть прогноз, не важно совпал он или нет, цвет прогноза должен изменится на стандартный гистограммы (верх зелёный, а низ красный)
 
Igor Nagorniuk #:
это как? как можно половина гистограммы "закрасить", цена же движется по одному алгоритму, а метод фурье движется по другому методу. Два этих подхода могут не совпадать. И как же быть с изображением. Допустим есть прогноз, не важно совпал он или нет, цвет прогноза должен изменится на стандартный гистограммы (верх зелёный, а низ красный)

Возможно, просто разнести  нужные данные по оси Y? Например, сделать два индикатора - один для прогноза (со сдвигом) и один - для основного (с цветами)?

Или поменять номера буферов местами (тогда "сепаратором" выступит ось Z)? Если красно-зелёный буфер будет будет объявлен последним, он будет перекрывать синий...

Из рисунков и пояснений лично мне не совсем понятно, что хочется в итоге и зачем это нужно...

 
Igor Nagorniuk #:
Да в том и дело что не это как? как можно половина гистограммы "закрасить", цена же движется по одному алгоритму, а метод фурье движется по другому методу. Два этих подхода могут не совпадать. И как же быть с изображением. Допустим есть прогноз, не важно совпал он или нет, цвет прогноза должен изменится на стандартный гистограммы (верх зелёный, а низ красный)
в mql5 есть отрисовка "цветная гистограмма" https://www.mql5.com/ru/docs/customind/indicators_examples/draw_color_histogram -- в ней два буфера: 1й) расчёт и 2й) цвет -- т.е. цвет вы можете поставить clrNONE -- например, смещение гистограммы на =10 баров -- все бары до последних 10 закрашиваете в clrNONE -- на расчёт цвет бара гистограммы не влияет