English Deutsch 日本語
preview
Разработка торговой стратегии: Метод Butterfly Oscillator

Разработка торговой стратегии: Метод Butterfly Oscillator

MetaTrader 5Трейдинг |
134 0
Daniel Opoku
Daniel Opoku

Введение

Индикаторы — это математические инструменты, предназначенные для графического представления рыночных данных. С их помощью трейдеры анализируют рыночные тенденции, волатильность и моментум. К распространенным примерам относятся индекс относительной силы (RSI), средний истинный диапазон (ATR), скользящая средняя (MA) и индекс относительной бодрости (RVI). Каждый из них выполняет уникальную функцию, определяя точки входа и выхода на торговых графиках.

В этой статье мы представляем новый технический индикаторButterfly Oscillator («Осциллятор-бабочка») — на основе известной математической кривой, открытой в 1989 году Темплом Х. Фэем (Temple H. Fay). Эта кривая, известная как «Кривая-бабочка», получила свое название благодаря характерной форме графика, напоминающей крылья бабочки. Цель этой статьи состоит в том, чтобы сконструировать индикатор Butterfly Oscillator, используя эту математическую основу, и разработать соответствующую торговую стратегию.



«Кривая-бабочка»: математическое обоснование

Кривая-бабочка описывается параметрическими уравнениями, которые генерируют ее характерную форму в виде крыльев бабочки:

butterflyEqn

Где параметр t изменяется в интервале [0,12π].

На рисунке 1 показана «Кривая-бабочка».

butterfly

Рисунок 1. Кривая-бабочка

Примечательно:

  • Значения по оси X демонстрируют симметрию, в то время как значения по оси Y асимметричны.
  • Общая структура нелинейна и циклична, то есть она периодически повторяет свою структуру.
  • Параметрическое уравнение принимает единственный параметр (t) и возвращает соответствующие значения х и y.

Структура кода для построения кривой-бабочки: 

На этом этапе покажем, как кривая-бабочка была построена на графике с помощью файла скрипта.

#include <Canvas\Canvas.mqh>

Первый шаг — это включение библиотеки Canvas в MQL5 с помощью следующей строки. Эта библиотека предоставляет все необходимые классы и функции для построения и визуализации кривой-бабочки на графике. 

   // Create canvas for drawing
   int width = 800;   // Canvas width
   int height = 600;  // Canvas height
   string canvas_name = "ButterflyCurve";
   
   // Create canvas object
   CCanvas canvas;
   if(!canvas.CreateBitmapLabel(canvas_name, 200, 50, width, height, COLOR_FORMAT_XRGB_NOALPHA))
     {
      Print("Error creating canvas: ", GetLastError());
      return;
     }

Сначала задаются размеры рабочей области — ширина 800 пикселей и высота 600 пикселей, — а название рабочей области устанавливается как "ButterflyCurve". Эти параметры определяют размер и метку области рисования, которая будет отображаться на графике.

Далее объявляется объект Canvas (CCanvas canvas), который служит графической поверхностью для отображения всех визуальных элементов, таких как линии, фигуры и текст. Функция CreateBitmapLabel()затем используется для создания рабочей области в конкретной позиции на графике — в данном случае, на расстоянии 200 пикселей слева и 50 пикселей сверху. Кроме того, функция задает формат цвета (COLOR_FORMAT_XRGB_NOALPHA), который определяет, как обрабатываются цвета и прозрачность.

Наконец, код включает механизм обработки ошибок: если создание рабочей области не удается, программа выводит сообщение об ошибке, содержащее код ошибки (GetLastError()), и останавливает выполнение. Это гарантирует, что последующие операции рисования будут выполняться только после успешного создания рабочей области и ее готовности к использованию.

   // Set up drawing parameters
   int points = 1000;            // Number of points
   double t_start = 0;           // Start angle
   double t_end = 12 * M_PI;     // End angle
   double step = (t_end - t_start) / (points - 1);
   
   // Calculate curve points
   double x[], y[];
   ArrayResize(x, points);
   ArrayResize(y, points);
   
   for(int i = 0; i < points; i++)
     {
      double t = t_start + i * step;
      double expr = MathExp(MathCos(t)) - 2 * MathCos(4 * t) - MathPow(MathSin(t/12), 5);
      x[i] = MathSin(t) * expr;
      y[i] = MathCos(t) * expr;
     }

Этот фрагмент кода определяет математические параметры и структуру данных, необходимые для построения кривой-бабочки перед ее отображением в рабочей области.

Во-первых, он устанавливает параметры чертежа:

  • Параметр points задает количество точек данных (1000), которые будут использоваться для построения кривой, обеспечивая плавность и непрерывность линии.
  • Параметры t_start и t_end определяют диапазон переменной t, которая выступает в качестве параметра уравнения кривой-бабочки, здесь — от 0 до 12π.
  • Параметр step определяет величину приращения изменения t между двумя следующими друг за другом точками, обеспечивая равномерное распределение данных вдоль кривой.

Далее создаются и изменяются размеры двух динамических массивов — x[] и y[] — для хранения всех вычисленных координат кривой-бабочки. Каждый элемент в этих массивах соответствует одной точке на кривой.

Внутри цикла for для каждого значения t вычисляется уравнение кривой-бабочки. Эти вычисленные значения представляют собой геометрические координаты кривой-бабочки, которые впоследствии используются для масштабирования и построения графика в рабочей области.

   // Find coordinate bounds for scaling
   double x_min = x[ArrayMinimum(x)];
   double x_max = x[ArrayMaximum(x)];
   double y_min = y[ArrayMinimum(y)];
   double y_max = y[ArrayMaximum(y)];
   
   // Scale points to canvas coordinates
   int x_px[], y_px[];
   ArrayResize(x_px, points);
   ArrayResize(y_px, points);
   
   double x_scale = (width - 40) / (x_max - x_min);
   double y_scale = (height - 40) / (y_max - y_min);
   double scale = MathMin(x_scale, y_scale); // Maintain aspect ratio
   
   for(int i = 0; i < points; i++)
     {
      x_px[i] = (int)((x[i] - x_min) * scale) + 20;
      y_px[i] = height - (int)((y[i] - y_min) * scale) - 20; // Flip Y-axis for canvas coordinates
     }

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

Сначала программа определяет координатные границы кривой, находя минимальное и максимальное значения обоих массивов — х иy. Эти значения определяют полный диапазон кривой-бабочки в обоих направлениях и необходимы для корректного отображения данных на экране.

Далее создаются два новых массива целых чисел — x_px и y_px, — и изменяются их размеры в соответствии с количеством точек данных. В этих массивах будут храниться пиксельные координаты, соответствующие масштабированной версии кривой.

Затем вычисляются коэффициенты масштабирования:

  • Параметр x_scale преобразует диапазон значений x в доступную ширину рабочей области (оставляя отступ в 20 пикселей с каждой стороны).
  • Параметр y_scale преобразует диапазон значений y в доступную высоту рабочей области (также с отступами). Чтобы обеспечить сохранение кривой соотношения ее размеров (чтобы она не растягивалась и не искажалась), в качестве окончательного значения масштаба выбирается меньший из этих двух коэффициентов масштабирования.

Наконец, каждая точка данных преобразуется в координаты рабочей области.

Формула преобразует математические значения x и y в координаты на экране, учитывая поля и разворачивая ось Y (поскольку координаты рабочей области отсчитываются от верхнего левого угла). По завершении этого процесса все точки данных кривой-бабочки будут корректно масштабированы и расположены в видимой части рабочей области, готовые к построению графика.

   // Draw the curve
   canvas.Erase(ColorToARGB(clrWhite, 255)); // White background
   
   // Set line color - we'll pass this directly to Line() method
   uint line_color = ColorToARGB(clrBlue, 255);
   
   // Draw the polyline
   for(int i = 1; i < points; i++)
     {
      canvas.Line(x_px[i-1], y_px[i-1], x_px[i], y_px[i], line_color);
     }
   
   // Title
   canvas.FontSet("Arial", 20, FW_BOLD);
   canvas.TextOut(300, 20, "Butterfly Curve", ColorToARGB(clrBlack, 255));
   
   // Update display
   canvas.Update();

Этот раздел кода посвящен отрисовке и стилизации итоговой кривой-бабочки в рабочей области. Настраиваем визуальный стиль графика, устанавливая фон рабочей области белым, а линию данных — синей. Затем на графике отображаются точки данных из x_px и y_px. Наконец, устанавливаем шрифт заголовка на кегль 20, шрифт Arial черного цвета и обновляем рабочую область, чтобы отобразить окончательную визуализацию.


Создание индикатора Butterfly Oscillator

Для построения индикатора Butterfly Oscillator используем x-компоненту кривой-бабочки из-за ее симметричности. Компонента x естественным образом ограничена диапазоном [-3, +3], что делает ее идеальной для создания осциллятора.

Для адаптации этого подхода к торговле определяем входной параметр t просто как количество прошедших ценовых баров.Поскольку t обозначает количество баров, кривая одинакова на всех таймфреймах. Лежащее в основе уравнение имеет циклический характер, из-за чего осциллятор образует волнообразные структуры, повторяющиеся по завершении каждого полного цикла.

Полный цикл базовой кривой-бабочки происходит при t=24π, или приблизительно на уровне 75,4 бара. Для регулирования чувствительности осциллятора вводим в качестве коэффициента масштабирования размер шага (Δt). Количество баров (N), необходимое для полного цикла осциллятора, рассчитывается как N = 24π / Δt

Примеры:

  • Размер шага = 1:     N=24π/1=76 баров (полный цикл)
  • Размер шага = 0.5:  N=24π/0.5=151 бар
  • Размер шага = 5:     N=24π/5=15 баров

Шаг изменения напрямую влияет на поведение осциллятора:

  • Шаги меньшего размера приводят к более плавным и медленным формам волн.
  • Шаги большего размера приводят к более быстрым и частым колебаниям.
Это позволяет трейдерам настраивать осциллятор либо для обнаружения долгосрочных паттернов, либо для анализа краткосрочных циклов.

Как обеспечить эффективное реагирование осциллятора на изменение цены:

Хотя осциллятор может работать исключительно на основе количества баров, он также может реагировать на движение цены. Для этого мы учитываем разницу между ценой закрытия и ценой открытия свечи. Такая корректировка позволяет осциллятору реагировать на изменения динамики цен, делая его более адаптивным к волатильности рынка в реальном времени, а не зависимым исключительно от динамики во времени.

Эта гибридная конструкция, сочетающая циклическое поведение с чувствительностью к цене, позволяет индикатору Butterfly Oscillator обеспечивать как оценку времени формирования структуры, так и подтверждение на основе моментума.

Прежде чем продемонстрировать практическую работу осциллятора, кратко опишем структуру кода, который использовался для его реализации. 

//--- plot Butterfly
#property indicator_label1  "Butterfly Oscillator"
#property indicator_type1   DRAW_LINE
#property indicator_color1  DodgerBlue
#property indicator_width1  2
#property indicator_style1  STYLE_SOLID

//--- indicator levels
#property indicator_level1  2.5
#property indicator_level2 -2.5
#property indicator_level3  0.0

Этот раздел кода устанавливает визуальные и структурные свойства индикатора Butterfly Oscillator. Он определяет, как индикатор отображается на графике — по умолчанию используется сплошная линия тускло-василькового (DodgerBlue) цвета толщиной 2 для лучшей видимости, с меткой Butterfly Oscillator. Кроме того, он устанавливает ключевые опорные уровни на отметках 2.5, -2.5 и 0.0. В целом, эти настройки делают осциллятор визуально различимым и удобным для анализа с целью выявления рыночных циклов.

//--- input parameters
input bool   UsePriceStep = false; // Use ClosePrice as Step size for t increment
input double tmStep       = 0.05;  // Step size for t increment

В этом разделе задаются входные параметры, определяющие способ вычисления временного шага индикатора.

  • UsePriceStep — логический параметр, позволяющий пользователю выбрать, следует ли определять размер шага на основе ценового движения, а не количества баров.
  • tmStep — числовой параметр, который устанавливает фиксированный шаг для приращения переменной t.

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

double CalButterflyValue(int bar_index, double bar_close, double bar_open)
  {
   double tStep = UsePriceStep ? MathMod((bar_close - bar_open) / _Point, tmStep) : tmStep;
   double t = bar_index * tStep;

   // Butterfly curve formula
   double x = MathSin(t) *
              (MathExp(MathCos(t)) - 2.0 * MathCos(4.0 * t) - MathPow(MathSin(t / 12.0), 5));

   return (x);
  }

В этом разделе описывается функция Butterfly («Бабочка»), которая вычисляет значение осциллятора для каждого бара на графике.

Функция CalButterflyValue() принимает три параметра:

  • bar_index – позиция текущего бара на графике,
  • bar_close – цена закрытия данного бара, а также
  • bar_open – цена открытия данного бара.

Внутри функции вычисляется размер шага (tStep). Если параметр UsePriceStep включен, он динамически корректируется в зависимости от движения цены; в противном случае используется фиксированное значение tmStep. Затем переменная t определяется на основе индекса бара и размера шага.

Наконец, для вычисления х применяется формула кривой-бабочки, представляющая значение осциллятора на этом баре. Это значение отражает математическую форму кривой-бабочки и возвращается для ее построения на графике.

   int pStart = prev_calculated == 0 ? 0 : prev_calculated - 1;

   for(int i = pStart; i < rates_total; i++)
     {
      double bar_close = close[i];
      double bar_open  = open[i];
      ButterflyBuffer[i] = CalButterflyValue(i, bar_close, bar_open);
     }

В этом разделе инициализируется и заполняется буфер индикатора Butterfly Oscillator вычисленными значениями для построения графиков.

Переменная pStart определяет, где должны начинаться вычисления — с нулевой точки при первом запуске или с последнего вычисленного бара при последующих обновлениях для повышения эффективности. Каждое вычисленное значение сохраняется в массиве ButterflyBuffer, который впоследствии используется для построения линии осциллятора в окне индикатора.


Демонстрация индикатора Butterfly Oscillator

В ходе демонстрации работы индикатора Butterfly Oscillator мы исследуем его поведение в двух условиях: при использовании только подсчета баров и при использовании подсчета баров в сочетании с анализом ценового движения. Такое сравнение позволяет наблюдать, как осциллятор реагирует в каждом из сценариев.

Пример 1. Влияние размера шага (только подсчет баров)

На рисунке 2 показан осциллятор, работающий исключительно на основе подсчета баров. В этом случае параметр UsePriceStep установлен в значение false, и это означает, что продвижение осциллятора определяется только количеством баров. Для изучения их влияния на форму волны используются три разных размера шага — 0.05, 0.5 и 5.

butterflyDemo1

Рисунок 2. Индикатор Butterfly Oscillator без учета ценового движения

Из графика видно, что:

  • При небольшом размере шага (например, 0.05) осциллятору требуется больше времени для завершения полного цикла, что приводит к более плавной и постепенно меняющейся волне.
  • При шаге большого размера (например, 5) осциллятор завершает свой цикл гораздо быстрее, что приводит к более четкой и несимметричной структуре.

Это демонстрирует, что размер шага напрямую контролирует плавность и частоту колебаний осциллятора: шаги меньшего размера подчеркивают долговременные циклические движения, а шаги большего размера — кратковременные колебания.

Пример 2. Влияние размера шага (с учетом ценового движения)

На рисунке 3 показана картина колебаний осциллятора, обусловленная движением цены. В таком случае на поведение осциллятора влияет не только размер шага, но и движения рыночных цен. Аналогично режиму подсчета баров, осциллятор движется быстрее с шагами большего размера и медленнее с меньшими шагами. Однако, в отличие от предыдущего примера, включение ценового движения добавляет кривой вариативности.

butterflydemo2

Рисунок 3. Индикатор Butterfly Oscillator, формируемый с учетом ценового движения

Поскольку движение цен, как правило, носит хаотичный и нелинейный характер, их колебания отражаются на форме осциллятора. В результате индикатор Butterfly Oscillator становится более динамичным, адаптируя форму своей волны к волатильности рынка, а не следуя чисто математическому ритму.


Торговая стратегия индикатора Butterfly Oscillator

Теперь, когда мы успешно разработали индикатор Butterfly Oscillator, мы можем перейти к созданию простого советника Butterfly Expert Advisor (далее — советник Butterfly), который использует этот индикатор в качестве критерия входа. Торговая стратегия разработана для выявления циклических поворотных точек в осцилляторе и их согласования с более широким рыночным трендом, определяемым скользящей средней (MA).

В рамках этого подхода определяем две стратегии входа в рынок:

Стратегия 1

  • Сигнал на покупку. Когда скользящая средняя (MA) указывает на восходящий тренд, а индикатор Butterfly Oscillator пересекает уровень +2,5 снизу вверх, открывайте позицию на покупку.
  • Сигнал на продажу. Когда скользящая средняя указывает на нисходящий тренд, а индикатор Butterfly Oscillator пересекает уровень +2,5 снизу вверх, открывайте позицию на продажу.

Стратегия 2

  • Сигнал на покупку. Когда скользящая средняя указывает на восходящий тренд, а индикатор Butterfly Oscillator пересекает уровень -2,5 сверху вниз, открывайте позицию на покупку.
  • Сигнал на продажу. Когда скользящая средняя указывает на нисходящий тренд, а индикатор Butterfly Oscillator пересекает уровень -2,5 сверху вниз, открывайте позицию на продажу.

В обеих стратегиях направление тренда, определяемое скользящей средней, служит фильтром тренда, а индикатор Butterfly Oscillator — триггером для входа в сделку.

  • Стратегия 1 сосредоточена на сигналах с верхним порогом (+2,5) и, как правило, определяет пик циклов осциллятора.
  • Стратегия 2 фокусируется на сигналах с более низким порогом (-2,5), улавливая минимум цикла.

Советник Butterfly обеспечивает гибкость, позволяя трейдерам выбирать между Стратегией 1 и Стратегией 2 или запускать обе стратегии последовательно. Кроме того, в советник включена опция, позволяющая определить, должен индикатор Butterfly Oscillator реагировать на движения цены или полагаться исключительно на изменения в количестве баров.

Соответствующие входные параметры определяются следующим образом:

//--- Strategy Selection
input bool UsePriceStep = false;      // Use ClosePrice 
input bool EnableStrategy1 = true;    // Enable Strategy 1 Peak
input bool EnableStrategy2 = false;   // Enable Strategy 2 Trough

UsePriceStep – включает или отключает режим движения цены.

  • При установленном значении true советник учитывает движение цены (разницу между ценой закрытия и ценой открытия) в поведении осциллятора, делая его чувствительным к динамике рынка.
  • При установленном значении false осциллятор полагается исключительно на количество баров, поддерживая фиксированный циклический режим.

Выбор стратегии:

  • Стратегия 1 предназначена для генерации сигналов на основе пиковых структур осциллятора.
  • Стратегия 2 предназначена для генерации сигналов на основе формирования впадин.

Когда активны обе стратегии — Стратегия 1 и Стратегия 2, советник отдает приоритет тому пороговому условию, которое сработает первым во время исполнения рыночных ордеров.

Для обеспечения дисциплинированного управления сделками, торговый советник разработан таким образом, чтобы одновременно была открыта только одна позиция. Это предотвращает одновременное исполнение противоречащих друг другу сделок, обеспечивая ясность в оценке эффективности стратегии.

Основная торговая логика советника Butterfly реализована следующим образом:
   //--- Strategy 1: Peak
   if(EnableStrategy1 && prevValue < 2.5 && currValue > 2.5)
   {
      if(maFast > maSlow)
         OpenBuy();
      else if(maFast < maSlow)
         OpenSell();
   }

   //--- Strategy 2: Trough
   if(EnableStrategy2 && prevValue > -2.5 && currValue < -2.5)
   {
      if(maFast > maSlow)
         OpenBuy();
      else if(maFast < maSlow)
         OpenSell();
   }

Стратегия 1 (пик):

Когда предыдущее значение индикатора Butterfly Oscillator ниже +2,5, а текущее значение пересекает отметку +2.5 снизу вверх, генерируется сигнал.

  • Если быстрая скользящая средняя находится выше медленной скользящей средней, это указывает на восходящий тренд, и исполняется ордер на покупку.
  • Если быстрая скользящая средняя находится ниже медленной скользящей средней, это указывает на нисходящий тренд, и размещается ордер на продажу.

Стратегия 2 (впадина):

Когда предыдущее значение индикатора Butterfly Oscillator превышает –2,5, а текущее значение опускается ниже –2.5, генерируется сигнал.

  • Если быстрая скользящая средняя находится выше медленной скользящей средней, советник интерпретирует это как восходящий тренд и открывает сделку на покупку.
  • Если быстрая скользящая средняя находится ниже медленной скользящей средней, что указывает на нисходящий тренд, то открывается сделка на продажу.

Тестирование советника Butterfly Oscillator:

Для адаптации советника к индивидуальным торговым предпочтениям и правилам управления рисками предоставляется исчерпывающий набор входных параметров. Для удобства эти настройки сгруппированы по категориям и позволяют пользователям контролировать управление сделками, поведение индикаторов и выбор стратегии.


InputVal

Рисунок 4. Входные параметры советника

Тестирование стратегий и демонстрация сигналов на вход:

  • Размер шага: 0.3:

Чтобы продемонстрировать сигналы на вход, генерируемые советником Butterfly, мы протестировали Стратегию 1, используя шаг 0.3.

На рисунке 5 показаны сигналы на покупку и продажу, полученные при данной конфигурации. Благодаря большему размеру шага, индикатор Butterfly Oscillator завершает свой цикл за меньшее количество баров, что позволяет ему быстрее достигать максимумов и минимумов. В результате советник генерирует более частые сигналы на вход за более короткий промежуток времени.

Рисунок 5. Стратегия 1 с шагом 0.3

  • Размер шага: 0.03:

Используя шаг 0.03, мы дополнительно изучили поведение советника Butterfly в рамках Стратегии 1.

На рисунке 6 представлены сигналы на покупку и продажу, сгенерированные при таком меньшем шаге. При малом размере шага индикатору Butterfly Oscillator требуется больше баров для завершения полного цикла. Следовательно, достижение максимумов и минимумов совершается медленнее, что приводит к меньшему количеству сигналов на вход за тот же период.

Рисунок 6. Стратегия 1 с шагом 0.03

Такое поведение подчеркивает прямое влияние размера шага на частоту торговых сигналов: более высокие значения приводят к более быстрым колебаниям и большему количеству сделок, в то время как меньшие значения создают более медленные, плавные циклы с меньшим количеством более стабильных сигналов.


Заключение

В этой статье мы использовали концепцию кривой-бабочки для построения осциллятора и торговой стратегии. Индикатор Butterfly Oscillator продемонстрировал, как математические закономерности можно адаптировать к динамике рынка, предоставив уникальные данные о движении цен. Варьируя размер шага, мы наблюдали, как изменяются плавность осциллятора и частота сигнала и как эти характеристики могут влиять на точки входа в сделку в сочетании с трендами скользящих средних.

Разработанный советник Butterfly успешно применил осциллятор в качестве критерия входа, предложив две различные стратегии — одну для максимумов, другую для минимумов, — каждая из которых реагирует как на направление рынка, так и на пороговые значения осциллятора.

В нашей следующей статье проведем эксперименты с различными инструментами, чтобы проверить сильные и слабые стороны этой концепции. Мы продолжим экспериментировать с этим новым осциллятором в сочетании с другими осцилляторами, чтобы выполнить точную настройку нашей стратегии входа. Следите за обновлениями, чтобы получить больше рекомендаций по входу в сделки и сведений об улучшениях торговой системы Butterfly.

ФайлОписание
ButterflyPlot.mq5

Этот скрипт-файл отвечает за генерацию и отображение кривой-бабочки в активном окне графика с использованием определенной для нее математической функции. При выполнении скрипта кривая отображается визуально в окне графика. После построения кривой-бабочки она остается отображенной на графике как часть текущего визуального слоя. Кривую, сгенерированную этим скриптом, можно очистить или удалить только при изменении или обновлении шаблона графика.

ButterflyOscillator.mq5Этот файл определяет индикатор Butterfly, который предназначен для отображения в отдельном окне под основным ценовым графиком.
ButterflyOscillatorEA.mq5Этот файл определяет советник, который использует индикатор Butterfly Oscillator для автоматического открытия торговых позиций и управления ими.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/20113

Прикрепленные файлы |
ButterflyPlot.mq5 (5.79 KB)
Архитектура машинного обучения для MetaTrader 5 (Часть 12): Калибровка вероятностей для финансового машинного обучения Архитектура машинного обучения для MetaTrader 5 (Часть 12): Калибровка вероятностей для финансового машинного обучения
Классификаторы на основе деревьев обычно чрезмерно уверены: истинные доли выигрышей около 0,55 отображаются как 0,65–0,80 и завышают размеры позиций и доли Келли. В этой статье представлены afml.calibration и CalibratorCV, которые генерируют прогнозы вне обучающего фолда (OOF) через PurgedKFold и подбирают изотоническую регрессию или масштабирование Платта. Мы определяем оценку Брайера, ECE и MCE, а также показываем диагностику, которая прослеживает некалиброванность до размеров позиций, реализованного P&L и распределений Sharpe по путям CPCV для поддержки торговли без утечек и с корректным размером позиции.
Автоматизация торговых стратегий в MQL5 (Часть 30): Создание гармонического паттерна AB=CD на основе Price Action с визуализацией Автоматизация торговых стратегий в MQL5 (Часть 30): Создание гармонического паттерна AB=CD на основе Price Action с визуализацией
В этой статье мы разрабатываем советник распознавания паттернов AB=CD на языке MQL5, который определяет бычьи и медвежьи гармонические паттерны AB=CD с использованием точек разворота и уровней Фибоначчи, открывая сделки с точными уровнями входа, стоп-лосса и тейк-профита. Мы также улучшим визуальное представление паттерна с помощью графических объектов.
Автоматизация торговых стратегий в MQL5 (Часть 31): Создание системы распознавания гармонического паттерна "3 Drives" с использованием Price Action Автоматизация торговых стратегий в MQL5 (Часть 31): Создание системы распознавания гармонического паттерна "3 Drives" с использованием Price Action
В этой статье мы разрабатываем систему распознавания гармонических паттернов "3 Drives" на языке MQL5, которая определяет бычьи и медвежьи гармонические паттерны "3 Drives" с использованием точек разворота и уровней Фибоначчи, открывая сделки с пользовательскими уровнями входа, стоп-лосса и тейк-профита в соответствии с вариантами, выбранными пользователем. Мы также повысим наглядность и информативность системы для трейдера с помощью графических объектов на графике.
Разработка инструментария для анализа Price Action (Часть 46): Создание интерактивного советника по уровням коррекции Фибоначчи с интеллектуальной визуализацией на MQL5 Разработка инструментария для анализа Price Action (Часть 46): Создание интерактивного советника по уровням коррекции Фибоначчи с интеллектуальной визуализацией на MQL5
Инструменты Фибоначчи – одни из наиболее популярных инструментов технического анализа. В этой статье мы создадим советник Interactive Fibonacci EA, который строит уровни коррекции и расширения, динамически реагирующие на движение цены, выдает алерты в реальном времени, аккуратно оформляет линии и показывает бегущую строку в стиле новостной ленты. Еще одно важное преимущество этого советника – гибкость: вы можете вручную ввести на графике значения максимума (A) и минимума (B) движения, что дает точный контроль над анализируемым рыночным диапазоном.