Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот тупой перевод в МТ4, вроде с логикой все в порядке, а вот что оно должно рисовать проверить не могу.
[/code]
Я бы еще вставил :
int deinit() { //---- ObjectsDeleteAll(0); //---- return(0); }Иначе опухнешь стрелочки и текст удалять.
Я бы еще вставил :
int deinit() { //---- ObjectsDeleteAll(0); //---- return(0); }Иначе опухнешь стрелочки и текст удалять.
Да я потом подправил у себя, только лучше
А то он грохнет все объекты, а так хоть часть (по типу) которые пользует сам.
Да не за что. Мне самому интересно было, что получится. На вскидку мне не очень поможет, хотя надо дольше анализировать, чем "на вскидку". :-)
Я бы еще вставил :
int deinit() { //---- ObjectsDeleteAll(0); //---- return(0); }Иначе опухнешь стрелочки и текст удалять.
Да я потом подправил у себя, только лучше
Я то он грохнет все объекты, а так хоть часть (по типу) которые пользует сам.
Да, ты прав, поставил где нет ни одного обьекта, и не подумавши написал.
//+------------------------------------------------------------------+ //| CandleStick.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 2 #property indicator_color1 Black #property indicator_color2 Black //---- input parameters extern int Range=50; extern int zv_amp=50; extern int dj_body=20; //---- buffers double Up[]; //здесь будем писать стрелки для сигналов вниз double Dn[]; //здесь будем писать стрелки для сигналов вверх double MAmp[]; //здесь будем держать среднее значение амплитуды double Character[]; //здесь будем держать характер свечи //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(4); SetIndexStyle(0,DRAW_ARROW); SetIndexStyle(1,DRAW_ARROW); SetIndexStyle(2,DRAW_NONE); SetIndexStyle(3,DRAW_NONE); SetIndexBuffer(0,Up); SetIndexBuffer(1,Dn); SetIndexBuffer(2,MAmp); SetIndexBuffer(3,Character); SetIndexArrow(0,242); SetIndexArrow(1,241); SetIndexDrawBegin(0,Range+1); SetIndexDrawBegin(1,Range+1); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(0,OBJ_TEXT); ObjectsDeleteAll(0,OBJ_ARROW); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(),cb; double amp_lim,body_lim; //---- for(cb=Bars-1-counted_bars;cb>=0;cb--) { Amplitude_calc(cb); //получаем значение средней амплитуды для текущей свечи //вычисляем значение для определения звезд и дожи amp_lim=NormalizeDouble(MAmp[cb]*zv_amp/100,4); body_lim=NormalizeDouble((High[cb]-Low[cb])*dj_body/100,4); //если амплитуда менее или равна zv_amp% средней амплитуды if(High[cb]-Low[cb]<=amp_lim) { if(MathAbs(Open[cb]-Close[cb])<=body_lim) { Character[cb]=2; //дожи } else { Character[cb]=1; //звезда } } else { if(MathAbs(Open[cb]-Close[cb])<=body_lim) { Character[cb]=2; //дожи } else { Character[cb]=0; //обычная свеча } } //-------- далее идет определение свечных конфигураций //молот и повешенный верхняя тень не более dj_body% амплитуды, нижняя тень в два раза больше тела if(High[cb+2]-MathMax(Open[cb+2],Close[cb+2])<NormalizeDouble((High[cb+2]-Low[cb+2])*dj_body/100,4)&& MathAbs(Open[cb+2]-Close[cb+2])*2<MathMin(Open[cb+2],Close[cb+2])-Low[cb+2]) { if(High[cb+2]==High[Highest(NULL,0,MODE_HIGH,6,cb+1)]) { //выводим текст на чарт ObjectCreate("hanging "+(cb+2),OBJ_TEXT,0,Time[cb+2],High[cb+1]+10*Point); ObjectSetText("hanging "+(cb+2),"повешенный",9,"Times New Roman",Yellow); //повешенный на вершине, ставим стрелку вниз Up[cb]=High[cb]+10*Point; } if(Low[cb+2]==Low[Lowest(NULL,0,MODE_LOW,6,cb+1)]) { //выводим текст на чарт ObjectCreate("hammer "+(cb+2),OBJ_TEXT,0,Time[cb+2],Low[cb+1]-10*Point); ObjectSetText("hammer "+(cb+2),"молот",9,"Times New Roman",Yellow); //молот внизу, ставим стрелку вверх Dn[cb]=Low[cb]-10*Point; } } //высокая волна - три и большее количество дожи с длинными тенями if(Character[cb]==2&&High[cb]-Low[cb]>amp_lim&& Character[cb+1]==2&&High[cb+1]-Low[cb+1]>NormalizeDouble(MAmp[cb+1]*zv_amp/100,4)&& Character[cb+2]==2&&High[cb+2]-Low[cb+2]>NormalizeDouble(MAmp[cb+2]*zv_amp/100,4)) { if(High[cb]==High[Highest(NULL,0,MODE_HIGH,7,cb)]|| High[cb+1]==High[Highest(NULL,0,MODE_HIGH,7,cb)]|| High[cb+2]==High[Highest(NULL,0,MODE_HIGH,7,cb)]) { //выводим текст на чарт ObjectCreate("high wave "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point); ObjectSetText("high wave "+cb,"высокие волны",9,"Times New Roman",Yellow); //высокие волны наверху - разворот вниз Up[cb]=High[cb]+10*Point; } if(Low[cb]==Low[Lowest(NULL,0,MODE_LOW,7,cb)]|| Low[cb+1]==Low[Lowest(NULL,0,MODE_LOW,7,cb)]|| Low[cb+2]==Low[Lowest(NULL,0,MODE_LOW,7,cb)]) { //выводим текст на чарт ObjectCreate("high wave "+cb,OBJ_TEXT,0,Time[cb],Low[cb]-10*Point); ObjectSetText("high wave "+cb,"высокие волны",9,"Times New Roman",Yellow); //высокие волны внизу - разворот вверх Dn[cb]=Low[cb]-10*Point; } } //падающая звезда if(Character[cb]==2 && MathMin(Open[cb],Close[cb])-Low[cb]<body_lim && High[cb]-MathMax(Open[cb],Close[cb])>MathAbs(Open[cb]-Close[cb])*2 && High[cb]==High[Highest(NULL,0,MODE_HIGH,4,cb)]) { //выводим текст на чарт ObjectCreate("shooting star "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point); ObjectSetText("shooting star "+cb,"падающая звезда",9,"Times New Roman",Yellow); //падающая звезда - разворот вниз Up[cb]=High[cb]+10*Point; } //Толчок if(Character[cb]==0 && Character[cb+1]==0) { if(Close[cb]>Open[cb] && Close[cb+1]<Open[cb+1] && Close[cb]<High[cb+1]-(High[cb+1]-Low[cb+1])/2) { //выводим текст на чарт ObjectCreate("thrusting fine "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point); ObjectSetText("thrusting fine "+cb,"толчок",9,"Times New Roman",Yellow); //толчок - продолжение тенденции вниз Up[cb]=High[cb]+10*Point; } if(Close[cb]<Open[cb] && Close[cb+1]>Open[cb+1] && Close[cb]>Low[cb+1]+(High[cb+1]-Low[cb+1])/2) { //выводим текст на чарт ObjectCreate("thrusting fine "+cb,OBJ_TEXT,0,Time[cb],Low[cb]-10*Point); ObjectSetText("thrusting fine "+cb,"толчок",9,"Times New Roman",Yellow); //толчок - продолжение тенденции вверх Dn[cb]=Low[cb]-10*Point; } } //Брошенный младенец } //---- return(0); } //+------------------------------------------------------------------+ void Amplitude_calc(int cb) { //---- int i,S_Ampl=0; for(i=cb+1;i<cb+Range;i++) { //накапливаем сумму всех амплитуд S_Ampl=S_Ampl+(High[i]-Low[i]); //записываем значения в буферы индикатора MAmp[cb]=NormalizeDouble(S_Ampl/Range,4); } //---- return(0); }спасибо Profi_R - интересный подход!!!!!!
(вариант "поправленный, для МТ3)
Установил индикатор и такая бяка:
- Не удаляются надписи после удаления индикатора.
- Пропадают граф. обьекты, например гор. линии при переходе на другой тайм-фрейм.
а выше написано про добавление кода в деинит, он и очистит
2hell
да вроде не за что, перевод твоего кода я не сделал, а в моем индикаторе нужно иметь ввиду следующее
параметры : 1. период на котором рассчитывается средняя амплитуда
2. размер амплитуды в % от средней амплитуды для определения звезд и дожи
3. размер тела в % от текущей амплитуды для определения дожи
сделал так потому что везде упомянаются такие определения как "большая тень", "больше в два три раза" и подобно этому а вот точно нет спецификаций и поэтому каждый делает так как он считает. В принципе код есть и его можно дополнять другими конфигурациями по образцу