Стратегия торговли BTC, основанная на перекрестном использовании скользящей средней

Автор:Чао Чжан, Дата: 2023-12-07 14:56:50
Тэги:

img

Обзор

Эта стратегия основана на золотом кресте и смертном кресте сигналов 50-дневной скользящей средней и 200-дневной скользящей средней BTC, в сочетании с дополнительными техническими индикаторами для генерации сигналов покупки и продажи. Эта стратегия в основном подходит для валютных пар с очевидными тенденционными характеристиками, такими как BTC/USDT.

Принцип стратегии

Когда 50-дневная скользящая средняя пересекает 200-дневную скользящую среднюю и образует золотой крест, это указывает на то, что BTC вошел на бычий рынок и генерирует сигнал покупки.

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

  1. Индикатор EMA: Вычислить индикатор EMA с длиной + смещением, когда он поднимается указывает на то, что текущий рынок является бычьим, мы можем купить.

  2. Сравните стоимостную связь между скользящей средней и EMA: если значение EMA выше, чем 50-дневная скользящая средняя, генерируется сигнал покупки.

  3. Проверьте, упала ли цена более чем на 1% по сравнению с минимумом предыдущей линии K, если это так, сделайте сигнал продажи.

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

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Использование скользящих средних в качестве основного торгового сигнала может отфильтровать шум рынка и определить направление тренда.

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

  3. Принятие соответствующих стратегий стоп-лосса может эффективно контролировать однократные потери.

  4. Относительно простая логика торговли легко понять и реализовать, подходящая для новичков в количественной торговле.

  5. Существует множество настраиваемых параметров, которые можно регулировать в соответствии с вашими собственными предпочтениями.

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

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

  2. Добавление вспомогательных показателей увеличивает количество правил и также увеличивает вероятность получения неправильных сигналов.

  3. Неправильные настройки стоп-лосса могут привести к увеличению потерь.

  4. Неправильные параметры (например, длина скользящей средней и т.д.) также влияют на результаты стратегии.

Соответствующие решения:

  1. Соответственно сократить цикл скользящей средней и увеличить диапазон оптимизации параметров.

  2. Увеличьте количество данных для проверки качества сигнала.

  3. Правильно расслабить диапазон стоп-лосса при установке стоп-прибыли.

  4. Увеличьте оптимизацию параметров, чтобы найти лучшие комбинации параметров.

Руководство по оптимизации

Эта стратегия также может быть оптимизирована в следующих направлениях:

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

  2. Добавить дополнительные показатели для создания нескольких подстратегий и принятия решений через механизм голосования.

  3. Попробуйте стратегии прорыва, чтобы определить прорыв цены.

  4. Используйте глубокое обучение для прогнозирования ценовых тенденций.

  5. Оптимизировать механизмы стоп-лосса для достижения динамического отслеживания стоп-лосса.

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

Резюме

Эта стратегия в основном принимает торговые решения на основе скользящего среднего кроссовера 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)



Больше