
Эта стратегия основана на 50-дневном движущемся среднем и 200-дневном движущемся среднем BTC, в сочетании с дополнительными техническими показателями для выработки сигналов покупки и продажи. Эта стратегия применяется в основном к валютной паре BTC/USDT, которая имеет явные тенденционные характеристики.
Когда 50-дневная скользящая средняя выше 200-дневная скользящая средняя и образует золотую середину, означает, что BTC входит в многоголовый рынок и создает сигнал покупки. А когда 50-дневная скользящая средняя вниз 200-дневная скользящая средняя и образует скользящую середину, означает, что BTC входит в пустой рынок и создает сигнал продажи.
В дополнение к базовым оценкам сигналов движущихся средних металлических вилл и вилл, в стратегию включены некоторые дополнительные технические показатели, которые помогают принять решение, в том числе:
EMA-индикатор: рассчитывает EMA-индикатор с length+offset, который можно купить, когда его повышение указывает на то, что он в настоящее время находится на многооборотном рынке.
Сравнение количественного отношения движущегося среднего с EMA: если значение EMA выше 50-дневного движущегося среднего, то возникает выбор покупателя.
Проверьте, что цена упала более чем на 1% по сравнению с предыдущей низкой точкой K-линии, и если она удовлетворяет, то создает сигнал продажи.
Используя в сочетании несколько вышеперечисленных показателей, можно отфильтровать ошибочные сигналы и сделать стратегические торговые решения более надежными.
Эта стратегия имеет следующие преимущества:
Использование движущейся средней как основного торгового сигнала, фильтрующего рыночный шум и идентифицирующего направление тренда.
В сочетании с различными вспомогательными техническими показателями, такими как EMA, можно повысить надежность сигнала и отфильтровать ложные сигналы.
Применение соответствующей стратегии по прекращению убытков может эффективно контролировать одиночные убытки.
Простая логика торговли, легко понятная реализация, подходит для начинающих в количественной торговле.
Настраиваемые параметры могут быть скорректированы в соответствии с вашими предпочтениями.
В этой стратегии также есть некоторые риски, о которых следует помнить:
Сам по себе движущийся средний имеет сильную отсталость и может упустить возможность быстрого изменения цены.
Вспомогательные показатели увеличивают количество правил, а также повышают вероятность получения ошибочных сигналов.
Неправильная установка стоп-лосса может привести к увеличению убытков.
Неправильная настройка параметров (например, длина скользящей средней) также влияет на эффективность стратегии.
Решение проблемы:
Сокращение циклов подвижных средних, увеличение оптимального диапазона параметров.
Увеличение объема данных отбора, проверка качества сигнала.
Стойкость к убыткам должна быть соответствующим образом ослаблена, при этом устанавливается стоп-прибыль.
Добавление оптимальных параметров, поиск оптимальных комбинаций параметров.
Эта стратегия также может быть оптимизирована в следующих направлениях:
Добавление алгоритмов машинного обучения для автоматической оптимизации параметров.
Добавить дополнительные показатели, создать несколько подстратегий и принять решение с помощью механизма голосования.
Попытайтесь использовать стратегию Breakout, чтобы определить ценовые прорывы.
Использование глубокого обучения для прогнозирования ценовых тенденций.
Оптимизация механизмов погашения убытков, динамическое отслеживание убытков.
Оптимизация позволяет повысить точность принятия решений, повысить прибыльность и стабильность стратегии.
Эта стратегия в основном основана на пересечении движущихся средних значений BTC для принятия торговых решений, а также на фильтрации сигналов с помощью технических показателей, таких как EMA. Эта стратегия обладает более сильным трендовым отслеживанием, имеет высокую конфигурацию и подходит как входная стратегия для количественной торговли. Но также существует определенный риск отставания, поэтому следует принять меры предосторожности. Следующее направление оптимизации может быть выполнено на нескольких уровнях, таких как машинное обучение, интеграционные стратегии и стоп-стратегии.
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)
securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]
//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')
sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')
// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)
ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)
up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue
plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)
ma50GreaterThanMa200 = sma50 > sma200
last3BarUp = ema > ema[1]
startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)
startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")
yearFilter = true
alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"
if true and startLong and yearFilter
strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)
longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
strategy.close('Long', comment = "Fuck It!", alert_message = alertLongPositionMessage)
bgcolor(startLong ? color.green : na, transp=90)