Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 38
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Обнаружение паттерна "Бычий шип
-
Паттерн "3 бара":
-
1-я свеча: Зеленая с большим телом (бычий шип).
-
2-я свеча: Красная (откат).
-
3-я свеча: Зеленая с большим телом (бычий шип).
-
-
При появлении этого паттерна создается зона.
Создание зоны
-
Из диапазона high/low 3 свечей рисуется синий прямоугольник.
-
Зеленая горизонтальная линия входа проводится по цене открытия средней (2-й) свечи.
-
Линия простирается далеко в будущее, пока цена не вернется.
ОБЪЯСНЕНИЕ ВХОДОВ
mq5 input color BoxColor = clrBlue; // Цвет шкатулки с узором из 3 свечей input color EntryLineColor = clrLime; // Цвет линии входа input ENUM_LINE_STYLE EntryLineStyle = STYLE_SOLID; // Стиль входной строки input int BoxWidth = 2; // Ширина границы коробки input int EntryLineWidth = 2; // Ширина линии ввода input int EntryLineLength = 200; // Как далеко простирается линия смягчения ``` These inputs let you fully control the style of the box and entry line.
ОСНОВНАЯ ИДЕЯ
Мы ищем 3-свечной бычий паттерн.
1. Первая свеча - сильная бычья (шип)
2. Вторая свеча - медвежий откат
3. Третья свеча - снова сильный бычий шип
Когда это появляется, мы рисуем:
- рамку вокруг паттерна
- Горизонтальную линию на открытии 2-й свечи (точка входа).
Как только цена возвращается к этой линии ("смягчение"), мы обрываем линию и не перерисовываем ее.
СТРУКТУРЫ ДАННЫХ
struct PatternInfo { datetime time; // Время шаблона double entry; // Цена входа (открытие 2-й свечи) double high; // Самый высокий максимум из 3 свечей double low; // Самый низкий минимум из 3 свечей bool mitigated; // Вернулась ли цена к начальному уровню? }; CArrayObj activePatterns; ``` We use a struct `PatternInfo` to track each valid pattern and store it in an array. This helps avoid repeated processing.
ФУНКЦИЯ ИНИЦИАЛИЗАЦИИ
int OnInit() { IndicatorSetInteger(INDICATOR_DIGITS, _Digits); ArrayInitialize(activePatterns, 0); return INIT_SUCCEEDED; } ``` We set the indicator precision and prepare our array.
ОБНАРУЖЕНИЕ ПАТТЕРНА (НА КАЖДОМ ТИКЕ)
```mq5 for (int i = limit - 3; i >= 0; i--) { ``` We loop through candles and look 3 bars back. ```mq5 if (isBullish(i+2) && isBearish(i+1) && isBullish(i)) ``` We check if the last 3 candles fit the spike pattern: Green-Red-Green. ```mq5 double high = MathMax(MathMax(High[i], High[i+1]), High[i+2]); double low = MathMin(MathMin(Low[i], Low[i+1]), Low[i+2]); double entry = Open[i+1]; ``` We extract high/low for box and the entry level from the 2 nd (middle) candle. ```mq5 PatternInfo *pattern = new PatternInfo; pattern.time = Time[i]; pattern.entry = entry; pattern.high = high; pattern.low = low; pattern.mitigated = false; ``` Create and add this pattern to our list.
```mq5 string boxName = "Box_" + IntegerToString(Time[i]); ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, Time[i+2], high, Time[i], low); ``` Draw the rectangle (box) from the 3-candle pattern. ```mq5 string lineName = "EntryLine_" + IntegerToString(Time[i]); ObjectCreate(0, lineName, OBJ_TREND, 0, Time[i], entry, Time[i] + PeriodSeconds() * EntryLineLength, entry); ``` Draw the entry line from the 2 nd candle’s open forward in time.
ПРОВЕРКА СМЯГЧЕНИЯ (НА КАЖДОМ ТИКЕ)
Loop through all patterns:
```mq5
for (int p = 0; p < activePatterns.Total(); p++) {
PatternInfo *pt = (PatternInfo*)activePatterns.At(p);
```
If not already mitigated, check:
```mq5
if (!pt.mitigated && Low[0] <= pt.entry)
```
If current price hits the entry level:
```mq5
pt.mitigated = true;
ObjectDelete("EntryLine_" + IntegerToString(pt.time));
```
Delete original long line.
```mq5
ObjectCreate(0, "MitigatedLine_" + IntegerToString(pt.time), OBJ_TREND, 0,
pt.time, pt.entry,
Time[0], pt.entry);
```
Create a short line showing where mitigation happened.
HELPER FUNCTIONS
### Check Bullish/Bearish:
```mq5
bool isBullish(int i) {
return Close[i] > Open[i];
}
bool isBearish(int i) {
return Close[i] < Open[i];
}
Этот индикатор является простым, но мощным:
- Обнаруживает реальное поведение спайков в Boom
- Визуализирует входы "умных денег
- Автоматически обнаруживает смягчение
Теперь вы можете протестировать его вживую на Boom 500 или Boom 1000.
Спасибо за комментарии, если вы хотите спросить или поделиться.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/61749

Этот простой индикатор позволяет легко определить, когда цена достигает определенного времени на любой свече или таймфрейме.

MQL5-скрипт для MetaTrader 5, который добавляет две кнопки для закрытия всех позиций на покупку или продажу для текущего символа.

Класс для чтения и записи отдельных битов или последовательностей битов в буфер и из него.

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.