
Эта стратегия использует как торговый сигнал пересечение двух скользящих средних, а также фильтрует в сочетании с диапазоном BB и пользовательскими динамическими индикаторами, чтобы повысить надежность перекрестного сигнала MA и уменьшить количество ложных сигналов.
С помощью 50-циклической EMA и 200-циклической SMA формируется золотой форк.
Когда цена находится в восходящем тренде, требуйте, чтобы цена была выше 200-дневной линии, а значение индивидуального динамического индикатора было меньше 25, чтобы создать сигнал покупки.
Когда цена находится в нисходящем тренде, требуйте, чтобы цена была ниже 200-дневной линии, и чтобы пользовательское значение динамического индикатора было больше 75 для получения сигнала продажи.
Настроенный индикатор динамической энергии отображается в диапазоне от 0 до 100 в зависимости от расстояния от средней линии BB до верхней и нижней полос.
Динамический индикатор может отражать информацию о положении относительной колебательности цены, фильтровать настройки порогового значения, что эффективно уменьшает ложное скрещивание.
Используйте преимущества EMA и SMA, чтобы поймать средне- и долгосрочные тенденции.
Увеличение показателей динамической энергии для фильтрации, более высокая надежность, уменьшение ложного сигнала.
BB расстояние вверх и вниз отражает волатильность, в сочетании с ретроспективной статистикой для стандартизации обработки, избегая зависимости от параметров.
Можно настроить циклы EMA и SMA, а также порог динамического показателя, чтобы адаптироваться к различным рыночным условиям.
Стратегическая мысль ясна и понятна, параметры настраиваются в пространстве, практическая.
EMA и SMA сами отстают, и могут упустить короткую линию.
Двухлинейный скрещивание - это, по сути, стратегия отслеживания тенденций, не подходит для шок.
При этом необходимо проводить повторные измерения, чтобы определить подходящие параметры, существует риск кривой оптимизации.
Большая циклическая среднелинейная стратегия, прибыль относительно стабильная, но абсолютная прибыль может быть ограниченной.
Средний цикл может быть сокращен, если это целесообразно, или могут быть добавлены другие показатели, помогающие принятию решений, чтобы повысить адаптивность стратегии.
Тестирование различных комбинаций равномерных линий для поиска оптимальных параметров.
Добавление дополнительных оценок, таких как MACD, KD и т. Д.
Оптимизация параметров показателя динамической энергии, таких как цикл обратного отсчета, диапазон отображения и т. д.
Добавление механизма сдерживания убытков для контроля риска.
При наличии несовместимых параметров различных сортов можно рассмотреть возможность использования машинного обучения для извлечения характеристик.
Добавление показателей энергии, чтобы избежать необоснованного перекрестного сигнала.
Преимущества данной стратегии в совокупности с двойным фильтрацией циклического отслеживания тенденций и персонализированных динамических показателей являются высокой надежностью и высокой ценностью в реальном мире. Ожидается, что она будет лучше работать с помощью оптимизации параметров и усиления вспомогательных технических показателей.
/*backtest
start: 2023-10-26 00:00:00
end: 2023-10-27 13:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false)
// Inputs
emaLength = input(20, "EMA Length")
stdDevLength = input(2, "Standard Deviation Length")
priceSource = close
takeProfitPoints = input(1000, title="Take Profit (in Points)")
stopLossPoints = input(2500, title="Stop Loss (in Points)")
// Calculate EMA
ema = ema(priceSource, emaLength)
// Calculate Standard Deviation
stdDev = stdev(priceSource, stdDevLength)
// Calculate differences
diff1 = (ema + stdDev) - ema
diff2 = ema - (ema - stdDev)
// Calculate min and max differences from last year
lookbackPeriod = 504 // Number of trading days in a year
minDiff1 = lowest(diff1, lookbackPeriod)
maxDiff1 = highest(diff1, lookbackPeriod)
minDiff2 = lowest(diff2, lookbackPeriod)
maxDiff2 = highest(diff2, lookbackPeriod)
// Map differences based on requirements
mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1))
mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2))
// Combine mapped differences into a single line
mappedLine = if close > ema
mappedDiff1
else
mappedDiff2
// Plot 'mappedLine' in the main chart area conditionally
plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2)
// Calculate the 50EMA and 200SMA
ema50 = ema(close, 50)
sma200 = sma(close, 200)
// Plot the 50EMA and 200SMA on the main chart
plot(ema50, color=color.blue, title="50 SMA", linewidth=2)
plot(sma200, color=color.red, title="200 SMA", linewidth=2)
// Initialize trade variables
var bool waitingForBuy = na
var bool waitingForSell = na
var bool buyConditionMet = false
var bool sellConditionMet = false
if not sellConditionMet and crossunder(ema50, sma200)
sellConditionMet := true
waitingForBuy := false
if sellConditionMet
waitingForSell := true
sellConditionMet := false
if waitingForSell and close < sma200 and mappedLine > 75
strategy.entry("Sell", strategy.short)
strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints)
waitingForSell := false
// Define the strategy conditions and execute trades
if not buyConditionMet and crossover(ema50, sma200)
buyConditionMet := true
waitingForSell := false
if buyConditionMet
waitingForBuy := true
buyConditionMet := false
if waitingForBuy and close > sma200 and mappedLine < 25
strategy.entry("Buy", strategy.long)
strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints)
waitingForBuy := false