Chiến lược xu hướng chuyển động

Tác giả:ChaoZhang, Ngày: 2024-02-04 15:44:54
Tags:

img

Tổng quan

Chiến lược trung bình động xu hướng dao động là một hệ thống theo xu hướng sử dụng trung bình động dài hạn để xác định hướng xu hướng kết hợp với phạm vi trung bình thực để lọc ra các giả mạo và hạn chế giảm tổng thể. Nó sử dụng trung bình động biểu số để xác định hướng xu hướng và sử dụng phạm vi trung bình thực để phát hiện nếu đó là một sự đột phá sai. Điều này có thể lọc hiệu quả các thị trường dao động và giảm giảm tổng thể chiến lược.

Chiến lược logic

Chiến lược được thiết kế dựa trên các nguyên tắc sau:

  1. Sử dụng một đường trung bình động theo cấp số nhân để xác định hướng xu hướng tổng thể. Thời gian mặc định là 200 bar.
  2. Tính toán phạm vi trung bình trong 10 thanh cuối cùng.
  3. Khi giá đóng cửa trên Moving Average + Average True Range, nó được xác định là xu hướng tăng.
  4. Khi giá đóng dưới Moving Average - Average True Range, nó được xác định là xu hướng giảm.
  5. Đi dài trong xu hướng tăng và đi ngắn trong xu hướng giảm.
  6. Theo mặc định, đường trung bình động được sử dụng làm đường dừng lỗ. Nó cũng có thể chọn sử dụng Moving Average ± Average True Range làm đường dừng lỗ.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Sử dụng đường trung bình động để xác định xu hướng chính có thể lọc hiệu quả tiếng ồn thị trường ngắn hạn.
  2. Thêm phạm vi trung bình thực sự như một điều kiện lọc tránh tạo ra các tín hiệu giao dịch trong các thị trường dao động, do đó giảm lỗ không cần thiết.
  3. Đường dừng lỗ gần trung bình động hoặc phạm vi ngược của nó, cho phép dừng lỗ nhanh để giảm mức rút tối đa.
  4. Cài đặt tham số đơn giản làm cho nó dễ hiểu và tối ưu hóa.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro tiềm ẩn:

  1. Sự đảo ngược xu hướng thường dẫn đến một mức độ rút tiền trong một hệ thống trung bình động.
  2. Các thiết lập tham số của đường trung bình động và đường trung bình True Range có thể có tác động lớn đến hiệu suất chiến lược.
  3. Chính chiến lược không xem xét mối quan hệ giữa giá và khối lượng. Nó có thể tạo ra một số tín hiệu sai.

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

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

  1. Kiểm tra các loại trung bình động khác nhau để tìm ra loại phù hợp nhất cho các cổ phiếu hoặc sản phẩm cụ thể.
  2. Tối ưu hóa tham số trung bình động theo thời gian để phù hợp hơn với các đặc điểm của các cổ phiếu hoặc sản phẩm giao dịch.
  3. Tối ưu hóa tham số Range trung bình thực để tìm sự kết hợp tốt nhất để lọc các thị trường khác nhau mà không bỏ qua xu hướng.
  4. Thêm các quy tắc âm lượng để tránh việc phá vỡ không hợp lệ.
  5. Kiểm tra và so sánh các phương pháp dừng lỗ khác nhau để xác định giải pháp tối ưu.

Kết luận

Nhìn chung, Chiến lược xu hướng chuyển động trung bình là một chiến lược rất đơn giản và thực tế theo xu hướng. Nó cũng có kiểm soát rủi ro tốt. Mặc dù chiến lược không xem xét nhiều yếu tố, nhưng vẫn cần kiểm tra chi tiết và tối ưu hóa các tham số và phương pháp dừng lỗ. Tuy nhiên, logic giao dịch đơn giản và cài đặt tham số làm cho nó có thể áp dụng rộng rãi cho các sản phẩm khác nhau, đặc biệt phù hợp với giao dịch tiền điện tử như Bitcoin.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



Thêm nữa