Mua theo hướng biến động thấp với lấy lợi nhuận và dừng lỗ

Tác giả:ChaoZhang, Ngày: 2023-12-18 12:00:07
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Low Volatility Directional Buy with Profit Taking and Stop Loss. Nó sử dụng crossover trung bình động như tín hiệu mua và kết hợp lấy lợi nhuận và dừng lỗ để khóa lợi nhuận. Nó phù hợp với các đồng tiền biến động thấp.

Chiến lược logic

Chiến lược này sử dụng 3 đường trung bình động với các khoảng thời gian khác nhau: 50 giai đoạn, 100 giai đoạn và 200 giai đoạn.

Điều này báo hiệu một sự đột phá từ phạm vi biến động thấp và sự bắt đầu của một xu hướng. Sự gia tăng nhanh chóng của MA 50 giai đoạn đại diện cho sự tăng cường động lực ngắn hạn; MA 100 giai đoạn cũng tăng lên cho thấy lực lượng trung hạn tham gia để ổn định xu hướng tăng.

Sau khi tham gia, chiến lược sử dụng lấy lợi nhuận và dừng lỗ để khóa lợi nhuận. Lợi nhuận lấy được đặt ở mức 8% giá nhập cảnh. Lợi nhuận dừng được đặt ở mức 4% giá nhập cảnh. Với lợi nhuận lấy cao hơn so với lỗ dừng, nó đảm bảo chiến lược vẫn có lợi nhuận nói chung.

Phân tích lợi thế

Những lợi thế của chiến lược này:

  1. Chụp chính xác cơ hội xu hướng từ sự biến động thấp.
  2. Logic đơn giản và rõ ràng với các đường trung bình động dễ tính toán và kiểm tra lại.
  3. Các thiết lập lấy lợi nhuận và dừng lỗ hợp lý đảm bảo lợi nhuận ổn định.
  4. Các thông số cấu hình linh hoạt làm cho tối ưu hóa dễ dàng.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Các tín hiệu sai có thể gây ra tổn thất.
  2. Thật khó để ngăn chặn thua lỗ khi thị trường đảo ngược.
  3. Các thiết lập tham số lấy lợi nhuận và dừng lỗ không chính xác ảnh hưởng đến lợi nhuận.

Giải pháp:

  1. Thêm các chỉ số khác để lọc tín hiệu và đảm bảo tính hợp lệ của đột phá.
  2. Giảm thời gian dừng lỗ để giảm lỗ từ đảo ngược.
  3. Kiểm tra tỷ lệ lợi nhuận và dừng lỗ khác nhau để tìm tối ưu.

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

Tối ưu hóa có thể được thực hiện trong các lĩnh vực sau:

  1. Kiểm tra các khoảng thời gian trung bình động khác nhau để tìm kết hợp tốt nhất.
  2. Thêm khối lượng, v.v. để xác nhận sự đột phá xu hướng.
  3. Điều chỉnh năng động phần trăm lấy lợi nhuận và dừng lỗ.
  4. Kết hợp máy học, v.v. để dự đoán tỷ lệ thành công.
  5. Điều chỉnh các tham số dựa trên các điều kiện thị trường và đồng tiền khác nhau.

Tóm lại, chiến lược có logic rõ ràng nói chung, đạt được lợi nhuận rủi ro thấp thông qua cấu hình các khoảng thời gian trung bình động và tỷ lệ phần trăm thu lợi nhuận / dừng lỗ. Nó có thể được áp dụng linh hoạt trong giao dịch định lượng.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Low volatility Buy w/ TP & SL (by Coinrule)',title='Low volatility Buy w/ TP & SL', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 10,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2019, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
movingaverage_fast = sma(close, input(50))
movingaverage_slow = sma(close, input(200))
movingaverage_normal= sma(close, input(100))



//Entry 
strategy.entry(id="long", long = true, when = movingaverage_slow > movingaverage_normal and movingaverage_fast > movingaverage_normal)

//Exit
longStopPrice  = strategy.position_avg_price * (1 - 0.04)
longTakeProfit = strategy.position_avg_price * (1 + 0.08)

strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())

//PLOT

plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)


Thêm nữa