Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мы как раз наоборот убрали не совсем удачные черные чарты, чтобы были несколько билдов назад и поставили полноцветную светлую иконку. Полгода и все привыкнут?
Индикатор крайне прост - несколько строк текста. Рисует 3 канала типа OBJ_STDDEVCHANNEL разной длины.
В соседней ветки явно проявилась аналогичная ошибка с кастомным индикаторам после смены таймфреймов - в понедельник найдем и исправим ошибку.
Дело вкуса конечно, но хорошо бы сохранять какую-то индивидуальность, а то сейчас все лепят такие водянисто-голубоватенькие значки в стиле ХР
#property indicator_chart_window extern int Length=8; #property indicator_color1 Plum double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Buffer); SetIndexDrawBegin(0,Length-1); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- TODO: add your code here double sum=0,LinearRegValue=0,Num1=0,Num2=0,SumBars=0,SumSqrBars=0,SumY=0,Sum1=0,Sum2=0,Slope=0,Intercept=0; int i=0,x=0; if (counted_bars<0) return(-1); if (counted_bars>0) counted_bars--; int pos=Bars-counted_bars-1; while(pos>=0) { /*while(pos>=0) { sum+=Close[pos]; Buffer[pos]=sum/Length; sum-=Close[pos+Length-1]; pos--; } Comment("Buffer ",Buffer[pos]);*/ if (Length==0) LinearRegValue=0; SumBars=0; SumSqrBars=0; SumY=0; Sum1=0; Sum2=0; for(i=0;i<=Length-1;i++) { SumY+=Close[i]; } SumBars=Length*(Length-1)*0.5; SumSqrBars=(Length-1)*Length*(2*Length-1)/6; for(x=0;x<=Length-1;x++) { Sum1+=x*Close[x]; } Sum2=SumBars*SumY; Num1=Length*Sum1-Sum2; Num2=SumBars*SumBars-Length*SumSqrBars; if (Num2!=0) Slope=Num1/Num2; else Slope=0; Intercept=(SumY-Slope*SumBars)/Length; LinearRegValue=Intercept+Slope*(Length-1); Buffer[pos]=LinearRegValue; pos--; } //---- return(0); }1. При загрузке терминала показывает сделки с начала месяца, даже если в предыдущей сессии указываеш другой выбор. Тоже самое происходит не только при запуске терминала, но и при смене счета на запущенном терминале.
Т.е. не запоминает период.
Удобнее было бы иметь возможность типа - Сегодня, Посл. 3 дня, Посл. неделя ...
Т.е. чтобы такой период на автомате начинался от текущей даты.
Иначе каждый раз приходится менять руками.
2. Если выбираеш Custom Period, то даты которые устанавливаются по умолчанию ничего не показывают.
Напр. сейчас - с 11.04.2005 по 12.04.2005
Сделок за сегодня полно, но ни одна не показывается.
Если руками поменять на 10.04.2005 - 12.04.2005 (10 - воскресенье),
то показывает сегодняшние сделки.
Строки в закладке Trade упорядочены непонятным образом.
В течении сессии они упорядочены по времени, если же перезапустить терминал, то переупорядочиваются похоже по парам в алфавитном порядке. И этот порядок никак изменить нельзя (не нашел способа).
Лучше бы они всегда были по времени создания позиций.
Еще лучше, если бы была возможность менять порядок щелкнув по заголовку колонки.
Про иконку.
Наверное и к новой народ привыкнет,
но старая была более выразительной и запоминающейся.
Новая действительно блеклая и скажем от аутлука не сильно отличается.
Устанавливаем на D1. Рисует метки.
Переключаемся на H4. Рисует правильные метки.
Переключаемся обратно на D1.
Такое меток становится больше чем в начале (и часть явно неправильных).
Такое ощущение, что при смене таймфрейма инициализация/деинициализация выполняются неправильно.
Если переключаться на меньшие таймфреймы и назад,
то меток становится еще больше.
Лог
(две строки инициализации почему-то)
//+------------------------------------------------------------------+ //| ASC_Trend_1sig.mq4 | //| komposter | //| mailto:komposterius@mail.ru | //+------------------------------------------------------------------+ #property copyright "komposter" #property link "mailto:komposterius@mail.ru" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Lime #property indicator_color2 Red extern int RISK = 3; double buf0[]; //ASC_Trend_Up double buf1[]; //ASC_Trend_Down int init() { IndicatorShortName( "ASC_Trend" ); IndicatorDigits ( MarketInfo( Symbol(), MODE_DIGITS ) ); SetIndexBuffer( 0 , buf0 ); SetIndexStyle ( 0 , DRAW_ARROW , EMPTY , 3 ); SetIndexArrow( 0 , 217); SetIndexDrawBegin( 0 , 12 ); SetIndexLabel( 0 , "ASC_Trend_Up"); SetIndexBuffer( 1 , buf1 ); SetIndexStyle ( 1 , DRAW_ARROW , EMPTY , 3 ); SetIndexArrow( 1 , 218); SetIndexDrawBegin( 1 , 12 ); SetIndexLabel( 1 , "ASC_Trend_Down"); return(0); } int ASC_Trend_Prev = 1; double ASC_Trend_Up = 0, ASC_Trend_Down = 0; int start() { int counted_bars=IndicatorCounted(); if ( Bars <= 100 ) return(-1); if ( counted_bars < 0 ) return(-1); if ( counted_bars > 0 ) counted_bars -- ; int limit = Bars - 12; if ( counted_bars > 0 ) { limit = Bars - counted_bars - 12; } double x1 = 67 + RISK, x2 = 33 - RISK; for ( int i = limit; i >= 0; i -- ) { double SummRange = 0, AvgRange = 0; for ( int u = i + 10; u > i; u -- ) SummRange += High[u] - Low[u]; AvgRange = SummRange / 10; int WprPeriod = 3 + RISK * 2; for ( u = i + 10; u > i; u -- ) if ( MathAbs( Open[u] - Close[u+1] ) >= AvgRange * 2 ) { WprPeriod = 3; break; } for ( u = i + 7; u > i; u -- ) if ( MathAbs( Close[u+3] - Close[u] ) >= AvgRange * 4.6 ) { WprPeriod = 4; break; } double WprAbs = 100 + iWPR( Symbol(), 0, WprPeriod, i ); if ( WprAbs > x1 && ASC_Trend_Prev == -1 ) { ASC_Trend_Up = Low[i] - AvgRange * 0.5; ASC_Trend_Prev = 1; } if ( WprAbs < x2 && ASC_Trend_Prev == 1 ) { ASC_Trend_Down = High[i] + AvgRange * 0.5; ASC_Trend_Prev = -1; } if ( WprAbs > x1) buf0[i] = ASC_Trend_Up; if ( WprAbs < x2) buf1[i] = ASC_Trend_Down; } }Спасает только удаление индикатора и подключение его заново.
Поскольку дубликатов меток как будто не видно (две одинаковых на одном баре),
то похоже что при таких манипуляциях (смена таймфрейма и пр.)
не выполняется очистка/инициализация буферов индикатора (buf0, buf1).
но наверное это должен бы терминал делать.
int init() { .................. int i,count; count = ArraySize(buf0); for(i = 0; i < count; i++) buf0[i] = 0; count = ArraySize(buf1); for(i = 0; i < count; i++) buf1[i] = 0; return(0); }он не изменённый, он оптимизированный (т.е. код=) принцип работы - как в оригинале ;)
Но изменения есть, он показывает не одну стрелку,
а много, пока есть сигнал.