안정적이고 안정적인 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')



더 많은