Chiến lược theo xu hướng trung bình động


Ngày tạo: 2024-02-04 15:44:54 sửa đổi lần cuối: 2024-02-04 15:44:54
sao chép: 0 Số nhấp chuột: 575
1
tập trung vào
1617
Người theo dõi

Chiến lược theo xu hướng trung bình động

Tổng quan

Chiến lược theo dõi xu hướng trung bình di chuyển là một chiến lược theo dõi xu hướng dựa trên định hướng xu hướng của đường trung bình di chuyển dài hạn và kết hợp với các hoạt động sai lệch trong phạm vi biến động thực tế trung bình. Chiến lược này sử dụng đường trung bình di chuyển chỉ số để đánh giá xu hướng và sau đó sử dụng phạm vi biến động thực tế trung bình để xác định xem có phá vỡ giả hay không.

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

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

  1. Sử dụng chỉ số di chuyển trung bình để xác định hướng của xu hướng tổng thể. Độ dài chu kỳ mặc định là 200 đường K.
  2. Tính trung bình phạm vi biến động thực tế của 10 đường K gần nhất.
  3. Khi giá đóng cửa cao hơn đường trung bình di chuyển + đường trung bình của phạm vi biến động thực, nó được coi là xu hướng tăng lên.
  4. Khi giá đóng cửa dưới mức trung bình di chuyển của Ethereum - mức trung bình của phạm vi biến động thực sự - thì nó được đánh giá là xu hướng giảm.
  5. Trong xu hướng tăng, làm nhiều hơn; trong xu hướng giảm, làm ít hơn.
  6. Chiến lược mặc định là dừng lỗ bằng đường trung bình di chuyển. Bạn cũng có thể chọn dừng lỗ bằng đường trung bình di chuyển ngược + trung bình phạm vi biến động thực tế.

Phân tích lợi thế

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

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

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. Trong một hệ thống đường thẳng, một mức độ rút lui thường xảy ra khi xu hướng đảo ngược.
  2. Cài đặt tham số của đường trung bình di chuyển và đường trung bình thực tế có thể ảnh hưởng lớn đến hiệu suất của chiến lược. Nếu bạn đặt tham số không đúng cách, bạn sẽ bỏ lỡ cơ hội giao dịch hoặc tăng tổn thất không cần thiết.
  3. Chính sách này không tính đến mối quan hệ giữa giá cổ phiếu và khối lượng giao dịch.

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

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

  1. Kiểm tra các loại trung bình di chuyển khác nhau để tìm các tham số trung bình di chuyển phù hợp nhất cho một cổ phiếu hoặc loại cụ thể.
  2. Tối ưu hóa các tham số chu kỳ trung bình di chuyển để phù hợp hơn với các đặc điểm của cổ phiếu hoặc giống được giao dịch.
  3. Tối ưu hóa các tham số trong phạm vi biến động trung bình thực tế, tìm kiếm các tham số kết hợp tốt nhất để lọc các biến động mà không bị mất xu hướng.
  4. Tăng quy tắc phán đoán về số lượng giao dịch, tránh đột phá không hiệu quả.
  5. Kiểm tra và so sánh các phương pháp ngăn chặn khác nhau để xác định phương án tối ưu.

Tóm tắt

Chiến lược theo dõi xu hướng trung bình di chuyển nói chung là một chiến lược xu hướng rất đơn giản và thực tế. Nó đồng thời có hiệu quả 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ố, vẫn cần kiểm tra và tối ưu hóa các tham số và cách dừng lỗ, nhưng nói chung là một chiến lược hiệu quả dễ nắm bắt và điều chỉnh.

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