Fisher Yurik Trailing Stop chiến lược

Tác giả:ChaoZhang, Ngày: 2024-02-02 14:57:33
Tags:

img

Tổng quan

Chiến lược dừng theo dõi Fisher Yurik là một chiến lược giao dịch định lượng tích hợp chỉ số Fisher Yurik và cơ chế dừng theo dõi. Nó sử dụng chỉ số Fisher Yurik để tạo ra tín hiệu mua và bán trong khi thiết lập dừng theo dõi để khóa lợi nhuận, tối đa hóa lợi nhuận trong khi bảo vệ lợi nhuận.

Chiến lược logic

  1. Phạm vi ngày đầu vào để xác định khung thời gian backtest / giao dịch trực tiếp
  2. Các thông số đầu vào cho chỉ số Fisher Yurik, mặc định là 2 giai đoạn
  3. Tỷ lệ thu lợi nhuận đầu vào và dừng lỗ, mặc định đến 5% lợi nhuận và 2% lỗ
  4. Tính toán các đường chính và tín hiệu của chỉ số Fisher Yurik
  5. Tạo tín hiệu mua khi đường chính băng qua trên đường tín hiệu
  6. Thiết lập dừng lại, thoát khỏi vị trí dài khi giá giảm 2% sau khi nhập
  7. Lấy lợi nhuận khi giá tăng trên 5%

Phân tích lợi thế

  1. Chỉ số Fisher Yurik dễ dàng xác định xu hướng, tín hiệu mua chính xác
  2. Trailing dừng khóa trong hầu hết lợi nhuận trong khi tránh dừng vượt quá ngưỡng
  3. Các tham số có thể tùy chỉnh phù hợp với môi trường thị trường khác nhau
  4. Thực hiện đơn giản và dễ hiểu

Phân tích rủi ro

  1. Điều chỉnh tham số không chính xác có thể gây ra giao dịch quá hung hăng, yêu cầu kiểm tra cẩn thận
  2. Đặt lỗ quá rộng có thể dẫn đến tổn thất vượt quá mong đợi
  3. Lấy lợi nhuận quá chặt có thể cắt giảm lợi nhuận ngắn, hạn chế lợi nhuận
  4. Các thông số thích hợp nên được xác định cho các sản phẩm khác nhau

Rủi ro có thể được giải quyết bằng cách điều chỉnh tỷ lệ dừng/lợi nhuận, các tham số thử nghiệm, sử dụng bộ lọc tín hiệu, quy tắc kích thước vị trí.

Cơ hội gia tăng

  1. Tối ưu hóa các thông số Fisher Yurik cho tác động đến chiến lược
  2. Thêm các bộ lọc tín hiệu như MACD, KD để cải thiện chất lượng tín hiệu
  3. Thêm các điều kiện nhập cảnh như thoát khỏi Bollinger Bands
  4. Kết hợp các quy tắc định kích thước vị trí để kiểm soát theo rủi ro giao dịch
  5. Cải thiện phương pháp dừng lại, ví dụ như trơn tru, Chandelier Exits

Kết luận

Chiến lược dừng theo dõi Fisher Yurik kết hợp nhận dạng xu hướng và quản lý rủi ro. Với điều chỉnh tham số, kết hợp chỉ số và cải tiến dừng lỗ, nó có thể phù hợp với hầu hết các công cụ để có lợi nhuận tốt trong phạm vi dung nạp rủi ro chấp nhận được.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)

// Date Ranges 
from_month = input(defval = 1, title = "From Month")
from_day   = input(defval = 1, title = "From Day")
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month")
to_day     = input(defval = 1, title = "To Day")
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)

var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na

price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)

Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])

up = Fish >= 0

ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish

var float entryPrice = na
var float stopPrice = na
 
if (ExtBuffer1 > ExtBuffer1[1])
    entryPrice := close*dusus
    stopPrice := close * cost 
 
if (ExtBuffer2 < ExtBuffer2[1])
    entryPrice := close
    stopPrice := close * cost

// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)


Thêm nữa