
Chiến lược này kết hợp với việc sử dụng các chỉ số siêu xu hướng và chuyển đổi Fisher để tìm kiếm cơ hội short-line khi thị trường đảo ngược. Nó có thể áp dụng cho các đồng tiền điện tử, cổ phiếu và thị trường khác nhau bằng cách điều chỉnh các tham số của siêu xu hướng và chuyển đổi Fisher.
Chiến lược này đầu tiên tính toán biến đổi Fibonacci trong 10 chu kỳ. Khi đường biến đổi Fibonacci vượt 2,5 từ mức thấp, nó tạo ra tín hiệu bán. Đồng thời, nó tính toán chiều dài sóng thực trung bình trong 10 chu kỳ làm kênh siêu xu hướng.
Cụ thể, nó tính toán giá đóng cửa đường K hiện tại ở dưới đường dẫn siêu của chu kỳ trước và đánh giá là một sự đảo ngược thị trường khi chu kỳ trước nằm trên đường dẫn dưới và tạo ra tín hiệu bán. Đồng thời, tính toán chỉ số biến đổi giá ròng khi đường biến đổi giá ròng vượt quá mức thấp 2.5 và giá trị biến đổi giá ròng của chu kỳ trước thấp hơn giá trị hiện tại, đánh giá là một sự đảo ngược xu hướng và tạo ra tín hiệu bán.
Vì vậy, chiến lược này cần phải đáp ứng hai điều kiện đồng thời để xác định sự đảo ngược của thị trường và sự thay đổi của Fisher để xác định sự đảo ngược của xu hướng để tạo ra tín hiệu bán cuối cùng.
Chiến lược này kết hợp với kênh siêu xu hướng và chỉ số chuyển đổi của Fisher, có thể nắm bắt chính xác hơn các điểm đảo ngược của thị trường. Nó có thể làm giảm tín hiệu sai, do đó cải thiện sự ổn định của chiến lược, so với việc sử dụng siêu xu hướng hoặc chuyển đổi của Fisher một mình.
Ngoài ra, chiến lược này cung cấp sự linh hoạt trong việc điều chỉnh các tham số chuyển đổi của kênh siêu xu hướng và Fisher. Người dùng có thể chọn kết hợp tham số tốt nhất cho các thị trường và giống khác nhau, do đó phù hợp với thị trường. Đây là một chiến lược có thể được tùy chỉnh và tối ưu hóa.
Chiến lược này cũng cung cấp quản lý số tiền rủi ro. Người dùng có thể dễ dàng điều chỉnh số tiền rủi ro cho mỗi khoản để đáp ứng yêu cầu quản lý rủi ro của mình. Đồng thời, nó cũng tự động tính toán mức dừng lỗ và mục tiêu thu lợi nhuận, có thể đạt được tỷ lệ lợi nhuận tốt hơn.
Chiến lược này chủ yếu dựa vào kênh siêu xu hướng để xác định cấu trúc thị trường. Khi xu hướng kéo dài, siêu kênh có thể bị hỏng. Trong trường hợp này, tham số chu kỳ của kênh hoặc nhân ATR nên được mở rộng thích hợp.
Ngoài ra, chuyển đổi của Fisher dễ tạo ra tín hiệu sai hoặc tín hiệu sớm hơn. Khi thị trường biến động lớn, bạn nên điều chỉnh các tham số chu kỳ của chuyển đổi của Fisher một cách thích hợp, lọc ra một số tiếng ồn.
Ngoài ra, chiến thắng tổng thể của chiến lược đảo ngược có thể là hạn chế. Nó nên được kết hợp với các chỉ số theo dõi xu hướng, tránh mở vị trí trong khu vực chấn động hoặc tham gia lại sau khi xu hướng rõ ràng hơn.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa số chu kỳ ATR và ATR của kênh siêu xu hướng, chọn các tham số tốt nhất cho các giống và điều kiện thị trường khác nhau
Tối ưu hóa các tham số chu kỳ của chuyển đổi của Fischer, làm mỏng đường cong giảm tiếng ồn, ngăn chặn các tín hiệu sai
Thêm đường trung bình di chuyển hoặc Brinks làm chỉ số hỗ trợ để tránh thị trường chấn động
Kết hợp các biến đổi của Fisher với các chu kỳ thời gian khác nhau, để có được phán đoán đảo ngược ổn định và đáng tin cậy hơn
Thêm các mô-đun quản lý vị trí, chẳng hạn như tỷ lệ đòn bẩy, số vị trí, quy tắc tăng vị trí, v.v., để kiểm soát rủi ro
Kết hợp các phương pháp như học máy để thực hiện tối ưu hóa tự động các tham số và phù hợp với chiến lược
Chiến lược này kết hợp các chỉ số siêu xu hướng và biến đổi của Fisher, có một số tính linh hoạt trong việc đánh giá sự đảo ngược của thị trường và có thể điều chỉnh các tham số để thích ứng với các giống khác nhau. Nó thực hiện các phán đoán tín hiệu và kiểm soát rủi ro đáng tin cậy hơn so với chỉ số đơn lẻ. Bằng cách tối ưu hóa liên tục, chiến lược này có khả năng tăng cường sự ổn định và tăng lợi nhuậ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)