Разработка инструментария для анализа движения цен (Часть 24): Инструмент количественного анализа Price Action
Содержание
Введение
Большинство трейдеров, торгующих по движению цены, опираются на характерные свечные формации, такие как пин-бары, доджи, паттерны поглощения и свечи марубозу. Эти свечи используют для выявления изменений в рыночных настроениях и поиска потенциальных разворотов или движений продолжения. Ручной поиск таких сигналов на десятках графиков отнимает много времени и легко приводит к пропускам.
Чтобы решить эту задачу, мы разработали для MetaTrader 5 советник Price Action Quantification Analysis. Этот советник:
- автоматически анализирует заданное количество последних баров на предмет четырех широко признанных паттернов движения цены;
- отмечает каждый обнаруженный паттерн на графике стрелками и метками, давая четкие визуальные ориентиры;
- выдает алерт и записывает движение следующего бара в пунктах, помогая оценить силу сигнала;
- предоставляет встроенную статистику тестирования на исторических данных, рассматривая каждый паттерн как "сделку" и вычисляя общий процент успешных срабатываний.
В следующих разделах мы разберем структуру советника, пройдемся по его настраиваемым параметрам и покажем, как показатели его эффективности могут сделать ваш подход к торговле по движению цены более точным. Давайте начнем с конкретных свечных паттернов, которые отслеживает этот советник, — разберем строение каждой свечи и расчеты, с помощью которых они определяются.
Свечные паттерны
- Пин-бары
Пин-бар – это одна свеча с маленьким телом и длинным хвостом, то есть тенью. Когда вы видите такую свечу, это означает, что цена пыталась далеко уйти в одну сторону, но затем была отброшена обратно.
В медвежьем пине-баре длинная верхняя тень показывает, что покупатели не смогли удержать цену наверху и инициативу перехватили продавцы.

Рис. 1. Медвежий пин-бар
У бычьего пин-бара длинная нижняя тень, что указывает на вмешательство покупателей и разворот инициативы вверх.

Рис. 2. Бычий пин-бар
Цвет свечи может дополнительно усиливать сигнал. В медвежьем пин-баре красное (или черное) тело выглядит убедительнее, потому что свеча закрывается ниже цены открытия, что указывает на доминирование продавцов. Для бычьего пин-бара зеленое (или белое) тело усиливает сигнал, поскольку свеча закрывается выше цены открытия, отражая давление покупателей. Однако форма пин-бара и длина его хвоста важнее, чем один только цвет. Чтобы считать такой сигнал надежным, ищите хвост, который как минимум в два-три раза длиннее тела, обращайте внимание на всплески объема в момент резкого отбоя цены и проверяйте, сформировался ли пин-бар рядом с известными уровнями поддержки или сопротивления. Эти дополнительные шаги помогают отличать настоящие развороты от обычных теней.
Логика определения
- Вычислите candleBody, topShadow и bottomShadow.
- Должно выполняться условие candleBody > minBodyPoints * _Point.
Медвежий пин-бар:
topShadow >= wickToBodyRatio * candleBody
bottomShadow < smallWickCap * candleBody
Бычий пин-бар:
bottomShadow >= wickToBodyRatio * candleBody
topShadow < smallWickCap * candleBody
// 1. Calculate parts double candleBody = MathAbs(closePrice - openPrice); double topShadow = highPrice - MathMax(openPrice, closePrice); double bottomShadow = MathMin(openPrice, closePrice) - lowPrice; // 2. Minimum body check if(candleBody > minBodyPoints * _Point) { // Bearish pin bar if(topShadow >= wickToBodyRatio * candleBody && bottomShadow < smallWickCap * candleBody) Print("Bearish Pin Bar detected"); // Bullish pin bar else if(bottomShadow >= wickToBodyRatio * candleBody && topShadow < smallWickCap * candleBody) Print("Bullish Pin Bar detected"); }
- Доджи
Доджи формируется, когда цены открытия и закрытия свечи практически совпадают. Такой паттерн указывает на рыночную неопределенность, а его направленность определяется предшествующим трендом. Различия в длине верхней и нижней теней образуют фигуры, напоминающие знак плюса, крест или перевернутый крест.

Рис. 3. Доджи
Логика определения
- Вычислите candleBody, fullRange, topShadow и bottomShadow.
- Должно выполняться условие candleBody ≤ maxDojiRatio * fullRange.
- Должны выполняться условия topShadow > candleBody и bottomShadow > candleBody.
// 1. Calculate body and range double candleBody = MathAbs(closePrice - openPrice); double fullRange = highPrice - lowPrice; double topShadow = highPrice - MathMax(openPrice, closePrice); double bottomShadow = MathMin(openPrice, closePrice) - lowPrice; // 2. Tiny body test if(candleBody <= fullRange * maxDojiRatio) { // 3. Both shadows must extend beyond the body if(topShadow > candleBody && bottomShadow > candleBody) Print("Doji detected"); }
- Свечные паттерны поглощения
Существует два типа паттернов поглощения: бычье поглощение и медвежье поглощение.
Бычье поглощение
Этот разворотный паттерн из двух свечей появляется, когда нисходящий тренд или консолидация подходят к концу. Сразу за небольшой медвежьей свечой формируется более крупная бычья, которая полностью перекрывает тело предыдущей. Размер второй свечи показывает, что покупатели полностью перехватили инициативу у продавцов, и часто знаменует начало сильного восходящего движения.

Рис. 4. Бычье поглощение
Медвежье поглощение
Это зеркальный паттерн. За небольшой бычьей свечой следует более крупная медвежья, которая полностью поглощает тело предыдущей. Этот паттерн указывает на то, что продавцы перехватили инициативу, и может сигнализировать о начале сильного нисходящего движения.

Рис. 5. Медвежье поглощение
Логика определения
Вычислите prevBody = |prevClose - prevOpen|, currBody = |close - open|.
Должно выполняться условие currBody > prevBody.
Бычье поглощение:
- prevClose < prevOpen
- openPrice ≤ prevClose
- closePrice ≥ prevOpen
Медвежье поглощение:
- prevClose > prevOpen
- openPrice ≥ prevClose
- closePrice ≤ prevOpen
// 1. Compute body sizes double prevBody = MathAbs(prevClose - prevOpen); double currBody = MathAbs(closePrice - openPrice); // 2. Must be larger than previous if(currBody > prevBody) { // Bullish engulfing if(prevClose < prevOpen && openPrice <= prevClose && closePrice >= prevOpen) Print("Bullish Engulfing detected"); // Bearish engulfing else if(prevClose > prevOpen && openPrice >= prevClose && closePrice <= prevOpen) Print("Bearish Engulfing detected"); }
- Свеча марубозу

Рис. 6. Марубозу
Свеча марубозу выделяется длинным телом и почти полным отсутствием теней. Цены открытия и закрытия охватывают почти весь диапазон свечи, что указывает на решительные действия участников рынка. Существует три варианта марубозу, и у каждого есть бычья и медвежья версия:
Полная марубозу
Бычья: Открытие на минимуме, закрытие на максимуме Покупатели ведут цену от начала и до конца.
Медвежья: Открытие на максимуме, закрытие на минимуме. Продавцы доминируют на протяжении всей сессии.
Открытая марубозу
Бычья: Открытие на минимуме, закрытие немного ниже максимума (с небольшой верхней тенью). Покупатели сразу перехватывают инициативу.
Медвежья: Открытие на максимуме, закрытие немного выше минимума (с небольшой нижней тенью). С самого начала сессии инициативой владеют продавцы.
Закрытая марубозу
Бычья: Закрытие на максимуме, открытие немного выше минимума (с небольшой нижней тенью). К закрытию давление покупателей нарастает.
Медвежья: Закрытие на минимуме, открытие немного ниже максимума (с небольшой верхней тенью). К закрытию давление продавцов усиливается.
Логика определения
- Вычислите candleBody, fullRange, topShadow и bottomShadow.
- Должно выполняться условие candleBody ≥ marubozuRatio * fullRange.
- Должны выполняться условия topShadow ≤ (1 – marubozuRatio) * fullRange и bottomShadow ≤ (1 – marubozuRatio) * fullRange.
- Если closePrice > openPrice, свеча считается бычьей; в противном случае – медвежьей.
// 1. Calculate parts double candleBody = MathAbs(closePrice - openPrice); double fullRange = highPrice - lowPrice; double topShadow = highPrice - MathMax(openPrice, closePrice); double bottomShadow = MathMin(openPrice, closePrice) - lowPrice; // 2. Body covers most of the range if(candleBody >= marubozuRatio * fullRange) { // 3. Shadows must be small double maxWick = (1 - marubozuRatio) * fullRange; if(topShadow <= maxWick && bottomShadow <= maxWick) { // 4. Bullish or bearish if(closePrice > openPrice) Print("Bullish Marubozu detected"); else Print("Bearish Marubozu detected"); } }
Разбор советника на MQL5
Выше показана схема, иллюстрирующая работу советника на графике MetaTrader 5. Ниже результаты сведены в таблицу – каждое значение представляет собой процентное изменение. Когда мы приступили к созданию данного советника, нашей главной целью было автоматизировать поиск ключевых свечных паттернов, на которые трейдеры часто опираются при принятии торговых решений, таких как пин-бары, доджи, паттерны поглощения и марубозу. Мы хотели, чтобы советник объективно анализировал недавнее движение цены, точно распознавал эти паттерны и давал на графике четкие визуальные сигналы, а также статистическую обратную связь об эффективности каждого паттерна.
Для этого мы начали с определения входных параметров, которые обеспечивают гибкость анализа. К ним относятся количество анализируемых баров (InpLookbackBars), минимальный размер тела в пунктах (InpMinBodySizePts) для отсечения незначимых свечей, а также соотношение тени и тела (InpWickBodyRatio) для распознавания пин-баров. Мы также добавили параметр периода ATR для оценки рыночной волатильности, которая может влиять на правила распознавания паттернов.
// Input parameters for customization input int InpLookbackBars = 200; // Bars to scan input int InpMinBodySizePts = 10; // Min body size (points) input double InpWickBodyRatio = 2.0; // Min wick-to-body ratio input int InpATRPeriod = 14; // ATR period
На этапе инициализации (OnInit) мы настроили массивы для хранения рассчитанных данных по каждому бару, таких как размер тела, верхняя и нижняя тени, полный диапазон и значения ATR. Мы также настроили эти массивы как таймсерии, чтобы эффективно обрабатывать недавние бары. Кроме того, мы подготовили небольшой буфер для отслеживания недавних сигналов, что впоследствии помогает анализировать успешность паттернов.
int OnInit() { ArraySetAsSeries(Body,true); ArraySetAsSeries(UpperWick,true); ArraySetAsSeries(LowerWick,true); ArraySetAsSeries(TotalRange,true); ArraySetAsSeries(ATR,true); ArrayResize(Body, InpLookbackBars+2); ArrayResize(UpperWick, InpLookbackBars+2); ArrayResize(LowerWick, InpLookbackBars+2); ArrayResize(TotalRange, InpLookbackBars+2); ArrayResize(ATR, InpLookbackBars+2); for(int i=0;i<5;i++) g_history[i]=""; return(INIT_SUCCEEDED); }Основная логика сосредоточена в функции OnTick, которая выполняется на каждом новом рыночном тике. Чтобы избежать лишних вычислений, мы добавили проверку, которая по временным меткам позволяет выполнять обработку только один раз на каждом новом баре. Когда обнаруживается новый бар, мы вызываем функцию AnalyzeAndDraw, которая выполняет основной анализ.
void OnTick() { static datetime lastTime=0; datetime current = iTime(_Symbol, _Period, 0); if(current == lastTime) return; // Only process once per new bar lastTime = current; AnalyzeAndDraw(); }
Внутри AnalyzeAndDraw мы сначала удаляем все предыдущие графические объекты, чтобы не загромождать график. Затем мы проходим по последним барам, чтобы вычислить ключевые параметры свечи: размер тела (абсолютную разницу между ценами открытия и закрытия), верхнюю тень (максимум минус максимальная из цен открытия и закрытия), нижнюю тень (минимальная из цен открытия и закрытия минус минимум) и полный диапазон (максимум минус минимум). Мы также копируем значения ATR, чтобы учитывать волатильность при распознавании паттернов.
void AnalyzeAndDraw() { int bars = MathMin(InpLookbackBars, (int)SeriesInfoInteger(_Symbol,_Period,SERIES_BARS_COUNT)); ObjectsDeleteAll(0,0,OBJ_ARROW); ObjectsDeleteAll(0,0,OBJ_LABEL); for(int i=0; i<bars; i++) { double op = iOpen(_Symbol,_Period,i); double cl = iClose(_Symbol,_Period,i); double hi = iHigh(_Symbol,_Period,i); double lo = iLow(_Symbol,_Period,i); // Calculate candlestick components Body[i] = MathAbs(cl-op); UpperWick[i] = hi - MathMax(op,cl); LowerWick[i] = MathMin(op,cl) - lo; TotalRange[i] = hi - lo; } // Copy ATR buffer if(CopyBuffer(iATR(_Symbol,_Period,InpATRPeriod),0,0,bars,ATR)<=0) return; // Exit if ATR data not available
Затем мы применяем правила распознавания паттернов. Например, чтобы выявить пин-бар, мы проверяем, есть ли у свечи маленькое тело и длинная тень, а также превышает ли соотношение тени к телу заданный порог.
- медвежий пин-бар: длинная верхняя тень >= соотношение × тело, короткая нижняя тень;
- бычий пин-бар: длинная нижняя тень >= соотношение × тело, короткая верхняя тень
Сначала мы отсекаем слишком маленькие тела свечей, требуя выполнения условия Body > minPts. Затем мы требуем, чтобы одна тень была как минимум в InpWickBodyRatio раз длиннее тела, а противоположная оставалась меньше 50% длины тела.
// assume Body[i], UpperWick[i], LowerWick[i] already computed if(InpShowPinBar && Body[i] > InpMinBodySizePts*_Point) { // Bearish: towering upper wick, stubby lower wick if( UpperWick[i] > Body[i]*InpWickBodyRatio && LowerWick[i] < Body[i]*0.5 ) type = "Bearish Pin Bar"; // Bullish: towering lower wick, stubby upper wick else if( LowerWick[i] > Body[i]*InpWickBodyRatio && UpperWick[i] < Body[i]*0.5 ) type = "Bullish Pin Bar"; }
В качестве доджи мы ищем свечи с минимальным телом относительно порога, заданного в пунктах, и с тенями, указывающими на возможную рыночную неопределенность.
- Body <= DojiBodyRatio × totalRange;
- обе тени больше тела (чтобы подтвердить наличие теней).
Мы ограничиваем размер тела, например 10% полного диапазона (InpDojiBodyRatio). Требование, чтобы каждая тень была больше тела, отсеивает свечи типа "волчок", у которых почти нет теней.
// TotalRange[i] = high – low if(InpShowDoji && Body[i] <= TotalRange[i] * InpDojiBodyRatio // body tiny vs full range && UpperWick[i] > Body[i] // upper shadow present && LowerWick[i] > Body[i]) // lower shadow present type = "Doji";
Паттерны поглощения предполагают сравнение текущей свечи с предыдущей: мы проверяем, находятся ли цена открытия и цена закрытия предыдущей свечи по разные стороны тела текущей и полностью ли текущая свеча поглощает предыдущую.
- Бычье поглощение: предыдущий бар был медвежьим, цена открытия текущего бара ≤ цене закрытия предыдущего, цена закрытия текущего бара ≥ цене открытия предыдущего и currBody > prevBody
- Медвежье поглощение: предыдущий бар был бычьим, цена открытия текущего бара ≥ цене закрытия предыдущего, цена закрытия текущего бара ≤ цене открытия предыдущего и currBody > prevBody
double po = iOpen(_Symbol,_Period,i+1), pc = iClose(_Symbol,_Period,i+1); double prevBody = MathAbs(pc - po), currBody = Body[i]; if(InpShowEngulfing && currBody > prevBody) { // Bullish: current body engulfs prior’s if(pc < po && op <= pc && cl >= po) type = "Bullish Engulfing"; // Bearish: current body engulfs prior’s else if(pc > po && op >= pc && cl <= po) type = "Bearish Engulfing"; }
Для свечей марубозу мы проверяем, покрывает ли тело большую часть полного диапазона, что указывает на сильный моментум.
- Body >= MarubozuBodyRatio × totalRange (например, >= 90%);
- обе тени <= (1 - MarubozuBodyRatio) × totalRange.
if(InpShowMarubozu
&& Body[i] >= TotalRange[i] * InpMarubozuBodyRatio
&& UpperWick[i] <= TotalRange[i] * (1 - InpMarubozuBodyRatio)
&& LowerWick[i] <= TotalRange[i] * (1 - InpMarubozuBodyRatio))
{
type = (cl > op) ? "Bullish Marubozu" : "Bearish Marubozu";
}
Каждый раз, когда обнаруживается паттерн, мы увеличиваем счетчики общего числа сигналов и успешных срабатываний. Под "успешным срабатыванием" мы понимаем ситуацию, когда следующая свеча движется в ожидаемом направлении, что дает хотя бы базовую оценку надежности паттерна.
if(type!="") { lastIdx = i; lastCl = cl; lastIsBuy = (StringFind(type,"Bullish")>=0); latestSignal = type; g_totalSignals++; double nextC = iClose(_Symbol,_Period,i-1); if(lastIsBuy && nextC>cl) g_totalWins++; if(!lastIsBuy && nextC<cl) g_totalWins++; DrawPattern(i, type, lastIsBuy); break; }
Чтобы сделать эти сигналы наглядными, мы с помощью функции DrawPattern рисуем на графике стрелки вверх или вниз и добавляем метки с типом паттерна. Мы также генерируем алерты, чтобы сразу получать уведомления при появлении паттерна.
void DrawPattern(int idx, const string type, bool isBuy) { datetime t = iTime(_Symbol,_Period,idx); double y = iHigh(_Symbol,_Period,idx) + 15*_Point; string an = StringFormat("PAQ_%s_%d",type,idx); ObjectCreate(0,an,OBJ_ARROW,0,t,y); ObjectSetInteger(0,an,OBJPROP_ARROWCODE,isBuy?233:234); ObjectSetInteger(0,an,OBJPROP_COLOR,isBuy?clrLime:clrRed); string lbl = an+"_lbl"; ObjectCreate(0,lbl,OBJ_LABEL,0,t,y-25*_Point); ObjectSetString(0,lbl,OBJPROP_TEXT,type); ObjectSetInteger(0,lbl,OBJPROP_COLOR,isBuy?clrLime:clrRed); }На протяжении всей разработки мы стремились сделать советник гибким и информативным. Поэтому мы добавили буфер истории паттернов для хранения последних сигналов, а в конце тестирования на исторических данных или при удалении советника выводим статистику эффективности: общее количество сигналов, число успешных срабатываний и их процент. Это помогает нам оценить, насколько эффективна наша логика распознавания паттернов в долгосрочной перспективе.
void OnDeinit(const int reason) { double rate = g_totalSignals>0 ? 100.0*g_totalWins/g_totalSignals : 0.0; PrintFormat("[PAQ] Backtest completed: Signals=%I64d Wins=%I64d WinRate=%.1f%%", g_totalSignals, g_totalWins, rate); }
В итоге этот советник был создан как сочетание логики распознавания свечных паттернов, визуальных индикаторов и средств отслеживания эффективности. Наша цель состояла в том, чтобы создать автоматизированную систему, которая упрощает часто трудоемкий поиск паттернов и при этом дает четкие визуальные сигналы и статистику эффективности, помогая принимать более обоснованные торговые решения.
Результат
Давайте посмотрим, как наш советник показал себя и в реальном времени, и при тестировании на исторических данных. Во-первых, на диаграмме ниже показан паттерн медвежьего поглощения, обнаруженный советником в реальных рыночных условиях. Хорошо видно, что это корректный сигнал: медвежья свеча полностью поглощает предыдущую бычью.
Рис. 7. Медвежье поглощение
Далее показан медвежий пин-бар, который советник также успешно обнаружил. Это корректно распознанный пин-бар, что демонстрирует точность инструмента при определении свечных паттернов.

Рис. 8. Медвежий пин-бар
Наконец, рассмотрим результаты тестирования на исторических данных. Советник корректно распознает паттерны и записывает название каждого обнаруженного паттерна в журнал.

Рис. 9 Тестирование на исторических данных
Заключение
Из результатов предыдущего раздела видно, что наш советник надежно распознает четыре ключевых свечных паттерна. Это поможет и начинающим, и опытным трейдерам выявлять формации, которые бывает трудно распознать невооруженным глазом. В моих тестах на исторических данных и в испытаниях на реальном рынке советник корректно отмечал каждый паттерн. Хотя ни одна система не идеальна и некоторые сигналы могут не отработать, этот советник не предназначен для отсеивания каждого ложного сигнала. Вместо этого он служит для трейдеров еще одним точным инструментом при анализе движения цены. Сверившись с этими сигналами, трейдеры смогут также применять собственные методы подтверждения, прежде чем открывать длинную или короткую позицию.
В целом советник отлично справляется со своей основной задачей – распознаванием паттернов. Я уверенно рекомендую его как инструмент, точно распознающий четыре целевые формации. Вы можете настроить входные параметры под свою стратегию. Буду рад вашим отзывам о том, что еще можно улучшить, по вашему мнению.
| Дата | Название инструмента | Описание | Версия | Обновления | Примечания |
|---|---|---|---|---|---|
| 01/10/24 | Chart Projector | Скрипт для наложения эффекта призрака на движение цены за предыдущий день | 1.0 | Первоначальная версия | Инструмент номер 1 |
| 18/11/24 | Analytical Comment | Предоставляет информацию за предыдущий день в табличном формате, а также прогнозирует будущее направление рынка | 1.0 | Первоначальная версия | Инструмент номер 2 |
| 27/11/24 | Analytics Master | Регулярное обновление рыночных показателей каждые два часа | 1.01 | Вторая версия | Инструмент номер 3 |
| 02/12/24 | Analytics Forecaster | Регулярное обновление рыночных показателей каждые два часа с интеграцией с Telegram | 1.1 | Третья версия | Инструмент номер 4 |
| 09/12/24 | Volatility Navigator | Советник анализирует рыночные условия с помощью полос Боллинджера, RSI и ATR | 1.0 | Первоначальная версия | Инструмент номер 5 |
| 19/12/24 | Mean Reversion Signal Reaper | Анализирует рынок и генерирует сигналы, используя стратегию возврата к среднему | 1.0 | Первоначальная версия | Инструмент номер 6 |
| 9/01/25 | Signal Pulse | Анализирует несколько таймфреймов | 1.0 | Первоначальная версия | Инструмент номер 7 |
| 17/01/25 | Metrics Board | Панель с кнопками для анализа | 1.0 | Первоначальная версия | Инструмент номер 8 |
| 21/01/25 | External Flow | Аналитика с помощью внешних библиотек | 1.0 | Первоначальная версия | Инструмент номер 9 |
| 27/01/25 | VWAP | Взвешенная по объему средняя цена | 1.3 | Первоначальная версия | Инструмент номер 10 |
| 02/02/25 | Heikin Ashi | Сглаживание тренда и идентификация сигналов разворота | 1.0 | Первоначальная версия | Инструмент номер 11 |
| 04/02/25 | FibVWAP | Генерация сигналов с помощью анализа Python | 1.0 | Первоначальная версия | Инструмент номер 12 |
| 14/02/25 | RSI DIVERGENCE | Дивергенция цены и RSI | 1.0 | Первоначальная версия | Инструмент номер 13 |
| 17/02/25 | Parabolic Stop and Reverse (PSAR) | Автоматизация стратегии PSAR | 1.0 | Первоначальная версия | Инструмент номер 14 |
| 20/02/25 | Скрипт Quarters Drawer | Нанесение уровней четвертей на график | 1.0 | Первоначальная версия | Инструмент номер 15 |
| 27/02/25 | Intrusion Detector | Обнаружение и оповещение о достижении ценой уровней четвертей | 1.0 | Первоначальная версия | Инструмент номер 16 |
| 27/02/25 | TrendLoom Tool | Панель мультитаймфреймового анализа | 1.0 | Первоначальная версия | Инструмент номер 17 |
| 11/03/25 | Quarters Board | Панель с кнопками для включения/отключения уровней четвертей | 1.0 | Первоначальная версия | Инструмент номер 18 |
| 26/03/25 | ZigZag Analyzer | Построение линий тренда с помощью индикатора ZigZag | 1.0 | Первоначальная версия | Инструмент номер 19 |
| 10/04/25 | Correlation Pathfinder | Построение графиков корреляции валютных курсов с использованием библиотек Python. | 1.0 | Первоначальная версия | Инструмент номер 20 |
| 23/04/25 | Market Structure Flip Detector Tool | Поиск разворотов рыночной структуры | 1.0 | Первоначальная версия | Инструмент номер 21 |
| 08/05/25 | Correlation Dashboard | Корреляции между разными парами | 1.0 | Первоначальная версия | Инструмент номер 22 |
| 13/05/25 | Currency Strength Meter | Измеряет силу валюты по нескольким валютным парам с ее участием | 1.0 | Первоначальная версия | Инструмент номер 23 |
| 21/05/25 | PAQ Analysis Tool | Обнаруживает свечные паттерны | 1.0 | Первоначальная версия | Инструмент номер 24 |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/18207
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Особенности написания Пользовательских Индикаторов
Разработка инструментария для анализа движения цен (Часть 26): Инструмент для работы с несколькими паттернами – пин-баром, паттернами поглощения и дивергенцией RSI
Разработка инструментария для анализа движения цен (Часть 23): Индикатор силы валют
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования