Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне кажется, там еще не хватает else, чтобы разделять восходящий и нисходящий тренды, хотя в чем идея индикатора не знаю.
а ошибка - явная очепятка =)
а ошибка - явная очепятка =)
Я из-за такой опечатки 3 раза индикатор заново переписывал. Хотя это было осознанное использование для экономии памяти :)
Использовал индикаторный массив, который не использовался для рисования, чисто для внутреннего пользования. Присвоил ему тип int - 2 раза я дописывал индикатор и он не работал, я искал ошибку и не мог найти, начинал писать с нуля заново. А он все равно не работал. Пришлось обустраивать кучу проверок через Print(). Нашел.
Испытал глубокое чувство "благодарности" к разработчикам за недокументированные "невозможности" :)
я то суть проблемы очень даже понял, просто хотел чтобы ты сам научился находить свои ошибки, тогда тебе бы не пришлось каждый раз просить кого-то, и выглядеть смешно в своих заявлениях
теперь твое мнение изменилось?
Важно было пошагово устранить все ошибки, во-первых овладел бы поиском и устранением ошибок, во-вторых в будущем при написании кода, количество таких ошибок значительно сократилось бы.
Например я бы "отсекал" следующим образом.
1. Посмотрел правильность цикла (вывод сообщения поместил после "while( i>=0 )...
2. Если цикл верен проверил бы правильность срабатывания условия (вывод сообщения "if( iSAR(NULL,0,MyPeriod, MyMax, i) > Close[i] ) , (здесь у тебя часть ошибок, если не понял из кода приведенного komposter'ом, то подсказка вместо MyPeriod, MyMax у тебя будут стоять 0, т.к. ты объявил эти переменные целыми и хоть и присвоил им значения вещественные они будут обрезаны до точки)
3. затем как я уже и говорил вывод ошибок после создания объекта
4. ну и вывод ошибок после изменения его свойств
это твой код после редактирования
#property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Aqua #include <stdlib.mqh> //---- input parameters extern double MyPeriod = 0.02, MyMax = 0.2; //---- buffers double Buffer1[]; double Buffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(0,Buffer1); SetIndexBuffer(1,Buffer2); //---- name for DataWindow and indicator subwindow label short_name="i4_q_v1"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); SetIndexLabel(1,short_name); //---- SetIndexDrawBegin(0,0); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i, counted_bars=IndicatorCounted(),err; //---- i=Bars-counted_bars-1; while( i>=0 ) { if( iSAR(NULL,0,MyPeriod,MyMax,i)>Close[i] ) { if( ObjectFind("h"+TimeToStr(Time[i]))!=-1 ) //если объект найден { //просто изменим его координаты ObjectMove("h"+TimeToStr(Time[i]),0,Time[i],High[i]); err=GetLastError(); if(err>0) { Alert("Ошибка изменения координат объекта. "+ErrorDescription(err) ); } } else { //иначе создадим его ObjectCreate("h"+TimeToStr(Time[i]), OBJ_ARROW, 0, Time[i], High[i]); err=GetLastError(); if(err>0) { Alert("Ошибка создания объекта. "+ErrorDescription(err) ); } //поменяем код отображаемого как объект символа ObjectSet( "h"+TimeToStr(Time[i]), OBJPROP_ARROWCODE, 171); err=GetLastError(); if(err>0) { Alert("Ошибка установки свойств объекта. "+ErrorDescription(err) ); } } if( ObjectFind("l"+TimeToStr(Time[i]))!=-1 ) //если объект найден { //просто изменим его координаты ObjectMove("l"+TimeToStr(Time[i]),0,Time[i],Low[i]); err=GetLastError(); if(err>0) { Alert( "Ошибка изменения координат объекта. "+ErrorDescription(err) ); } } else { //иначе создадим его ObjectCreate("l"+TimeToStr(Time[i]), OBJ_ARROW, 0, Time[i], Low[i]); err=GetLastError(); if(err>0) { Alert("Ошибка создания объекта. "+ErrorDescription(err) ); } //поменяем код отображаемого как объект символа ObjectSet( "l"+TimeToStr(Time[i]), OBJPROP_ARROWCODE, 161); err=GetLastError(); if(err>0) { Alert("Ошибка установки свойств объекта. "+ErrorDescription(err) ); } } } Buffer1[i] = Low[i]; i--; } return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here int i; for(i=0;i<Bars;i++) { if( ObjectFind("h"+TimeToStr(Time[i]))!=-1 ) //если объект найден { ObjectDelete("h"+TimeToStr(Time[i])); } if( ObjectFind("l"+TimeToStr(Time[i]))!=-1 ) //если объект найден { ObjectDelete("l"+TimeToStr(Time[i])); } } //---- return(0); }