Солидная и устойчивая стратегия удержания позиций SMA

Автор:Чао Чжан, Дата: 2023-12-18 17:44:16
Тэги:

img

Обзор

Эта стратегия представляет собой простую стратегию держания позиций, основанную на линиях SMA. Она длится, когда краткосрочная линия SMA пересекает долгосрочную линию SMA, и закрывает позицию, когда краткосрочная линия SMA пересекает ниже долгосрочной линии SMA.

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

Стратегия использует две линии SMA, одну краткосрочную 20-дневную и одну долгосрочную 50-дневную линию. Краткосрочная линия может быстрее улавливать изменения ценового тренда, в то время как долгосрочная линия фильтрует краткосрочный шум. Когда краткосрочная линия быстро поднимается выше долгосрочной линии, это указывает на то, что тенденция, возможно, начала долгосрочный подъем, поэтому мы идем здесь. Когда краткосрочная линия опускается ниже долгосрочной линии, это предполагает, что восходящий тренд может закончиться, поэтому мы закрываем позицию здесь.

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

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

Преимущества этой стратегии включают:

  1. Простая в эксплуатации, легко понятна, низкий барьер в использовании
  2. Относительно стабильно благодаря использованию сильных сторон линий SMA
  3. Долгие периоды хранения, менее затронутые краткосрочным рынком
  4. Немногие настраиваемые параметры, легко найти оптимальные комбинации параметров

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

Риски этой стратегии включают:

  1. Больше возможностей для остановки потерь при продлении рынков с ограниченным диапазоном
  2. Линии SMA имеют отстающий эффект, не могут улавливать немедленные изменения цен
  3. Невозможно извлечь выгоду из краткосрочных тенденций роста
  4. Невозможно контролировать размер потерь от одной сделки

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

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

  1. Добавление индикатора MACD для определения времени снижения отскока для меньших потерь на рынках с диапазоном
  2. Испытать различные комбинации параметров линии SMA для поиска оптимального
  3. Включение внутренних показателей для выявления расхождений тенденций, улучшение точности ввода
  4. Добавление механизмов получения прибыли и остановки убытков к контролю прибыли/убытка по сделке

Резюме

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


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Zlema Strateg Long 5m', overlay=true )

// FUNCTIONS

Atr(p) =>
    atr = 0.
    Tr = math.max(high - low, math.max(math.abs(high - close[1]), math.abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1]) / p, Tr)
    atr

// ZLEMA
length = input(title='Length', defval=14)
highlightMovements = input(title='Highlight Movements ?', defval=true)
src = input(title='Source', defval=close)

lag = math.floor((length - 1) / 2)

zlema = ta.ema(src + src - src[lag], length)

zlemaColor = highlightMovements ? zlema > zlema[1] ? color.green : color.red : #6d1e7f
plot(zlema, title='ZLEMA', linewidth=2, color=zlemaColor, transp=0)


// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input.float(1, title='Long Take Profit 1 %', step=0.1) / 100
long_tp1_qty = input.int(10, title='Long Take Profit 1 Qty', step=1)

long_tp2_inp = input.float(5, title='Long Take Profit 2%', step=0.1) / 100
long_tp2_qty = input.int(50, title='Long Take Profit 2 Qty', step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)




// Stop Loss
multiplier = input.float(2.2, 'SL Mutiplier', minval=1, step=0.1)
ATR_period = input.int(17, 'ATR period', minval=1, step=1)

// Strategy
entry_long = zlema > zlema[1]
entry_price_long = ta.valuewhen(entry_long, close, 0)
SL_floating_long = entry_price_long - multiplier * Atr(ATR_period)
exit_long = zlema < zlema[1]

///// BACKTEST PERIOD ///////
testStartYear = input(2022, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(31, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    strategy.entry('long', strategy.long, comment='Long', when=entry_long)
    strategy.exit('TP1', 'long', qty_percent=long_tp1_qty, limit=long_take_level_1)  //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.exit('TP2', qty_percent=long_tp2_qty, limit=long_take_level_2)  //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.close('long', when=exit_long, comment='exit long')


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='1st Long Take Profit')
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='2nd Long Take Profit')
plot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')


if testPeriod()
    strategy.entry('long', strategy.long, comment='Long', when=entry_long)


// LONG POSITIONplot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')



Больше