В процессе загрузки ресурсов... загрузка...

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

Автор:Чао Чжан, Дата: 2024-04-01 11:53:14
Тэги:

动量交易之双均线交叉策略

Обзор

Стратегия использует индексовые движущиеся средние (EMA) из 8 и 21 циклов для идентификации изменений в тенденции рынка. Сигналы покупания генерируются, когда EMA с более коротких циклов снизу пересекает EMA с более длинных циклов; обратное, сигналы продажи генерируются, когда EMA с более коротких циклов снизу пересекает EMA с более длинных циклов. Стратегия также сочетает три последовательных более высоких низких (HLL) и три последовательных более низких высоких (LLH) как дополнительные сигналы подтверждения обратного тренда.

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

  1. Вычисляется ЭМА 8 циклов и 21 циклов, которые используются для определения направления основных тенденций.
  2. Выявление трех последовательных более высоких низких точек (HLL) и трех последовательных более низких высоких точек (LLH) в качестве ранних сигналов об обратном тренде.
  3. Когда 8-циклная ЭМА сверху пересекает 21-циклную ЭМА с прорывом ЛЛЛ, сигнал покупается; когда 8-циклная ЭМА сверху пересекает 21-циклную ЭМА с прорывом ЛЛЛ, сигнал продажи создается.
  4. Установка стоп-лосса на 5% от входной цены и стоп-лоса на 16% от входной цены для контроля риска и блокировки прибыли.
  5. Когда появляется сигнал обратного движения, позиции закрываются и открываются обратно.

Стратегические преимущества

  1. В сочетании с EMA и моделями ценового поведения (HLL и LLH) для определения тенденций повышается надежность сигналов.
  2. Установка четких уровней остановки и остановки помогает контролировать риски и закрепить прибыль.
  3. Применяется для нескольких временных рамок и различных рынков, с определенной универсальностью.
  4. Логика ясна, легко понятна и реализуема.

Стратегические риски

  1. В нестабильных рынках частое пересечение может привести к многочисленным ложным сигналам, которые приводят к убыткам.
  2. Фиксированные уровни остановки и остановки могут не соответствовать различным рыночным условиям, что приводит к потенциальным затратам на возможность или большим потерям.
  3. Стратегии, опирающиеся на исторические данные, могут быть менее адаптивными к внезапным событиям или фундаментальным изменениям.

Оптимизация стратегии

  1. Внедрение адаптивных механизмов остановки и остановки, например, на основе колебаний (например, ATR) для корректировки уровня остановки и остановки, чтобы лучше адаптироваться к различным рыночным условиям.
  2. В сочетании с другими показателями или факторами, такими как объем сделок, относительно сильный и слабый индекс (RSI) и т. д., чтобы дополнительно отфильтровать сигналы и повысить надежность.
  3. Оптимизируйте параметры (например, цикл EMA, коэффициент прерывания потерь и т.д.) и найдите наилучшую комбинацию параметров, которые будут работать на конкретном рынке или индикаторе.
  4. Рассматривать возможность внедрения мер управления рисками, таких как размещение позиций, для контроля рисковых препятствий для разовых сделок.

Подведение итогов

Эта стратегия использует перекресток 8-циклической и 21-цикличной ЭМА, в сочетании с HLL и LLH ценовыми моделями, чтобы идентифицировать тенденции реверсии и генерировать торговые сигналы. Ясные правила стоп-дозировки помогают контролировать риск и блокировать прибыль. Однако эта стратегия может создавать ложные сигналы в нестабильных рынках, и фиксированные уровни стоп-дозировки могут быть не адаптированы к различным рыночным условиям. Для дальнейшего улучшения можно рассмотреть возможность внедрения адаптивных стоп-дозиров, в сочетании с другими показателями, оптимизирующих параметров и внедрения мер управления рисками. В целом эта стратегия предоставляет торговую структуру, основанную на динамике и отслеживании тенденций, но все равно требует корректировки и оптимизации в зависимости от конкретного рынка и индивидуальных предпочтений.


/*backtest
start: 2023-03-26 00:00:00
end: 2024-03-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Trend Following 8&21EMA with strategy tester [ukiuro7]', overlay=true, process_orders_on_close=true, calc_on_every_tick=true, initial_capital = 10000)

//INPUTS
lh3On = true
hl3On = true
emaOn = input(title='105ema / 30min', defval=true) 
assistantOn = input(title='Assistant', defval=true)
textOn = input(title='Text', defval=true)

showRiskReward = input.bool(true, title='Show Risk/Reward Area', group="TP/SL")
stopPerc = input.float(5.0, step=0.1, minval=0.1, title='Stop-Loss %:',group="TP/SL") / 100
tpPerc = input.float(16.0, step=0.1, minval=0.1, title='Take-Profit %:',group="TP/SL") / 100

backtestFilter = input(false, title='Backtest Entries to Date Range',group="Backtest Date Range")
i_startTime = input(defval=timestamp('01 Jan 2022 00:00'), inline="b_1", title='Start',group="Backtest Date Range")
i_endTime = input(defval=timestamp('01 Jan 2029 00:00'), inline="b_1", title='End',group="Backtest Date Range")
inDateRange = true

message_long_entry = input.string(title='Alert Msg: LONG Entry', defval ='', group='Alert Message')
message_short_entry = input.string(title='Alert Msg: SHORT Entry', defval='', group='Alert Message')
message_long_exit = input.string(title='Alert Msg: LONG SL/TP', defval='', group='Alert Message')
message_short_exit = input.string(title='Alert Msg: SHORT SL/TP', defval='', group='Alert Message')  

//CALCS
threeHigherLows() =>
    low[0] >= low[1] and low[1] >= low[2]

threeLowerHighs() =>
    high[2] >= high[1] and high[1] >= high[0]

breakHigher() =>
    padding = timeframe.isintraday ? .02 : .1
    high >= high[1] + padding

breakLower() =>
    padding = timeframe.isintraday ? .02 : .1
    low <= low[1] - padding

lh3 = threeLowerHighs() and lh3On
lh3bh = lh3[1] and breakHigher() and lh3On

hl3 = threeHigherLows() and hl3On
hl3bl = hl3[1] and breakLower() and hl3On

ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)

//VARS
var float longStop = na, var float longTp = na
var float shortStop = na, var float shortTp = na

//CONDS
isUptrend = ema8 >= ema21
isDowntrend = ema8 <= ema21
trendChanging = ta.cross(ema8, ema21)

buySignal = lh3bh and lh3[2] and lh3[3] and isUptrend and timeframe.isintraday
sellSignal = hl3bl and hl3[2] and hl3[3] and isDowntrend and timeframe.isintraday

goingDown = hl3 and isDowntrend and timeframe.isintraday
goingUp = lh3 and isUptrend and timeframe.isintraday

projectXBuy = trendChanging and isUptrend
projectXSell = trendChanging and isDowntrend

longCond = trendChanging and isUptrend and assistantOn
shortCond = trendChanging and isDowntrend and assistantOn

//STRATEGY
if shortCond and strategy.position_size > 0 and barstate.isconfirmed
    strategy.close('Long', comment='CLOSE LONG', alert_message=message_long_exit)

if longCond and strategy.position_size < 0 and barstate.isconfirmed
    strategy.close('Short', comment='CLOSE SHORT', alert_message=message_short_exit) 

if longCond and strategy.position_size <= 0 and barstate.isconfirmed and inDateRange
    longStop := close * (1 - stopPerc)
    longTp := close * (1 + tpPerc)
    strategy.entry('Long', strategy.long, comment='LONG', alert_message=message_long_entry)
    strategy.exit('Long Exit', 'Long', comment_loss="SL LONG", comment_profit = "TP LONG", stop=longStop, limit=longTp, alert_message=message_long_exit)

if shortCond and strategy.position_size >= 0 and barstate.isconfirmed and inDateRange
    shortStop := close * (1 + stopPerc)
    shortTp := close * (1 - tpPerc)
    strategy.entry('Short', strategy.short, comment='SHORT', alert_message=message_short_entry)
    strategy.exit('Short Exit', 'Short', comment_loss="SL SHORT", comment_profit="TP SHORT", stop=shortStop, limit=shortTp, alert_message=message_short_exit)

//PLOTS
plotshape(longCond, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.small, text='Buy')
plotshape(shortCond, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, text='Sell')
plotchar(trendChanging and isUptrend and close < open and assistantOn, char='!', location=location.abovebar, color=color.new(color.green, 0), size=size.small)

aa = plot(ema8, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(ema21, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.new(color.green,90) : color.new(color.red,90))
buyZone = isUptrend and lh3 and high < ema21 and timeframe.isintraday
sellZone = isDowntrend and hl3 and low > ema21 and timeframe.isintraday

L1 = plot(showRiskReward and strategy.position_size > 0 ? strategy.position_avg_price : na, color=color.new(color.green, 0), linewidth=1, style=plot.style_linebr, title='Long Entry Price')
L2 = plot(showRiskReward and strategy.position_size > 0 ? longTp : na, color=color.new(color.green, 0), linewidth=1, style=plot.style_linebr, title='Long TP Price')
L3 = plot(showRiskReward and strategy.position_size > 0 ? longStop : na, color=color.new(color.red, 0), linewidth=1, style=plot.style_linebr, title='Long Stop Price')

S1 = plot(showRiskReward and strategy.position_size < 0 ? strategy.position_avg_price : na, color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr, title='Short Entry Price')
S2 = plot(showRiskReward and strategy.position_size < 0 ? shortTp : na, color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr, title='Short TP Price')
S3 = plot(showRiskReward and strategy.position_size < 0 ? shortStop : na, color=color.new(color.maroon, 0), linewidth=1, style=plot.style_linebr, title='Short Stop Price')

fill(L1, L2, color=color.new(color.green, 90))
fill(L1, L3, color=color.new(color.red, 90))
fill(S1, S2, color=color.new(color.teal, 90))
fill(S1, S3, color=color.new(color.maroon, 90))

bgcolor(inDateRange == false ? color.new(color.red,90) : na, title="Backtest Off-Range") 


Больше информации