у вас ошибка в коде
int i=Bars-CountBars;i<=0;i--
цикл ни разу не запустится - i<=0
Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.
Хочешь проверить
int start(){ double tmp=iCustom(NULL,0,"Name",6,0,1); print("Текущее значение индикатора = ",tmp); }Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снята
вот этот кусок текста в этом эксперте
//--------------------------------------------------------------- 5 -- // Торговые критерии for( bar = 0; bar <= Bars-IndicatorCounted(); bar++) { Minim[bar]=iCustom(NULL,0,"EkstremumByMA",PeriodMA, 1,bar); // Minimum Maxim[bar]=iCustom(NULL,0,"EkstremumByMA",PeriodMA, 0,bar); // Maximum } Print ("Maxim[",bar-10,"]= ",Maxim[bar-10],"Minim[",bar-10,"]= ",Minim[bar-10]); // Print ("Min= ",Min,"\n","Max= ",Max,"\n","sgl_bars= ",sgl_bars); Print("grafMA[10]= ",grafMA[10]); double sum; int m,ig; // int i=Bars-IndicatorCounted()-1; // Print ("I= ",i); // колличетво баров for (m=0;m<=i;m++) { for (ig=m+PeriodMA;ig>=m;ig--) { sum=sum+(High[ig]+Low[ig])/2; } graffikMA[m]=((High[m]+Low[m])/2)/sum+1.7; maximum[m]=0; minimum[m]=0; grafMA[m]=graffikMA[m-PeriodMA/2]+0.8; } Print ("graffikMA[",m-1,"]= ",graffikMA[m-20]); Print ("grafMA[",m-1,"]= ",grafMA[m-20]); //Print ("PeriodMA/2= ",PeriodMA/2); //------------------------------------------------maximum----------- for (m=0;m<=i-3;m++) { if ( (graffikMA[m])>(graffikMA[m+1])&&(graffikMA[m])>(graffikMA[m-1])&&(graffikMA[m-1]!=0) ) { maximum[m]=graffikMA[m]; }//if //-------------------------------------------------minimum----------- if( (graffikMA[m])<(graffikMA[m+1])&&(graffikMA[m])<(graffikMA[m-1]) ) { minimum[m]=graffikMA[m]; }//if //Print ("maximum[",m,"]= ",maximum[m]," minimum[",m,"]= ",minimum[m]); } //for(m=0;m<=i;m++)
Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.
Хочешь проверить
Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снятапроверил ( выдает нули
int start() { double tmp=iCustom(NULL,0,"EkstremumByMA",6,0,1); Print("Текущее значение индикатора = ",tmp); }текст индикатора такой
//+------------------------------------------------------------------+ //| Fraktals Maddy.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property indicator_chart_window // Индик. рисуется в основном окне #property indicator_buffers 3 // Количество буферов 1 #property indicator_color1 Red // Цвет первой линии #property indicator_color2 Yellow // Цвет первой линии #property indicator_color3 Blue // Цвет первой линии #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 2 double maximum[],minimum[],graffikMA[]; // flat\trand extern int PeriodMA=6; // колличество баров для сглаживания int m; // счетчик //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---------------------------------- 1 ------------------------------- SetIndexBuffer(0,maximum); // Назначение массива буферу 0 SetIndexStyle (0,DRAW_ARROW,3);// Стиль линии //---------------------------------- 2 ------------------------------- SetIndexBuffer(1,minimum); // Назначение массива буферу 0 SetIndexStyle (1,DRAW_ARROW,3);// Стиль линии //---------------------------------- 2 ------------------------------- SetIndexBuffer(2,graffikMA); // Назначение массива буферу 0 SetIndexStyle (2,DRAW_LINE,1);// Стиль линии //---------------------------------- 2 ------------------------------- return; // Выход из спец. ф-ии init() } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,m; // int double trend,flet,Parametr; // double i=Bars-1; // Print ("I= ",i); // колличетво баров for (m=0;m<=i;m++) { graffikMA[m]=iCustom(NULL,0,"Moving Averages",PeriodMA,0,0, 0,m-PeriodMA/2); // graffikMA[m]=iMA(NULL,0,PeriodMA,0,0, 4,m-PeriodMA/2); maximum[m]=0; minimum[m]=0; } //Print ("PeriodMA/2= ",PeriodMA/2); //------------------------------------------------maximum----------- for (m=0;m<=i-3;m++) { if ( (graffikMA[m])>(graffikMA[m+1])&&(graffikMA[m])>(graffikMA[m-1])&&(graffikMA[m-1]!=0) ) { maximum[m]=graffikMA[m]; }//if //-------------------------------------------------minimum----------- if( (graffikMA[m])<(graffikMA[m+1])&&(graffikMA[m])<(graffikMA[m-1]) ) { minimum[m]=graffikMA[m]; }//if } //for(m=0;m<=i;m++) }// start() //-----------------------определение тренда и флета------------------------------------------------------------------------//
Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.
Хочешь проверить
Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снятаint start() { double tmp=iCustom(NULL,0,"EkstremumByMA",6,2,1);// поменял линию индикатора! с 0 на 2! Print("Текущее значение индикатора = ",tmp); }
результат)
2009.05.05 13:48:30 2009.01.27 23:53 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:53 EkstremumByMA EURUSD,M1: I= 167
2009.05.05 13:48:30 2009.01.27 23:52 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:52 EkstremumByMA EURUSD,M1: I= 166
2009.05.05 13:48:30 2009.01.27 23:51 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
2009.05.05 13:48:30 2009.01.27 23:51 EkstremumByMA EURUSD,M1: I= 165
2009.05.05 13:46:18 2009.01.27 23:50 Skalping_2 EURUSD,M1: Текущее значение индикатора = 0
Тогда есть еще один вопрос. Зачем в советнике сделан цикл? В советнике не стоит создавать индикаторный буфер. Он (советник) для другого предназначен.
Хочешь проверить
Попробуй проверить в тестере что выдает индикатор. Большая часть вопросов будет снятаспасибо за помощь,Vinin. ошибка в эксперте осталомсь найти где она. iCustom() работает нормально проверил на другом баре осталось найти ошибку в глубинах кода...
int start() { double tmp=iCustom(NULL,0,"EkstremumByMA",6,2,10);// поменял линию индикатора! с 0 на 2! бар 10! Print("Текущее значение индикатора = ",tmp); }
тестер выдал нужные значения:
2009.05.05 14:03:38 2009.01.28 03:50 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3202
2009.05.05 14:03:38 2009.01.28 03:50 EkstremumByMA EURUSD,M1: I= 403
2009.05.05 14:03:38 2009.01.28 03:49 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.32
2009.05.05 14:03:38 2009.01.28 03:49 EkstremumByMA EURUSD,M1: I= 402
2009.05.05 14:03:38 2009.01.28 03:48 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3199
2009.05.05 14:03:38 2009.01.28 03:48 EkstremumByMA EURUSD,M1: I= 401
2009.05.05 14:03:38 2009.01.28 03:47 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3197
2009.05.05 14:03:38 2009.01.28 03:47 EkstremumByMA EURUSD,M1: I= 400
2009.05.05 14:03:38 2009.01.28 03:46 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3196
2009.05.05 14:03:38 2009.01.28 03:46 EkstremumByMA EURUSD,M1: I= 399
2009.05.05 14:03:38 2009.01.28 03:45 Skalping_2 EURUSD,M1: Текущее значение индикатора = 1.3194
С каких пор в экспертах стала использоваться функция IndicatorCounted()! Она в них будет возвращать минус единицу! При таком уровне понимания MQL4 следовало бы основательно разобраться в более простых вещах! А так это всё - абсолютно бесполезный, мартышкин труд!!!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
в индекаторе А работает функция iCustom или iCustum не помню точно в строке for (int i=Bars-CountBars;i<=0;i--) а[i]=iCustom(NULL,0,"Name",6,0,i) ; работает нормално отукрывает индикатор Name и считывает нулевую линию буфера.
делаю то же самое в эксперте for (int i=Bars-CountBars;i<=0;i--) a[i]=iCustom(NULL,0,"Name",6,0,i) ; и в массив а[] вносяться одни нули!
помогите разобраться в чем дело? может тоит просто переустановить программку?