Chiến lược giao dịch tỷ lệ thay đổi

Tác giả:ChaoZhang, Ngày: 2023-09-28 11:26:44
Tags:

Tổng quan

Chiến lược này tính toán tỷ lệ thay đổi theo thời gian để xác định tín hiệu mua / bán. Nó có thể giúp các nhà giao dịch nắm bắt các cơ hội trong biến động giá ngắn hạn.

Chiến lược logic

Chiến lược chủ yếu dựa trên các chỉ số sau:

  1. Đường trung bình di chuyển đơn giản nhanh (bên mặc định 14 ngày): để đánh giá xu hướng ngắn hạn
  2. Đường trung bình di chuyển đơn giản chậm (100 ngày mặc định): để đánh giá xu hướng dài hạn
  3. Đường trung bình di chuyển đơn giản tham chiếu (thời gian mặc định 30 ngày): để xác định hướng tổng thể
  4. Tỷ lệ thay đổi: được tính trên cơ sở giá cao nhất/giá thấp nhất trong thời gian xem lại (mục tiêu 12 thanh) để đánh giá mức độ biến động giá

Các quy tắc nhập cảnh cụ thể:

  1. Giá thấp hơn SMA tham chiếu
  2. ROC trên ngưỡng ROC thấp được đặt trước (bên mặc định 2,3%)
  3. SMA tăng nhanh và SMA giảm chậm, cho thấy khả năng giao thoa

Các quy tắc rời khỏi đặc biệt:

  1. Giá trên SMA tham khảo
  2. ROC trên ngưỡng ROC cao đã được đặt trước (bên mặc định 4,7%)
  3. 3 thanh tăng liên tiếp
  4. Lợi nhuận hiện tại > 0
  5. SMA nhanh trên SMA chậm

Kích thước vị trí là tỷ lệ phần trăm (thường 96%) của tổng vốn chủ sở hữu cho đòn bẩy.

Phân tích lợi thế

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

  1. Sử dụng ROC để phát hiện biến động cho phép nắm bắt các động thái tăng / giảm để có lợi nhuận cao hơn.

  2. Kết hợp SMA nhanh / chậm giúp xác định chính xác hơn các điểm thấp / cao.

  3. SMA tham chiếu cung cấp hướng tổng thể để tránh sự phân tâm từ tiếng ồn ngắn hạn.

  4. Theo dõi dừng lỗ khóa trong lợi nhuận và giảm rủi ro giảm.

  5. Đòn bẩy từ kích thước vị trí khuếch đại lợi nhuận.

Nhìn chung, chiến lược sử dụng ROC, SMA và các công cụ khác hiệu quả để tận dụng dao động giá. Nó có thể đạt được kết quả tốt trong thị trường biến động.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Các thông số ROC và SMA không chính xác có thể gây ra các tín hiệu bị bỏ lỡ hoặc giao dịch xấu.

  2. Số lượng lệnh quá lớn làm tăng rủi ro.

  3. Stop Loss có thể thoát ra sớm trong các thị trường hỗn loạn.

  4. Có xu hướng giảm giá trên các thị trường khác nhau.

  5. Rủi ro quá phù hợp. Sự bền vững nên được xác minh thông qua giao dịch trực tiếp trên các thị trường.

Rủi ro có thể được quản lý thông qua tối ưu hóa tham số, kích thước vị trí, điều chỉnh dừng lỗ, kiểm tra độ bền v.v.

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

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Thêm các chỉ số kỹ thuật khác như biến động, khối lượng để cải thiện độ chính xác tín hiệu.

  2. Tối ưu hóa số lượng giao dịch bằng cách giảm tần suất giao dịch để giảm thiểu tác động của whipsaw.

  3. Kết hợp các kỹ thuật đột phá xung quanh các mức giá chính.

  4. Sử dụng máy học để tự động tối ưu hóa các thông số.

  5. Kiểm tra độ bền trên các thị trường và khung thời gian khác nhau.

  6. Điều chỉnh các thông số chuyên biệt cho các sản phẩm khác nhau như cổ phiếu, ngoại hối vv

  7. Tiếp tục tinh chỉnh tín hiệu và kiểm soát rủi ro dựa trên kết quả trực tiếp.

Tóm lại

Chiến lược này xác định các cơ hội giao dịch xung quanh dao động ngắn hạn bằng cách sử dụng phân tích ROC và SMA. Nó giúp tận dụng các biến động nhanh nhưng cũng yêu cầu kiểm soát rủi ro thích hợp. Các thông số điều chỉnh tốt, kích thước vị trí, dừng lỗ và kiểm tra độ bền có thể tăng cường tính ổn định và khả năng thích nghi. Chiến lược phục vụ như một mẫu tham chiếu cho giao dịch định lượng nhưng cần tùy chỉnh cho các thị trường khác nhau.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1) 

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],close)

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// Guard that the low is under our SMA Reference line 
// Guard that the rate of change over the lookback period is greater than our 
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1)) 

// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of 
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (ROC > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 2.62 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3.62) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Thêm nữa