Chiến lược giữ vị trí SMA vững chắc và ổn định

Tác giả:ChaoZhang, Ngày: 2023-12-18 17:44:16
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giữ vị trí đơn giản dựa trên đường SMA. Nó đi dài khi đường SMA ngắn hạn vượt qua đường SMA dài hạn và đóng vị trí khi đường SMA ngắn hạn vượt qua đường SMA dài hạn.

Nguyên tắc chiến lược

Chiến lược này sử dụng hai đường SMA, một đường ngắn hạn 20 ngày và một đường dài hạn 50 ngày. Đường ngắn hạn có thể bắt được sự thay đổi xu hướng giá nhanh hơn, trong khi đường dài hạn lọc ra tiếng ồn ngắn hạn. Khi đường ngắn hạn tăng nhanh trên đường dài hạn, nó cho thấy xu hướng có thể đã bắt đầu tăng trưởng dài hạn, vì vậy chúng ta đi dài ở đây. Khi đường ngắn hạn giảm xuống dưới đường dài hạn, nó cho thấy xu hướng tăng có thể đã kết thúc, vì vậy chúng ta đóng vị trí ở đây.

Tóm lại, chiến lược này sử dụng các đặc điểm đường cong của đường SMA để xác định xu hướng chuyển động giá trên hai chiều thời gian, và tạo ra lợi nhuận ổn định với giữ vị trí tương đối ổn định.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Dễ dàng vận hành, dễ hiểu, rào cản sử dụng thấp
  2. Tương đối ổn định bằng cách tận dụng điểm mạnh của đường SMA
  3. Thời gian giữ dài, ít bị ảnh hưởng bởi tiếng ồn thị trường ngắn hạn
  4. Một số tham số có thể cấu hình, dễ dàng tìm kết hợp tham số tối ưu

Phân tích rủi ro

Những rủi ro của chiến lược này bao gồm:

  1. Có thể dừng lỗ nhiều hơn khi các thị trường giới hạn phạm vi kéo dài
  2. Các đường SMA có hiệu ứng chậm trễ, không thể bắt được sự thay đổi giá ngay lập tức
  3. Không thể tận dụng các mô hình giảm mạnh ngắn hạn
  4. Không thể kiểm soát kích thước lỗ giao dịch duy nhất

Hướng dẫn tối ưu hóa

Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Thêm chỉ số MACD để xác định thời gian phục hồi đáy cho ít lỗ hơn trong các thị trường giới hạn phạm vi
  2. Kiểm tra các kết hợp tham số đường SMA khác nhau để tìm ra tối ưu
  3. Kết hợp các chỉ số nội địa để phát hiện sự khác biệt xu hướng, cải thiện độ chính xác nhập
  4. Thêm cơ chế lấy lợi nhuận và dừng lỗ vào kiểm soát lợi nhuận/mất lỗ cho mỗi giao dịch

Tóm lại

Tóm lại, chiến lược nắm giữ vị trí SMA này ổn định, đơn giản và dễ vận hành, phù hợp cho người mới bắt đầu giao dịch trực tiếp.


/*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')



Thêm nữa