- Индикаторы - Чарты - MetaTrader 5 для Android
- Relative Vigor Index - Осцилляторы - Использование технических индикаторов - Графики котировок, технический и фундаментальный анализ
- Спреды - Для продвинутых пользователей - Торговые операции
Я сам новичок в MQL (на моем счету пока единственный индикатор), но исходя из опыта програмирования в других языках, думаю, можно сделать так. Поксольку MathMax имеет только 2 параметра, а нам надо сравнить 4 значения, придется делать вложенные MathMax'ы: MathMax(a1,MathMax(a2,MathMax(a3,a4))). Таким образом, последний, третий, MathMax дает максимум из а4 и а3, второй - из значения третьего и а2, и первый - из значения второго и а1. Если нужно сравнить больше значений, всего-навсего возрастает глубина вложения MathMax'ов.
Не вполне ясно, нужно ли тебе для каждого значения индикатора выбрать максимум из 4 значений вперед или назад относительно текущей точки индикатора; если назад:
for(int i=3; i<Bars; i++) return (MathMax(Close[i],MathMax(Close[i-1],MathMax(Close[i-2],Close[i-3]))));
Ну, а если вперед, то:
for(int i=0; i<Bars-3; i++) return (MathMax(Close[i],MathMax(Close[i+1],MathMax(Close[i+2],Close[i+3]))));
Пожалуйста, сообщи, помогло ли.
спасибо большое, что откликнулся на просьбу, потому что я впервые обратился за помощью на форуме, долго не получал ответ, если чесна совсем отчаялся в итоге сделал всё сам, нужно выбирать максимум вперед, я это реализовал следующим образом:
HighBuffer[i]=High[Highest(NULL,0,PRICE_CLOSE, HighPeriod,i)];
однако результат меня не совсем удовлетворил, потому что я сначал енто реализовал на программе которую нам преподают в универе
Слушай, я тебе неправильно написал. Свеча с индексом [0] - это последняя (текущая) свеча, [1] - предпоследняя, и т. д. Я сейчас для пробы написал индикатор с максимумом назад (так проще). Вот его сорец:
#property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue double Buf_0[]; int init() { SetIndexBuffer(0,Buf_0); SetIndexStyle (0,DRAW_LINE,STYLE_DOT,2); return; } int deinit() { //---- //---- return(0); } int start() { int i, Counted_bars; Сounted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; while(i>=0) { Buf_0[i]=(MathMax(Close[i],MathMax(Close[i+1],MathMax(Close[i+2],Close[i+3])))); i--; } return; }
Вроде работает. Для того, чтобы индикатор считал максимумы вперед, надо либо заканчивать его тремя свечами раньше (просто, но неполезно), либо начиная от третьей назад свечи считать максимумы сперва от трех свечей, потом от двух, и, на текущей свече, только от себя самой (поскольку иначе, как легко догадаться, нам будут нужны цены закрытия еще не существующих свечей). Ну, тут уж сам сообразишь, раз программируешь.
Для чего понадобилось
Сounted_bars=IndicatorCounted();
и все остальное, что с этим связано? Для оптимизации вычислений, чтобы с каждым тиком пересчитывать не весь график, а только если появилась новая свеча, и только для последних 4 свечей.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования