Алоха!) Пытаюсь написать свой первый индикатор, даже сказал бы переписать индикатор в свой, но чтот вовсе не выходит..
.........
double ExtLine1Buffer[];
double ExtLine2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
SetIndexBuffer(0, ExtLine1Buffer, INDICATOR_DATA);
SetIndexBuffer(1, ExtLine1Buffer, INDICATOR_DATA);
......................Смотри вкладку эксперты: там пишет, что array out of range в такой-то строке - т.е. индекс получился <0
первый проход в цикле bar==p3-1 , а ты обращаешься low[bar - p3] , т.е. low[-1]
Смотри вкладку эксперты: там пишет, что array out of range в такой-то строке - т.е. индекс получился <0
первый проход в цикле bar==p3-1 , а ты обращаешься low[bar - p3] , т.е. low[-1]
Нужен простой код - индикатор DEMA сглаживающий MFI (два индикатора в одном окне).
Помогите пожалуйста !
Нужен простой код - индикатор DEMA сглаживающий MFI (два индикатора в одном окне).
Накиньте DEMA на MFI, в параметрах DEMA укажите - "данные предыдущего индикатора". И будет у вас два индикатора в одном окне.
Так и сделал. Но код мне нужен для эксперта.
В настоящий момент - просто совместил коды двух индикаторов и даже отображается то что нужно, но когда начинаю перемещать окно индикатора или просто оперировать с окном, то индикатор искажает свои значения.
Индикатор прилагаю.
Так и сделал. Но код мне нужен для эксперта.
Доступ к индикаторам из эксперта проще сделать так:
int hmfi=iMFI(_Symbol,_Period,период_MFI,VOLUME_TICK); int hdemamfi=iDEMA(_Symbol,_Period,период_DEMA,0,hmfi);
Через CopyBuffer() получайте значения MFI и DEMA от MFI.
Доступ к индикаторам из эксперта проще сделать так:
Через CopyBuffer() получайте значения MFI и DEMA от MFI.
//+------------------------------------------------------------------+
...
//--- входные параметры
input int bands_period=36; // Период Bollinger Bands
input int bands_shift = 0; // Смещение ВВ
input double deviation= 2.0; // Отклонение ВВ
input int PeriodDEMA=36;// Период DEМА
input int ShiftDEMA=0;// Сдвиг DEМА
input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // Volumes
input int MFIPeriod=36; // Период MFI
input double Lot=1.0; // Количество лотов
//--- глобальные переменные
int BolBandsHandle=iBands(_Symbol,_Period,bands_period,bands_shift,deviation,PRICE_CLOSE);
int MFI_Handle=iMFI(_Symbol,_Period,MFIPeriod,VolumeType);
int DEMA_Handle=iDEMA(_Symbol,_Period,PeriodDEMA,ShiftDEMA,MFI_Handle);
double BBUp[],BBLow[],BBMidle[]; // динамические массивы для хранения численных значений Bollinger Bands
double MFI[];// массив MFI
double DEMA[];// массив DEMA
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- достаточность баров
if(Bars(_Symbol,_Period)<60) // общее количество баров
{
Alert("Количество баров недостаточно");
return(-1);
}
if(MFI_Handle==INVALID_HANDLE) Print(" Не удалось получить хендл индикатора MFI");
if(DEMA_Handle==INVALID_HANDLE) Print(" Не удалось получить хендл индикатора DEMA");
...
//+------------------------------------------------------------------+
К сожалению, DEMA при этом не отображается на MFI.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Алоха!) Пытаюсь написать свой первый индикатор, даже сказал бы переписать индикатор в свой, но чтот вовсе не выходит..
Был взят самый просто индикатор из статьи _https://www.mql5.com/ru/articles/37 SMA.mql5
Переделал я его в общем вот так (были переименованы некоторые входные данные и добавлены новые.Добавлен новый буфер. И индикатор должен по идее отрисовать 2е одинаковые линии, но у меня это выглядит примерно вот так - скрин прикрепляю)
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_type1 DRAW_LINE
#property indicator_color1 Red
#property indicator_type2 DRAW_LINE
#property indicator_color2 Green
input int tPeriod = 13;
input int l1Shift = 0;
input int l2Shift = 0;
double ExtLine1Buffer[];
double ExtLine2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
SetIndexBuffer(0, ExtLine1Buffer, INDICATOR_DATA);
SetIndexBuffer(1, ExtLine1Buffer, INDICATOR_DATA);
PlotIndexSetInteger(0, PLOT_SHIFT, l1Shift);
PlotIndexSetInteger(1, PLOT_SHIFT, l2Shift);
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, tPeriod - 1);
PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, tPeriod - 1);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[])
{
if (rates_total < tPeriod - 1)
return(0);
int first, bar, iii;
double Sum, SMA;
if (prev_calculated == 0)
first = tPeriod - 1 + begin;
else first = prev_calculated - 1;
for(bar = first; bar < rates_total; bar++)
{
Sum = 0.0;
for(iii = 0; iii < tPeriod; iii++)
Sum += price[bar - iii];
SMA = Sum / tPeriod;
ExtLine1Buffer[bar] = SMA;
ExtLine2Buffer[bar] = SMA;
}
return(rates_total);
}
//+------------------------------------------------------------------+