Chiến lược giao dịch đột phá dựa trên đường trung bình động


Ngày tạo: 2023-11-28 13:50:49 sửa đổi lần cuối: 2023-11-28 13:50:49
sao chép: 2 Số nhấp chuột: 697
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đột phá dựa trên đường trung bình động

Tổng quan

Đây là một chiến lược giao dịch phá vỡ dựa trên đường trung bình di chuyển. Nó tạo ra tín hiệu giao dịch khi giá phá vỡ đường trung bình bằng cách tính giá trung bình trong một chu kỳ nhất định làm đường trung bình.

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

Chiến lược này chủ yếu dựa trên chỉ số đường trung bình di chuyển. Nó sử dụng hàm sma để tính toán giá đóng cửa trung bình trong một chu kỳ nhất định, để có được đường trung bình di chuyển. Khi giá đóng cửa mới nhất phá vỡ đường trung bình di chuyển từ dưới lên, tạo ra tín hiệu mua; Khi giá đóng cửa mới nhất phá vỡ đường trung bình di chuyển từ trên xuống, tạo ra tín hiệu bán.

Cụ thể, nó xác định trong chiến lược nguồn tính toán của đường trung bình di chuyển (giá đóng cửa gần đây) và độ dài chu kỳ, và có được một chuỗi dữ liệu đường trung bình di chuyển. Sau đó, nó đặt hai điều kiện: tạo lệnh mua khi giá vượt qua đường trung bình trên; tạo lệnh bán khi giá vượt qua đường trung bình dưới. Sau khi đặt hàng được tạo ra, nó cũng đặt lệnh dừng lỗ: bán một phần vị trí khi lệnh đạt được tỷ lệ đặt và bán toàn bộ vị trí khi lệnh đạt được giá dừng hoặc dừng lỗ.

Phân tích lợi thế

Đây là một chiến lược theo dõi xu hướng đơn giản và thực tế.

  1. Dễ dàng hiểu và điều chỉnh các tham số.
  2. Đường trung bình di động là một chỉ số kỹ thuật phổ biến và đáng tin cậy, có thể lọc tiếng ồn thị trường và nhận biết xu hướng.
  3. Trong khi đó, thiết lập Stop Loss có thể khóa một phần lợi nhuận và kiểm soát rủi ro.
  4. Chỉ cần tham số đơn giản, nó có thể được thực hiện và áp dụng cho nhập khẩu định lượng.

Phân tích rủi ro

Trong khi chiến lược này có nhiều ưu điểm, nó cũng có một số rủi ro:

  1. Đường trung bình di chuyển dễ bị tụt hậu và có thể bỏ lỡ sự đảo ngược ngắn hạn.
  2. Không có sự cân nhắc về môi trường lớn, dễ bị nhốt trong tù.
  3. Không tối ưu hóa tham số, đặt tham số không đúng sẽ ảnh hưởng đến hiệu suất của chiến lược.
  4. Không có bộ lọc kết hợp với các chỉ số khác, có một tỷ lệ báo cáo sai.

Để kiểm soát những rủi ro này, chúng ta có thể lọc tối ưu hóa kết hợp với các chỉ số khác, đưa ra phán đoán xu hướng ngắn hạn lớn, hoặc sử dụng các phương pháp học máy để tìm kiếm sự kết hợp tham số tốt nhất.

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

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

  1. Thêm các chỉ số phán đoán kỹ thuật khác, tạo thành hệ thống giao dịch, tăng tỷ lệ chiến thắng chiến lược. Ví dụ như thêm các chỉ số phán đoán hỗ trợ như MACD, KD.

  2. Tham gia vào cơ chế dừng lỗ. Sử dụng dừng theo dõi hoặc dừng thời gian để khóa lợi nhuận và tránh sự gia tăng lỗ.

  3. Tối ưu hóa tham số. Thay đổi tham số chu kỳ của đường trung bình di chuyển, tìm ra sự kết hợp tham số tốt nhất. Bạn cũng có thể thử nghiệm các loại đường trung bình di chuyển khác nhau.

  4. Tăng khả năng đánh giá bằng máy học. Sử dụng các thuật toán như rừng ngẫu nhiên, LSTM để kết hợp nhiều yếu tố để đánh giá xu hướng.

  5. Tối ưu hóa logic nhập và thoát. Thiết lập các điều kiện lọc xu hướng, tránh hoạt động đảo ngược khi xu hướng kết thúc.

Tóm tắt

Chiến lược đột phá đường trung bình di động này nói chung rất phù hợp với chiến lược nhập cảnh giao dịch định lượng. Ý tưởng của nó đơn giản, dễ hiểu và vận hành, có hiệu quả thực tế. Đồng thời, nó còn có rất nhiều không gian để thử nghiệm và tối ưu hóa tiếp theo. Chúng ta có thể đưa ra nhiều chỉ số và mô hình kỹ thuật hơn trên cơ sở này để phát triển chiến lược định lượng hiệu quả hơn.

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

//@version=3
//  |-- Initialize Strategy Parameters:
strategy( 
     // |-- Strategy Title.
     title='[Tutorial][RS]Working with orders', 
     // |-- if shorttitle is specified, it will overwrite the name on the chart window.
     shorttitle='WwO', 
     // |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs.
     overlay=true, 
     // |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity)
     default_qty_type=strategy.cash, 
     // |-- Value to use for default trade size
     default_qty_value=1000, 
     // |-- Default Account size 
     initial_capital=100000, 
     // |-- Account Currency parameter
     currency=currency.USD
     )

//  |-- Strategy Profit/loss parameters:
profit = input(defval=5000, title='Take Profit')
loss = input(defval=5000, title='Stop Loss')
ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).')
percent = input(defval=50.0, title='Percentage of position to take profit.')
//  |-- Signal Parameters:
//  |
//  |-- Moving Average input source and length parameters.
src = input(defval=close)
length = input(defval=100)
//  |-- Moving Average Data series.
ma = sma(src, length)

//  |-- Condition for triggering a buy(long) order(trade).
if crossover(src, ma)
    //  |-- Create the order.
    strategy.order(id='Buy', long=true)
    //  |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
    strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio)
    //  |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
    strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss)
if crossunder(src, ma)
    //  |-- Create the order.
    strategy.order(id='Sell', long=false)
    //  |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
    strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio)
    //  |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
    strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss)

//  |-- Output Functions.
plot(series=ma, title='MA', color=black)