Эта стратегия использует три скользящие средние разных периодов, чтобы определить направление тренда рынка. Она входит в позицию, когда три скользящие средние движутся в одном направлении. В то же время, в сочетании с самой высокой или самой низкой ценой из самых последних N свечей, она устанавливает стоп-лосс и получает прибыль.
Вычислить долгосрочные, среднесрочные и краткосрочные три скользящих средних. Пользователи могут установить периоды сами.
Сравните направления трех скользящих средних. Когда краткосрочная скользящая средняя пересекается выше среднесрочной, а среднесрочная пересекается выше долгосрочной, она рассматривается как бычий рынок. Когда краткосрочная пересекается ниже среднесрочной, а среднесрочная пересекается ниже долгосрочной, она рассматривается как медвежий рынок.
На бычьем рынке, если цена пробивается через самую высокую цену из последних N свечей, идти длинный; на медвежьем рынке, если цена пробивается через самую низкую цену из последних N свечей, идти короткий.
После входа в позицию, установить стоп-лосс и взять прибыль. Стоп-лосс на бычьем рынке устанавливается как самая низкая цена из последних N свечей, а на медвежьем рынке - как самая высокая цена.
Эта стратегия сочетает в себе индикатор скользящей средней и свечи, которые могут лучше определить тенденцию рынка.
По сравнению с одной скользящей средней и другими показателями, эта стратегия использует три скользящих средних, чтобы более надежно судить о тенденции рынка. Между тем, вход в позицию при прорыве через самую высокую или самую низкую цену последних N свечей является распространенной стратегией прорыва. В целом, идея стратегии ясна и проста в реализации.
Основными потенциальными рисками этой стратегии являются:
Вероятность ошибочного суждения по направлению трех скользящих средних.
Неправильный выбор времени для входа в позицию, в которую легко попасть.
Расстояние стоп-лосса установлено слишком мало. Расширение расстояния стоп-лосса помогает обеспечить больше места для цены.
Направления для оптимизации этой стратегии включают:
Добавить другие индикаторы для фильтрации, чтобы обеспечить надежность сигналов скользящих средних, например, добавить длинное/короткое суждение о объеме торговли.
Оптимизировать периоды скользящей средней, чтобы лучше адаптировать их к различным продуктам.
Добавьте алгоритмы машинного обучения для автоматической оптимизации параметров.
Испытайте эффективность этой стратегии на высокочастотных данных.
Эта стратегия относительно проста и универсальна. Идея ясна с сильной осуществимостью. Как пример системы пересечения скользящей средней, это общий выбор для новичков. Благодаря правильной оптимизации система может быть применена к большему количеству продуктов и временных рамок для получения устойчивой доходности.
/*backtest start: 2023-01-30 00:00:00 end: 2024-02-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © hobbiecode //@version=5 strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true) // User-defined input for moving averages long_period = input(20, title="Long Period") medium_period = input(10, title = "Medium Period") short_period = input(5, title="Short Period") type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"]) candles_back = input(10, title = "Candles Back") bars_valid = input(3, title = "Bars to Exit") // Calculating moving averages long_ma = 0.0 medium_ma = 0.0 short_ma = 0.0 if type_ma == "SMA" long_ma := ta.sma(close, long_period) medium_ma := ta.sma(close, medium_period) short_ma := ta.sma(close, short_period) else long_ma := ta.ema(close, long_period) medium_ma := ta.ema(close, medium_period) short_ma := ta.ema(close, short_period) // Plot moving averages plot(long_ma, title="Long Moving Average", color=color.red) plot(medium_ma, title = "Medium Moving Average", color = color.yellow) plot(short_ma, title="Short Moving Average", color=color.green) // Check last min/max last_min = ta.lowest(candles_back) last_max = ta.highest(candles_back) // Strategy logic for crossing of moving averages longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min longCondition_entry = longCondition and strategy.position_size == 0 shortCondition_entry = shortCondition and strategy.position_size == 0 // Check last min/max for operation last_min_op = ta.lowest(candles_back)[1] last_max_op = ta.highest(candles_back)[1] // Plot lines var line r1Line = na // Entry orders // if (longCondition) // from_line = chart.point.now(high) // to_line = chart.point.from_index(bar_index + candles_back, high) // r1Line := line.new(from_line, to_line, color = color.green, width = 2) if longCondition_entry and ta.crossover(close,last_max_op) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry="Long", stop=low) // if (shortCondition) // from_line = chart.point.now(low) // to_line = chart.point.from_index(bar_index + candles_back, low) // r1Line := line.new(from_line, to_line, color = color.red, width = 2) if shortCondition_entry and ta.crossunder(close,last_min_op) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry="Short", stop=high) if ta.barssince(longCondition_entry) >= bars_valid strategy.close("Long") if ta.barssince(shortCondition_entry) >= bars_valid strategy.close("Short")