Как решить проблему селекта?
К сожалению, пока никак. Есть мысль внести enum, но неизвестно когда за это возьмемся.
Ясно, значит будем пока по старинке - пальчиками ;)
Вот придума некую альтернативу. При вызове индикатора, нужно лишь у нужного типа отрисовки выбрать TRUE:
//+------------------------------------------------------------------+ //| Center Bar.mq4 | //| Copyright © 2004, Hudyakov Vitaly | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, Hudyakov Vitaly" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 SaddleBrown //---- input parameters double Center[]; extern bool draw_arrow = 0; extern bool draw_histogram = 0; extern bool draw_line = 0; extern bool draw_none = 0; extern bool draw_section = 0; string drawing = "DRAW_NONE"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 3 indicator buffers mapping SetIndexBuffer(0,Center); //---- drawing settings if (draw_arrow) drawing = "DRAW_ARROW"; if (draw_histogram) drawing = "DRAW_HISTOGRAM"; if (draw_line) drawing = "DRAW_LINE"; if (draw_none) drawing = "DRAW_NONE"; if (draw_section) drawing = "DRAW_SECTION"; SetIndexStyle(0,drawing); //---- index labels SetIndexLabel(0,"Center"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Hudyakov Vitaly - Center Bar | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- main loop for(int i=0; i<limit; i++) { Center[i] = (High[i] - Low[i])/2+Low[i]; } //---- done return(0); } //+------------------------------------------------------------------+
Только в чем-то трабла. Ругается: "invalid integer number as parameter 2 for SetIndexStyle function"
Вот придума некую альтернативу...Только в чем-то трабла. Ругается: "invalid integer number as parameter 2 for SetIndexStyle function"
второй параметр в функции имеет тип int, а у тебя string
гораздо проще
//+------------------------------------------------------------------+ //| 123.mq4 | //| Copyright © 2005, Profi_R | //| rvm_fam@fromru.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Profi_R" #property link "rvm_fam@fromru.com" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 DeepSkyBlue //---- input parameters extern int drawMode=0; //---- buffers double Center[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators switch (drawMode) { case 0: SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); break; case 1: SetIndexStyle(0,DRAW_SECTION,STYLE_SOLID,2); break; case 2: SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); break; case 3: SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,2); break; default: SetIndexStyle(0,DRAW_NONE); break; } SetIndexBuffer(0,Center); SetIndexLabel(0,"Center"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(),limit; //---- //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- main loop for(int i=0; i<limit; i++) { Center[i]=(High[i]-Low[i])/2+Low[i]; } //---- return(0); } //+------------------------------------------------------------------+
только почему-то гистограмму рисовать не хочет, я на быструю руку, надеюсь сам сможешь разобраться в чем причина
Profi_R
Хе-хе.. - я сначала так и сделал, как показал только что ты.
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
А глядя на :
Хе-хе.. - я сначала так и сделал, как показал только что ты.
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
А глядя на :
draw_arrow draw_histogram draw_line draw_none draw_section
Сразу понимаешь что к чему, да еще глядя на тип данных Bool и значения 0 и 1 ;)
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
Так может лучше говорить про комментарии к параметрам?
У меня часто возникает желание приписать параметрам какой нибудь коммент,
единицы измерения, или рекомендованный диапазон значений ...
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
Так может лучше говорить про комментарии к параметрам?
У меня часто возникает желание приписать параметрам какой нибудь коммент,
единицы измерения, или рекомендованный диапазон значений ...
я уже предлагал. Достаточно давно. Вразумительного ответа так и не получил.
Mak
да, это тоже хорошая идея!
жаль, что MQ не обратили пока что на нее внимания.
да, это тоже хорошая идея!
жаль, что MQ не обратили пока что на нее внимания.
Profi_R
Хе-хе.. - я сначала так и сделал, как показал только что ты.
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
А глядя на :
Хе-хе.. - я сначала так и сделал, как показал только что ты.
Но ты через чур все упростил. Когда ты будешь запускать этот индикатор, скажем недели через 2 после его создания, ты уже врядли вспомнишь сколько значений может принимать drawMode и какое из них что значит.
А глядя на :
draw_arrow draw_histogram draw_line draw_none draw_section
Сразу понимаешь что к чему, да еще глядя на тип данных Bool и значения 0 и 1 ;)
Предлагаю следующей вариант:
#property copyright "0-LINE,1-SECTION,2-HISTOGRAM,3-ARROW,default-NONE"
перед подключением индюка на график наводишь мышь на цель, получаешь хинт, дравмоде-тоже говорит о варианте отрисовке, да и потом на крайняк можно глянуть в код
перед подключением индюка на график наводишь мышь на цель, получаешь хинт, дравмоде-тоже говорит о варианте отрисовке, да и потом на крайняк можно глянуть в код
Это конечно извращение,
но за неимением лучшего ...
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне нужно чтобы при вызове индикатора можно было выбрать из нескольких значений - типа селективного меню. Например, что бы там были значения DRAW_LINE, DRAW_NONE, DRAW_HISTOGRAM, DRAW_ARROW,..
Далее пишем
И получаем в пользовательском индикаторе возможность выбора варианта отрисовки, без изменения кода.
Как решить проблему селекта?