Здравствуйте.
Попытался написать тестовый индикатор, использующий значения другого
индикатора с разных таймфреймов, и зашел в тупик. Вот его текст:
#property indicator_separate_window // Индик.рисуется в отдельном окне
#property indicator_buffers 3 // Количество буферов
#property indicator_color1 Lime // Цвет линии буфера 0
#property indicator_color2 Orange // Цвет линии буфера 1
#property indicator_color3 Aqua // Цвет линии буфера 2
//---------------------------------------------------------------
extern int History =2000; // Колич.баров в расчётной истории
extern int TimeFrame1 =1;
extern int TimeFrame2 =5;
extern int TimeFrame3 =15;
extern int PeriodMA1=3; // Период быстрой МА
extern int PeriodMA2=3; // Период средней МА
extern int PeriodMA3=3; // Период медленной МА
//---------------------------------------------------------------
double
Line_0[], // Инд. массив быстрой МА
Line_1[], // Инд. массив средней МА
Line_2[]; // Инд. массив медленной МА
//---------------------------------------------------------------
int init()
{
SetIndexBuffer(0,Line_0); // MA1
SetIndexBuffer(1,Line_1); // MA2
SetIndexBuffer(2,Line_2); // MA3
IndicatorDigits(Digits);
return; // Выход из функции init()
}
//---------------------------------------------------------------
int start() // Специальная функция start()
{
//---------------------------------------------------------------
double MA;
int
i, // Индекс бара
Counted_bars; // Количество просчитанных баров
//--------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то ..
i=History-1; // ..рассчитывать заданное колич.
//--------------------------------------------------------------
while(i>=0) // Цикл по непосчитанным барам
{
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame1,"Moving Averages",PeriodMA1,0,0,0,i);
Line_0[i]= MA;
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame2,"Moving Averages",PeriodMA2,0,0,0,i);
Line_1[i]= MA;
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame3,"Moving Averages",PeriodMA3,0,0,0,i);
Line_2[i]= MA;
//--------------------------------------------------------
i--; // Расчёт индекса следующего бара
//--------------------------------------------------------
}
return; // Выход из спец. ф-ии start()
}
//--------------------------------------------------------------
Это - 3
пользовательских мувинга с параметрами 3,0,0 с таймфреймов
м1(лайм), м5(оранж), м15(аква). При сохранении скрина цвета слегка
изменились, но разобрать можно. Нанёс на м1 эти мувинги с периодами 3,
3*5=15, 3*15=45. Вертикальными линиями выделил участок с 12:00 до 13:00.
На графике м15 этот мувинг с периодом 3 непрерывно растёт от 108.62 до
108.92, а в индикаторе на м1 - телепается в диапазоне 108.42 - 108.69. Линия
индикатора, соответствующая ТФ м5, вообще зашкаливает за 111, хотя на
чарте едва дотягивает до 109.
Ладно бы, мувинги строились с использованием хай и лоу, которые,
понятно, на барах м1 и м15 могут не совпадать. Но из их кода (прилагается)
видно, что используется close.
Подскажите пожалуйста, где я ошибся.
Здравствуйте.
Попытался написать тестовый индикатор, использующий значения другого
индикатора с разных таймфреймов, и зашел в тупик. Вот его текст:
#property indicator_separate_window // Индик.рисуется в отдельном окне
#property indicator_buffers 3 // Количество буферов
#property indicator_color1 Lime // Цвет линии буфера 0
#property indicator_color2 Orange // Цвет линии буфера 1
#property indicator_color3 Aqua // Цвет линии буфера 2
//---------------------------------------------------------------
extern int History =2000; // Колич.баров в расчётной истории
extern int TimeFrame1 =1;
extern int TimeFrame2 =5;
extern int TimeFrame3 =15;
extern int PeriodMA1=3; // Период быстрой МА
extern int PeriodMA2=3; // Период средней МА
extern int PeriodMA3=3; // Период медленной МА
//---------------------------------------------------------------
double
Line_0[], // Инд. массив быстрой МА
Line_1[], // Инд. массив средней МА
Line_2[]; // Инд. массив медленной МА
//---------------------------------------------------------------
int init()
{
SetIndexBuffer(0,Line_0); // MA1
SetIndexBuffer(1,Line_1); // MA2
SetIndexBuffer(2,Line_2); // MA3
IndicatorDigits(Digits);
return; // Выход из функции init()
}
//---------------------------------------------------------------
int start() // Специальная функция start()
{
//---------------------------------------------------------------
double MA;
int
i, // Индекс бара
Counted_bars; // Количество просчитанных баров
//--------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то ..
i=History-1; // ..рассчитывать заданное колич.
//--------------------------------------------------------------
while(i>=0) // Цикл по непосчитанным барам
{
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame1,"Moving Averages",PeriodMA1,0,0,0,i);
Line_0[i]= MA;
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame2,"Moving Averages",PeriodMA2,0,0,0,i);
Line_1[i]= MA;
//--------------------------------------------------------
MA=iCustom(NULL,TimeFrame3,"Moving Averages",PeriodMA3,0,0,0,i);
Line_2[i]= MA;
//--------------------------------------------------------
i--; // Расчёт индекса следующего бара
//--------------------------------------------------------
}
return; // Выход из спец. ф-ии start()
}
//--------------------------------------------------------------
Это - 3 [b]пользовательских[/b] мувинга с параметрами 3,0,0 с таймфреймов
м1(лайм), м5(оранж), м15(аква). При сохранении скрина цвета слегка
изменились, но разобрать можно. Нанёс на м1 эти мувинги с периодами 3,
3*5=15, 3*15=45. Вертикальными линиями выделил участок с 12:00 до 13:00.
На графике м15 этот мувинг с периодом 3 непрерывно растёт от 108.62 до
108.92, а в индикаторе на м1 - телепается в диапазоне 108.42 - 108.69. Линия
индикатора, соответствующая ТФ м5, вообще зашкаливает за 111, хотя на
чарте едва дотягивает до 109.
Ладно бы, мувинги строились с использованием хай и лоу, которые,
понятно, на барах м1 и м15 могут не совпадать. Но из их кода (прилагается)
видно, что используется close.
Подскажите пожалуйста, где я ошибся.
- Вложения
-
- Moving Averages.mq4
- (5.34 KiB) Скачиваний: 33
-