Обычно примерно такая конструкция используется. Хоть и рисование
на истории, зато без разрывов.
for(x = e-period; x >= 0; x--) { trend[x] = trend[x+1]; if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1; if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1; if (trend[x]>0) { Uptrend[x] = ExtMapBuffer[x]; if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1]; Dntrend[x] = EMPTY_VALUE; } else if (trend[x]<0) { Dntrend[x] = ExtMapBuffer[x]; if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1]; Uptrend[x] = EMPTY_VALUE; } }
Непонятно, можете пояснить суть?
Непонятно, можете пояснить суть?
Представим, что в буфере ExtMapBuffer у нас некая линия, которую нужно
раскрасить в два цвета в зависимости от её направления (вверх/вниз).
Для этого нам понадобятся три дополнительных буфера: Uptrend (если
линия направлена вверх), Dntrend (если линия направлена вниз), trend (как
раз для борьбы с разрывами). Направление определяем, сравнивая текущее значение линии с предыдущим,
и запоминаем в буфере trend (вверх =1, вниз=-1). Если значение линии
не меняется trend[x] = trend[x+1]. Дальше всё просто: если trend[x]>0 и trend[x+1]<0 значит имеет место разворот с нисходящего движения на восходящее и Uptrend[x]
= ExtMapBuffer[x], Uptrend[x+1]=ExtMapBuffer[x+1] (чтобы не было разрыва; линия на
графике состоит из отрезков, для построения отрезка нужны две
точки, а не одна), Dntrend[x] = EMPTY_VALUE (идем вверх, нафик нам Dntrend); если trend[x]<0 и
trend[x+1]>0 значит имеет место разворот с восходяшего движения на нисходящее и Dntrend[x]
= ExtMapBuffer[x], Dntrend[x+1]=ExtMapBuffer[x+1], Uptrend[x] = EMPTY_VALUE. Недостаток метода состоит в том,
что он иногда вводит в заблуждение некоторых пользователей
+ ещё один косяк, который становится заметен, если например сделать на основе той
же линии гистограмму. Был пропущен одиночный синий бар, но не был пропущен одиночный красный.
banderass:
Непонятно, можете пояснить суть?
Непонятно, можете пояснить суть?
Привет. А суть в том, что последняя точка линии одного цвета, должна быть первой точкой линии другого цвета.
Sadhu
Talex
Talex
int start() { int limit, counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars-1; for(int i=0;i<limit;i++) { double maFast=iMA(NULL,0,24,0,MODE_SMA,PRICE_MEDIAN,i), maSlow=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,i), maSlow2=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,i-1); ExtMapBuffer3[i]=maFast; ExtMapBuffer2[i]=maSlow; ExtMapBuffer1[i]=maSlow; if(i>0) { if(maFast>maSlow) { ExtMapBuffer1[i]=0.0; ExtMapBuffer2[i-1]=maSlow2; } else { ExtMapBuffer1[i-1]=maSlow2; ExtMapBuffer2[i]=0.0; } } } return(0); }Большое спасибо за ответы, вроде разобрался. ExtMapBuffer3 рисует медленную линию (если кто разбираться будет):
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
код:
Как исправить?