Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
ChartBuilder - индикатор для MetaTrader 4
- Просмотров:
- 18429
- Рейтинг:
- Опубликован:
- 2012.02.20 07:32
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Индикатор является достаточно универсальным, может быть полезен как любителям арбитража или торговли спредами, так и просто всяким исследователям. Лично мне после его написания пришлось выкинуть в топку несколько узкоспециализированных "построителей", использующих кучу отдельных параметров (множители, коэффициенты, названия символов и т.д.). А в данном индикаторе всё задаётся лишь одной математической формулой,
Например можно задать такую формулу для построения графика спреда между соевыми бобами и соепродуктами (соевой мукой и маслом) :
ZSH2 - (3.5 * ZMH2 + 24 * ZLH2) / 2
(пробелы между знаками ставить необязательно)
В результате получаем график:
------- график удалён --------
Для построения берутся цены закрытия соответствующих баров по каждому инструменту, указанному в формуле.
Поддерживаются основные арифметические действия: + - * / ^
Кроме того, я предусмотрел использование некоторых стандартных индикаторных функций:
MA, ATR, StdDev, AD, ADX, CCI, DeMarker, MACD, RSI, Stochastic, Bands, Envelopes, Momentum, Open, Close, High, Low, Volume
Их синтаксис тот же самый что и в языке MQL4 (MA соответствует iMA, ATR соответствует iATR и т.д.).
Т.е. например функция MA имеет такой вид: MA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift)
Единственное их отличие от MQL - это то что timeframe тут задаётся в привычном текстовом виде: M1, M5 ..., H1, D1 и т.д.
При этом можно указывать не все параметры. Например так: MA(symbol, timeframe, period). Все остальные опущенные параметры заполняются нулями. Можно также опускать параметры и в начале, но тогда обязательно нужно ставить запятые, чтобы отделять их от последующих.
Если в качестве таймфрейма указывается 0, то берётся текущий таймфрейм.
Если в качестве символа указывается 0, то берётся символ текущего окна. Если символ вообще не указывается, то берётся предыдущий символ, использовавшийся ранее в этой же формуле.
Например формула EURUSD/MA(,D1,10) - GBPUSD/MA(,D1,10) равносильна формуле EURUSD/MA(EURUSD,D1,10) - GBPUSD/MA(GBPUSD,D1,10)
Также есть несколько дополнительных функций:
- LineOpen, LineClose, LineHigh, LineLow - возвращают цену (Open/Close/High/Low) в выбранный момент времени, отмеченный на графике. Для этого на графике появляется вертикальная красная линия, двигая которую можно выбрать требуемый момент времени. Соответственно при изменении положения линии график будет динамически пересчитываться (в момент прихода нового тика или ручного обновления графика). Функции могут содержать три стандартных параметра: symbol, timeframe, barshift. Например, LineClose(EURUSD,M15,0)
- Maximum, Minimum - возвращают максимальное и минимальное значения на указанном промежутке. Они имеют такой вид:
Maximum(symbol, timeframe, bars, barshift, valuetype)
где bars - это количество баров для поиска;
barshift - это сдвижка начального бара влево относительно расчитываемого бара (по умолчанию = 0);
valuetype - это тип искомого значения (Open, Low, High, Close, Volume), его можно задавать либо в текстовом виде, либо просто цифрой (0, 1, 2, 3, 4). По умолчанию = Close
- MaxOpen, MinOpen, MaxHigh, MinHigh, MaxLow, MinLow - по сути они дублируют Maximum и Minimum для конкретных случаев, добавлены просто для удобства. Для них не требуется указывать в конце параметр valuetype, ибо он указан уже в названии функции.
Математические функции:
- Abs(value) - модуль числа
- Round(value, digit) - округление до требуемого числа знаков после запятой. Если параметр digit опущен, то округляется до целого
- Log(value, floor) - логарифм по основанию floor. Если параметр floor опущен, то берётся натуральный логарифм
- Exp(value) - экспонента
- Rnd() - случайное число от 0 до 1
- Max(value1, value2) - максимальное из двух значений
- Min(value1, value2) - минимальное из двух значений
Поддерживаются сложные функции с вложенными параметрами. Можно например задать такую формулу:
MA(StdDev(EURUSD+GBPUSD*0.7, H1, 100), H1, 100).
Среди индикаторных функций вложенность доступна лишь для следующих: Bands, MA, CCI, Envelopes, Momentum, RSI, StdDev, поскольку только для них в MQL4 имеются встроенные аналоги, работающие на пользовательских массивах. Все остальные функции придётся писать самому, я не стал этим заморачиваться.
Впрочем я всё же сделал одну функцию, которую обозначил как ATR2, это то же самое что и обычный ATR, только добавлен один дополнительный параметр. Синтаксиc такой:
Все математические функции также поддерживают вложенные параметры.ATR2(symbol, timeframe, period_atr, period_ma, shift)
где symbol - символ или выражение(формула)
timeframe - таймфрейм, с которого берутся данные для расчёта;
period_atr - временной период, на котором расcчитывается волатильность
period_ma - период усреднения (количество периодов period_atr);
shift - сдвиг влево на заданное число периодов period_atrНапример, ATR2(EURUSD+GBPUSD, M1, D1, 20, 1) - считает среднедневную волатильность синтетика EURUSD+GBPUSD, расчитанную по минутному таймфрейму, усреднённую за 20 дней, начиная с предыдущего дня.
Можно использовать в формуле ссылки на другие формулы. Ссылка указывается так: FormulaN, где N - это номер формулы. Либо более короткий вариант: FN.
Например, у нас задана Fomula1= "A+B". А в формуле Formula2 мы можем ссылаться на первую формулу: Formula2= "MA(F1, M15, 20)"
Названия функций и торговых символов можно писать в любом регистре.
Названия символов также можно задавать в квадратных скобках. Это необходимо в тех случаях, когда в названии символа присутствуют знаки, совпадающие с математическими. Например если имеется такой символ: GAZR-6.13, то его следует использовать в формуле в квадратных скобках: [GASR-6.13]
Если торговый символ, заданный в формуле, не найден в списке инструментов, то производится попытка загрузить по нему котировки из папки истории, т.е. из соответствующего файла .hst. Это позволяет использовать "чужие" символы, отсутствующие в терминале.
Любую формулу можно "закомментировать", т.е. сделать неактивной. Для этого перед ней нужно поставить значок одиночной кавычки: '
например: Formula1= 'CLK3-CLM3. При этом график Formula1 не будет рисоваться на экране
Теперь расскажу про настройки индикатора.
- Formula1 - в этих восьми полях собственно и задаются формулы. Для каждой будет построен свой график.
- Formula2
- Formula3
- Formula4
- Formula5
- Formula6
- Formula7
- Formula8
- OnlyNumbers - здесь можно вписать (через запятую или пробел) номера тех формул, графики которых должны отображаться. Все остальные графики рисоваться не будут. Если же этот параметр пустой, то отображаются все графики.
- PrecisionDigits - точность получаемых значений индикатора (количество знаков после запятой). Если задано -1, то точность назначается автоматически.
- AutoScale - автомасштабирование графиков. Если TRUE, то все заданные графики формул подгоняются под размер графика первой доступной формулы (точнее под размер его видимой части). При этом естественно искажаются их ценовые значения, ведь шкала у индикатора всего одна.
Для экономии ресурсов масштабирование производится не динамически, а только при инициализации индикатора либо при ручном обновлении окна (кнопка "Обновление").
- ShowBidAsk - если стоит TRUE, то отображаются уровни bid/ask для каждого синтетического графика
- TimeShiftFromMainChart_minutes - здесь можно задать сдвижку по времени (в минутах) относительно временной шкалы основного графика
- BarTimeSyncMode_ByMinutes - режим синхронизации между барами разных символов. Если TRUE, то синхронизация задаётся в виде количества минут, иначе по количеству баров
- BarTimeSyncSize - размер синхронизации (количество минут либо количество баров). Если временной лаг превышает данное значение, то индикатор не рисуется на данном баре. Если задано -1, то синхронизация вообще не используется.
- OnlyClosePrice - если TRUE (по умолчанию), то графики строятся только по ценам закрытия. Если FALSE, то строятся в виде баров с ценами open/close/high/low. Но во втором случае можно будет построить не более двух графиков, ибо количество индикаторных буферов к сожалению ограничено. Кроме того, данный вид отображения графиков будет правдоподобным лишь в том случае, если в формуле присутствует только один торговый символ. В противном случае для каждого символа необходим внитрибаровый синтез с использованием младших таймфреймов, а у меня он не используется, поэтому результат окажется недостоверным. Так что этот режим годится в основном лишь для показа графика "чужого" символа.
- DrawMode - режим отображения графика: 0-LINE (по умолчанию), 1-SECTION, 2-HISTOGRAM, 3-POINTS
- Color1 - здесь задаются цвета каждого графика
- Color2
- Color3
- Color4
- Color5
- Color6
- Color7
- Color8
- LabelsOnTheRight - если TRUE, то формулы отображатся в правой части графика, иначе в левой (по умолчанию)
- SignalChartNumber - номер графика, для которого используются сигнальные значения и сигнальные линии. Можно перечислить несколько номеров (через пробел или запятую), соответственно для всех этих графиков будут работать сигналы.
- Signal_HighValue - верхнее сигнальное значение, при достижении которого начнут подаваться звуковые сигналы, а в лог будет печататься сообщение
- Signal_LowValue - нижнее сигнальное значение
- Signal_HighLine - имя верхней сигнальной линии, т.е. любой построенной на графике линии (горизонтальной или трендовой), которая станет верхней границей, при достижении которой будет выдаваться сигнал и сообщение.
- Signal_LowLine - аналогично для нижней сигнальной линии
- SaveToFile_ChartNumber - номер графика, значения которого будет сохраняться в текстовый файл. Сохранение происходит только в момент полного пересчёта индикатора, т.е. при инициализации либо при ручном обновлении графика.
- SaveToFile_FileName - имя файла, куда сохраняются значения графика
- SaveToFile_Delimiter - текстовый разделитель, используемый в файле. Если значение пустое, то используется символ табуляции.
Ну вот вроде и всё. Если есть какие-то вопросы/замечания/пожелания, то обращайтесь.
Благодарности также можно отправлять мне на кошелёк: Z281172557659 :)
История изменений
--------------------------------------
Изменения от 26.02.2012:
- Добавлена функция RSI
- Добавлена операция возведения в степень. Синтаксис такой: x^y (где x - основание, y - показатель). Основание и показатель могут быть заданы любыми выражениями.
-----------------------------------------------
Изменения от 09.04.2012:
- Исправлена работа функции ATR
- Введён параметр AutoScale для автоматического масштабирования графиков. Если он включён, то все заданные графики формул, начиная со второго, подгоняются под размер графика первой формулы (точнее под размер его видимой части). Правда при этом искажаются их ценовые значения, ведь шкала у индикатора всего одна.
В принципе аналогичного эффекта можно было добиться и раньше, перетащив несколько индикаторов в одно и то же окно. Они тогда масштабируются автоматически самой системой, причём гораздо быстрее. Но я всё ж решил на всякий случай тоже реализовать такую фишку, тем более в некоторых моментах есть отличия. Графики у меня масштабируются не динамически, а только при инициализации индикатора либо при ручном обновлении окна (кнопка "Обновление"), что на мой взгляд удобно, т.к. не происходит "виляний" графиков при их прокрутке, а они остаются статичными.
- Ну и также ещё поправил кое-какие недочёты. Например при перетаскивании нескольких индикаторов в одно окно, все лэйблы с названиями формул остаются на экране. Раньше часть из них пропадала.
------------------------------------------------------------
Изменения от 04.03.2013 (версия 2.0):
- Увеличено число формул и графиков до 8 штук.
- Расширен список поддерживаемых функций в формулах. Добавлено несколько стандартных индикаторных функций: Bands, Envelopes, Momentum. А также я сделал дополнительные функции, которые тоже могут быть полезны: Abs, Round, Log, Exp, Rnd, Max, Min, Maximum, Minimum, Volume. \
- Добавлена поддержка вложенных функций.
- Можно использовать в формуле ссылки на другие формулы.
- В качестве периода усреднения функции теперь можно задать все имеющиеся бары на графике, для этого нужно просто указать нулевой период.
- Любую формулу теперь можно "закомментировать", т.е. сделать неактивной. Для этого перед ней нужно поставить значок одиночной кавычки: '
- Добавлен параметр OnlyNumbers . В нём можно вписать (через запятую или пробел) номера лишь тех формул, графики которых должны отображаться. Все остальные формулы автоматически деактивируются. Если же в параметре ничего не указано, то отображаются все графики.
- Названия функций и торговых символов можно писать в любом регистре.
- Добавлена возможность сохранять значения графика в текстовый файл. Для этого добавлен параметр SaveToFile_ChartNumber, где нужно указать номер графика. А в параметре SaveToFile_FileName указывается имя файла. График сохраняется только в момент полного пересчёта индикатора, т.е. при первом запуске (инициализации) и при ручном обновлении.
- Если торговый инструмент, заданный в формуле, не найден в списке инструментов, то производится попытка загрузить по нему котировки из папки истории, т.е. из соответствующего файла .hst. Это позволяет использовать старые контракты, выведенные брокером из терминала, либо подставлять "чужие" инструменты.
- Длинные названия формул теперь отображаются на экране корректно.
------------------------------------------------------------
Изменения от 26.04.2013 (версия 2.1):
- Оптимизирован алгоритм, увеличено быстродействие
- Исправлена проблема с символами в нижнем регистре
- Добавлена возможность задавать названия символов в квадратных скобках. Это необходимо в тех случаях, когда в названии символа присутствуют знаки, совпадающие с математическими. Например, если имеется такой символ: GAZR-6.13, то его следует использовать в формуле в квадратных скобках: [GASR-6.13]
- В параметре Signal_ChartNumber теперь можно перечислить несколько номеров, через пробел или запятую. Соответственно сигнал будет срабатывать для всех графиков с указанными номерами. Кроме того, данный параметр теперь выводится на экран, под названиями формул.
- Введена задержка в 5 секунд между последовательными сигналами.
- Добавлен параметр SaveToFile_Delimiter, в котором можно указать текстовый разделитель для сохраняемых данных. Если значение пустое, то используется символ табуляции.
- Исправлены разные баги.
Выводит % закрытых сделок длительностью не более N минут
RNN_MT4Советник со встроенной экспертной системой
Улучшенная версия индикатора RSI
Geo_ShowOpenDayLevelИндикатор, отображающий на любом ТФ уровень открытия дня.