Chiến lược theo dõi xu hướng giao cắt MA kép


Ngày tạo: 2023-12-21 16:10:22 sửa đổi lần cuối: 2023-12-21 16:10:22
sao chép: 1 Số nhấp chuột: 611
1
tập trung vào
1623
Người theo dõi

Chiến lược theo dõi xu hướng giao cắt MA kép

Tổng quan

Chiến lược này sử dụng phương pháp theo dõi xu hướng điển hình của giao lộ hai đường ngang, kết hợp với các cơ chế quản lý rủi ro như dừng lỗ, dừng lỗ và theo dõi dừng lỗ, nhằm nắm bắt lợi nhuận từ các hoạt động xu hướng.

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

  1. Tính trung bình EMA của n ngày trong một thời gian nhanh, làm trung bình ngắn hạn;
  2. Tính trung bình EMA của m ngày trong thời gian chậm, làm trung bình dài hạn;
  3. Khi đường trung bình ngắn hạn phá vỡ đường trung bình dài hạn từ dưới lên, hãy làm nhiều hơn; khi phá vỡ từ trên xuống, hãy làm hỏng;
  4. Điều kiện cân bằng: phá vỡ ngược (nếu phá vỡ nhiều lần, phá vỡ ngược là cân bằng).
  5. Kiểm soát rủi ro bằng cách sử dụng các phương pháp như dừng lỗ, dừng lỗ và theo dõi lỗ.

Phân tích lợi thế

  1. Sử dụng đường trung bình EMA kép, có thể đánh giá tốt hơn điểm biến động xu hướng giá và nắm bắt xu hướng.
  2. Kết hợp với Stop Loss, Stop Stop và Tracking Stop, nó có thể kiểm soát hiệu quả tổn thất đơn lẻ, khóa lợi nhuận và giảm rút lui.
  3. Có nhiều tham số tùy chỉnh, có thể điều chỉnh và tối ưu hóa cho các giống và môi trường khác nhau.
  4. Lập luận của chiến lược đơn giản, rõ ràng, dễ hiểu và sửa đổi.
  5. Hỗ trợ thực hiện nhiều thao tác không cần thiết, có thể thích ứng với nhiều loại trường hợp khác nhau.

Phân tích rủi ro

  1. Chiến lược hai đường đều rất nhạy cảm với các đột phá giả và dễ bị mắc kẹt.
  2. Thiết lập tham số không đúng cách có thể dẫn đến giao dịch thường xuyên, tăng chi phí giao dịch và mất điểm trượt.
  3. Các chiến lược không thể tự xác định được điểm thay đổi của xu hướng và cần kết hợp với các chỉ số khác để đánh giá hiệu quả hơn.
  4. Trong bối cảnh khủng hoảng, các tín hiệu giao dịch có thể được tạo ra dễ dàng, nhưng lợi nhuận thực tế sẽ kém hơn.
  5. Cần tối ưu hóa các tham số để phù hợp với các giống và môi trường khác nhau.

Bạn có thể làm giảm nguy cơ bằng cách:

  1. Kết hợp với các chỉ số khác, lọc phá vỡ giả.
  2. Tối ưu hóa thiết lập tham số, giảm tần suất giao dịch.
  3. Tăng các chỉ số định hướng, tránh giao dịch biến động.
  4. Điều chỉnh quản lý vị trí, giảm rủi ro đơn lẻ.

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

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

  1. Tối ưu hóa các tham số chu kỳ của đường trung bình chậm và nhanh để thích ứng với các giống và môi trường khác nhau.
  2. Thêm các chỉ số khác để đánh giá xu hướng và lọc các tín hiệu đột phá giả. Thông thường có thể thêm MACD, KDJ, v.v.
  3. Có thể xem xét chuyển EMA thành SMA hoặc trung bình di chuyển trọng lượng WMA.
  4. Điều chỉnh khoảng cách dừng dựa trên ATR động.
  5. Có thể điều chỉnh vị trí một lần một cách linh hoạt dựa trên cách quản lý vị trí
  6. Các tham số được tự điều chỉnh dựa trên sự kết hợp của các chỉ số liên quan và dao động.

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng trung bình của hai đường EMA điển hình. Nó có lợi thế của việc nắm bắt xu hướng, đồng thời kết hợp các biện pháp quản lý rủi ro như dừng lỗ, dừng lại và theo dõi lỗ. Nhưng cũng có một số vấn đề điển hình, chẳng hạn như độ nhạy cao đối với tiếng ồn và xung động, dễ bị mắc kẹt.

Mã nguồn chiến lược
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)