Chiến lược vị thế trung bình động SMA vững chắc và đáng tin cậy


Ngày tạo: 2023-12-18 17:44:16 sửa đổi lần cuối: 2023-12-18 17:44:16
sao chép: 0 Số nhấp chuột: 627
1
tập trung vào
1621
Người theo dõi

Chiến lược vị thế trung bình động SMA vững chắc và đáng tin cậy

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 trung bình. Khi đường SMA ngắn hạn đi qua đường SMA dài, hãy mở thêm vị trí; Khi đường SMA ngắn hạn đi qua đường SMA dài, hãy giữ vị trí thấp.

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

Chiến lược này sử dụng hai đường trung bình SMA, một đường ngắn hạn 20 ngày và một đường dài 50 ngày. Đường ngắn hạn có thể nắm bắt xu hướng thay đổi giá nhanh hơn, đường dài lọc tiếng ồn ngắn hạn.

Nhìn chung, chiến lược này sử dụng các đặc điểm đường cong của đường SMA để đánh giá xu hướng chuyển động giá trên hai chiều thời gian và lợi nhuận bằng cách giữ một vị trí ổn định hơn.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Điều hành đơn giản, dễ hiểu, ngưỡng thấp
  2. Sử dụng lợi thế của đường SMA, tương đối ổn định
  3. Giữ vị thế lâu dài, không dễ bị ảnh hưởng bởi tiếng ồn thị trường ngắn hạn
  4. Các tham số có thể cấu hình ít hơn, dễ dàng tối ưu hóa để tìm ra sự kết hợp tham số tốt nhất

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Khi thị trường biến động lâu dài, lỗ hổng dừng có thể cao hơn
  2. Đường SMA có tính chậm trễ và không thể nắm bắt được sự thay đổi giá trong thời gian
  3. Không thể tận dụng hiệu quả các đợt tăng giá ngắn hạn để thu lợi nhuận
  4. Không thể kiểm soát mức độ tổn thất đơn lẻ

Hướng tối ưu hóa

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

  1. Thời gian để tham gia chỉ số MACD để đánh giá sự phục hồi của đáy, nhằm giảm tổn thất trong bối cảnh biến động
  2. Kiểm tra kết hợp đường trung bình SMA của các tham số khác nhau để tìm tham số tối ưu
  3. Tham gia các chỉ số trong nước để đánh giá xu hướng, nâng cao độ chính xác của các vị trí mở
  4. Tăng chiến lược dừng lỗ, kiểm soát lỗ hổng đơn lẻ

Tóm tắt

Nhìn chung, chiến lược giữ vị trí SMA trung bình ổn định, đơn giản, dễ sử dụng và phù hợp cho người mới bắt đầu. Với sự phát triển của giao dịch định lượng, chiến lược này có thể giới thiệu nhiều chỉ số và phương tiện kỹ thuật để tối ưu hóa để có hiệu quả tốt hơn.

Mã nguồn chiến lược
/*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')