Chiến lược đảo ngược động lực thị trường

Tác giả:ChaoZhang, Ngày: 2024-02-29 15:10:11
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số Supertrend và Fisher Transform để tìm kiếm các cơ hội ngắn hạn khi thị trường đảo ngược. Nó có thể điều chỉnh các tham số của Supertrend và Fisher Transform cho các loại tiền điện tử, cổ phiếu và thị trường khác nhau. Khi tín hiệu bán xuất hiện, nó cho thấy kích thước vị trí, mức dừng lỗ và lấy lợi nhuận. Bạn cũng có thể thay đổi số tiền rủi ro.

Chiến lược logic

Chiến lược này đầu tiên tính toán biến đổi Fisher với 10 giai đoạn. Khi đường Fisher vượt qua 2.5 từ dưới, một tín hiệu bán được tạo ra. Đồng thời, nó tính toán phạm vi trung bình thực sự (ATR) 10 giai đoạn như kênh cho siêu xu hướng. Khi giá vượt qua dưới đường ray trên, một tín hiệu bán được tạo ra. Vì vậy, chiến lược kết hợp biến đổi Fisher và kênh siêu xu hướng để nắm bắt các cơ hội ngắn khi thị trường đảo ngược.

Cụ thể, khi giá đóng hiện tại nằm dưới đường ray phía trên trước và giá đóng trước đó nằm trên đường ray phía dưới của kênh Supertrend, nó xác định thị trường đã đảo ngược và tạo ra tín hiệu bán.

Vì vậy, chiến lược đòi hỏi cả hai sự xác định đảo ngược của Supertrend và Fisher Transform để tạo ra tín hiệu bán cuối cùng.

Ưu điểm

Chiến lược kết hợp kênh Supertrend và Fisher Transform, có thể nắm bắt chính xác hơn các điểm đảo ngược của thị trường. so với việc sử dụng Supertrend hoặc Fisher một mình, nó có thể giảm các tín hiệu sai và tăng tính ổn định của chiến lược.

Ngoài ra, chiến lược cung cấp tính linh hoạt để điều chỉnh các thông số của Supertrend và Fisher. Người dùng có thể chọn các kết hợp thông số tốt nhất cho các thị trường và sản phẩm khác nhau để phù hợp với thị trường một cách có mục đích. Đây là một chiến lược tối ưu hóa có thể tùy chỉnh.

Chiến lược cũng cung cấp quản lý số tiền rủi ro. Người dùng có thể điều chỉnh vốn rủi ro cho mỗi lệnh để đáp ứng nhu cầu quản lý rủi ro của riêng họ. Đồng thời, nó tự động tính toán mức dừng lỗ và lợi nhuận để đạt được tỷ lệ rủi ro-lợi nhuận tốt.

Rủi ro

Chiến lược chủ yếu dựa trên kênh Supertrend để xác định cấu trúc thị trường. Khi xu hướng kéo dài trong một thời gian dài, Supertrend có thể thất bại. Trong trường hợp này, thời gian hoặc nhân ATR của kênh nên được tăng thích hợp.

Ngoài ra, Fisher Transform có xu hướng tạo ra tín hiệu sai hoặc tín hiệu sớm dễ dàng.

Ngoài ra, tỷ lệ thắng tổng thể của các chiến lược đảo ngược có thể bị giới hạn. Nó nên kết hợp với các chỉ số theo xu hướng để tránh mở các vị trí trong các vùng giới hạn phạm vi hoặc tham gia sau khi xu hướng trở nên rõ ràng hơn.

Hướng dẫn cải thiện

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Tối ưu hóa thời gian ATR và nhân ATR của Supertrend cho sự kết hợp thông số tốt nhất dựa trên các sản phẩm và điều kiện thị trường khác nhau.

  2. Tối ưu hóa thời gian của Fisher để làm mịn đường cong và ngăn chặn tín hiệu sai.

  3. Thêm Moving Averages hoặc Bollinger Bands làm chỉ số phụ để tránh mở các vị trí trên các thị trường dao động.

  4. Kết hợp biến đổi Fisher trên các khung thời gian khác nhau để đạt được phán đoán đảo ngược ổn định hơn.

  5. Thêm các mô-đun quản lý vị trí như tỷ lệ đòn bẩy, kích thước vị trí, các quy tắc bổ sung, v.v. để kiểm soát rủi ro.

  6. Kết hợp các phương pháp học máy để đạt được tối ưu hóa tham số tự động và phù hợp chiến lược.

Kết luận

Chiến lược này tích hợp Supertrend và Fisher Transform với tính linh hoạt để thích nghi với các sản phẩm khác nhau bằng cách điều chỉnh tham số, so với các chiến lược chỉ số duy nhất. Nó đạt được sự đánh giá tín hiệu đáng tin cậy hơn và kiểm soát rủi ro. Với sự cải thiện liên tục, chiến lược hứa hẹn sẽ tiếp tục cải thiện sự ổn định và lợi nhuận. Đây là một chiến lược chất lượng cao đáng theo dõi và tích lũy dài hạn.


/*backtest
start: 2024-02-21 00:00:00
end: 2024-02-27 03:00:00
period: 2m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_SHORT", 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]

// Sell condition for Fisher transformation.
sell_signal = (fish1 > 2.5) and (fish2 > fish1)
durum = 0 //just for the situation.

if (sell_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
sellSignal = trend == -1 and trend[1] == 1 and durum == -1

plotshape(sellSignal, title='Sell Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) //shows the signal.

// 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 (sellSignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice + atr1 * Multiplier
    contracts := entryPrice / (stopLoss - entryPrice) * RiskAmount / entryPrice
    takeProfit := entryPrice - atr1 * Multiplier
    takeProfit2 := entryPrice - 2 * atr1 * Multiplier
    takeProfit3 := entryPrice - 3 * atr1 * Multiplier

if (sellSignal)
    strategy.entry("Sell", strategy.short, qty=1)

// 
if (close >= stopLoss)
    strategy.close("Sell", comment="Stop Loss Hit")
else if (close <= takeProfit)
    strategy.close("Sell", 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