Xu hướng theo chiến lược dài hạn dựa trên siêu xu hướng và biến đổi Fisher

Tác giả:ChaoZhang, Ngày: 2023-11-03 15:42:16
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số SuperTrend và Fisher Transform để thực hiện một xu hướng tương đối ổn định sau chiến lược giao dịch dài hạn. Nó tạo ra tín hiệu mua khi chỉ số SuperTrend đưa ra tín hiệu mua và chỉ số Fisher Transform giảm xuống dưới -2,5 và tăng. Chiến lược quản lý các vị trí đúng cách với dừng lỗ và lấy lợi nhuận.

Chiến lược logic

  1. Chỉ số SuperTrend được sử dụng để xác định hướng của xu hướng giá. Khi giá vượt trên dải trên, đó là tín hiệu tăng; khi giá vượt dưới dải dưới, đó là tín hiệu giảm. Chiến lược này phát ra tín hiệu mua khi SuperTrend tăng.

  2. Chỉ số biến đổi Fisher phản ánh tác động của biến động giá trên tâm lý người tiêu dùng. Các giá trị Fisher giữa (-2.5, 2.5) đại diện cho một thị trường trung lập, dưới -2.5 đại diện cho một thị trường hoảng loạn, và trên 2.5 đại diện cho một thị trường phấn khích. Chiến lược này phát ra tín hiệu mua khi Fisher dưới -2.5 và tăng, để nắm bắt điểm chuyển đổi từ hoảng loạn sang trung lập.

  3. Chiến lược này quản lý các vị trí đúng cách với stop loss và take profit. Stop loss được thiết lập ở mức giá nhập trừ giá ATR nhân với nhân ATR, và take profit được thiết lập ở mức giá nhập cộng giá ATR nhân với nhân ATR. Phạm vi stop loss lớn hơn phạm vi take profit, phản ánh ý tưởng kiểm soát rủi ro của chiến lược theo xu hướng.

  4. Nó cũng xem xét quản lý số tiền rủi ro.

Phân tích lợi thế

  1. Kết hợp nhiều chỉ số tránh giao dịch thường xuyên do một chỉ số duy nhất gây ra. SuperTrend xác định hướng xu hướng và Fisher Transform xác định tâm lý thị trường để hình thành các tín hiệu giao dịch ổn định.

  2. Thiết lập đúng mức dừng lỗ và lấy lợi nhuận là thuận lợi để nắm bắt xu hướng cho việc nắm giữ dài hạn, đồng thời kiểm soát rủi ro.

  3. Sử dụng quản lý số tiền rủi ro và kích thước tick tối thiểu làm cho rủi ro của mỗi giao dịch có thể kiểm soát được, tránh mất mát lớn vượt quá khả năng chi trả.

  4. Các tín hiệu giao dịch ổn định và phù hợp với việc nắm giữ dài hạn. Fisher Transform là một chỉ số trơn tru, giúp lọc tiếng ồn thị trường và tránh các tín hiệu sai.

  5. Không gian tối ưu hóa lớn cho các thông số chỉ số. Thời gian ATR và nhân SuperTrend và độ mượt mà của Fisher có thể được điều chỉnh theo các sản phẩm và khung thời gian khác nhau để tìm sự kết hợp thông số tối ưu.

Phân tích rủi ro

  1. Là một chiến lược theo xu hướng, nó sẽ tích lũy tổn thất nhỏ trong các giai đoạn giới hạn phạm vi.

  2. Fisher Transform không hiệu quả cho các tình huống cực đoan. Khi thị trường ở trong một trạng thái trong một thời gian dài, các giá trị Fisher sẽ tiếp tục lệch khỏi vùng trung lập, trong trường hợp đó chiến lược nên bị đình chỉ.

  3. Thời gian ATR và nhân ATR nên được thiết lập hợp lý để đảm bảo đủ đệm cho stop loss.

  4. Việc bỏ qua chi phí giao dịch sẽ khiến các giao dịch có lợi nhuận mất tiền. Chi phí giao dịch của sản phẩm nên được xem xét và lấy lợi nhuận điều chỉnh phù hợp.

  5. Phải có sự tham gia thị trường lâu dài để chiến lược nhận ra lợi thế của nó. Đảm bảo đủ vốn để hỗ trợ giao dịch dài hạn và duy trì tư duy ổn định.

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

  1. Điều chỉnh thời gian ATR, ATR nhân để tối ưu hóa dừng lỗ và lấy lợi nhuận.

  2. Hãy thử các thông số khác nhau của Fisher như thời gian trơn tru để tìm tín hiệu giao dịch ổn định hơn.

  3. Thêm các chỉ số khác như bộ lọc để tránh giao dịch sai khi thị trường không chắc chắn.

  4. Kiểm tra các chiến lược lợi nhuận khác nhau như di chuyển, một phần, ATR trailing, vv để cải thiện lợi nhuận.

  5. Tối ưu hóa các chiến lược quản lý vốn như phân số cố định, công thức Kelly vv để tăng tỷ lệ lợi nhuận / rủi ro.

  6. Tối ưu hóa chi phí giao dịch, giữ lợi nhuận cho các vị trí nhỏ.

Kết luận

Chiến lược này tích hợp các lợi thế của SuperTrend, Fisher Transform và các chỉ số khác để hình thành một xu hướng ổn định sau chiến lược giao dịch dài hạn. Thông qua việc dừng lỗ, lấy lợi nhuận và quản lý rủi ro, nó có thể đạt được tỷ lệ phần thưởng rủi ro tốt. Chiến lược cần tối ưu hóa thêm các thông số, lọc tín hiệu, quản lý vốn v.v. để cải thiện hiệu suất thực tế. Nhưng logic tổng thể là mạnh mẽ và đáng được xác minh thực tế và tối ưu hóa liên tục. Nếu quản lý suy nghĩ về lợi nhuận và rủi ro đúng cách, chiến lược có tiềm năng đạt được lợi nhuận lâu dài ổn định.


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

//@version=5
strategy("Supertrend and Fisher_LONG", overlay=true)

//This block is for  Fisher Transformation Calculation.
len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you.
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]

// Buy condition for Fisher transformation.
buy_signal = (fish1 < -2.5) and (fish1 > fish2)
durum = 0 //just for the situation.

if (buy_signal)
    durum := 1 // now it changes from 0 to 1.

// Supertrend indicator inputs and calculations (same as in the indicator)
Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance 
RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it
changeATR = input(title='Change ATR Calculation Method ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Calculate position size based on risk amount
riskPerContract = atr * Multiplier
contracts = RiskAmount / (riskPerContract * syminfo.mintick)

//short signal condition
buySignal = trend == 1 and trend[1] == -1 and durum == 1

plotshape(buySignal, title='Buy Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

// variables
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float atr1 = na
var float takeProfit2 = na
var float takeProfit3 = na

//it calculates the stop level and reward profit levels using atr.
if (buySignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice - atr1 * Multiplier
    contracts := entryPrice / (entryPrice - stopLoss) * RiskAmount / entryPrice
    takeProfit := entryPrice + atr1 * Multiplier
    takeProfit2 := entryPrice + 2 * atr1 * Multiplier
    takeProfit3 := entryPrice + 3 * atr1 * Multiplier

if (buySignal)
    strategy.entry("Buy", strategy.long, qty=contracts)

// 
if (close <= stopLoss)
    strategy.close("Buy", comment="Stop Loss Hit")
else if (close >= takeProfit)
    strategy.close("Buy", comment="Take Profit Hit")

// draw the stop, entry and profit levels
plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr)
plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr)
plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)


Thêm nữa