Chiến lược cơ bản siêu xu hướng là một chiến lược giao dịch thuật toán đáng tin cậy và có lợi nhuận dựa trên ba chỉ số mạnh mẽ: chỉ số siêu xu hướng (ATR), chỉ số tương đối mạnh (RSI) và chỉ số di chuyển trung bình (EMA). Chiến lược này nhằm xác định hướng và cường độ của xu hướng thị trường, vào thị trường tại điểm nhập cảnh tối ưu và thoát khỏi thị trường khi đạt đến điểm dừng lỗ hoặc điểm dừng.
Chiến lược này sử dụng chỉ số siêu xu hướng để xác định liệu giá có đang trong xu hướng tăng hay giảm. Chỉ số siêu xu hướng dựa trên chiều dài sóng thực trung bình và một yếu tố, xu hướng tăng khi giá cao hơn siêu xu hướng và xu hướng giảm khi giá thấp hơn siêu xu hướng.
Chỉ số tương đối mạnh được sử dụng để phát hiện tình trạng quá nóng và quá mua hoặc quá bán. Khi RSI cao hơn 50, thị trường là mạnh, ngược lại là yếu. RSI có thể lọc các đột phá giả.
Đường trung bình di chuyển chỉ số được sử dụng để xác định hướng của xu hướng dài hạn. Khi giá cao hơn EMA là xu hướng tăng và khi thấp hơn là xu hướng giảm. Nó có thể được sử dụng để xác định hướng giao dịch.
Các tín hiệu giao dịch cho chiến lược này là:
Nhiều đầu vào: giá cao hơn siêu xu hướng và RSI cao hơn 50 và giá cao hơn EMA Xuất hiện nhiều đầu: Giá đóng cửa dưới xu hướng siêu hoặc dừng hoặc dừng
Bước vào đầu trống: Hạn giá khi giá dưới siêu xu hướng và RSI dưới 50 và giá dưới EMA
Xuất hiện đầu không: giá đóng cửa trên siêu xu hướng hoặc dừng hoặc dừng
Stop loss và stop stop có thể được thiết lập như là phần trăm của giá nhập cảnh.
Chiến lược này có những ưu điểm sau:
Sử dụng ba chỉ số kết hợp để xác định hướng đi
Chỉ số siêu xu hướng có thể xác định rõ xu hướng tăng và giảm
Chỉ số RSI có thể lọc các đợt phá vỡ giả để tránh quá mua quá bán
EMA có thể được sử dụng để xác định xu hướng lớn
Các tín hiệu chiến lược đơn giản, rõ ràng và dễ sử dụng
Có thể tùy chỉnh chu kỳ ATR, tham số RSI và chu kỳ EMA để tối ưu hóa
Có thể thiết lập Stop Loss Stop để kiểm soát rủi ro
Có thể chỉ làm thêm hoặc chỉ làm trống để thích ứng với các điều kiện thị trường khác nhau
Có thể sử dụng trong bất kỳ chu kỳ thời gian
Những rủi ro chính của chiến lược này là:
Các chỉ số siêu xu hướng có thể bị tụt hậu và có thể gây thiệt hại khi xu hướng lớn đảo ngược
Cài đặt Stop Loss quá nhỏ có thể không nắm bắt được sự kiện lớn
EMA không thể xác định điểm đảo ngược xu hướng
Không thể đánh giá được sự khác biệt.
Có một mức độ rủi ro biến động và rủi ro giao dịch thời gian
Giải pháp tương ứng:
Kết hợp với các chỉ số khác để đánh giá xu hướng đảo ngược
Tối ưu hóa các tham số dừng lỗ
Kết hợp với các chỉ số khác để đánh giá xu hướng đảo ngược
Kết hợp các chỉ số deviation
Điều chỉnh quản lý vị trí
Chiến lược này có thể được tối ưu hóa bằng cách:
Tối ưu hóa tham số chu kỳ ATR để cân bằng độ nhạy và độ ổn định
Tối ưu hóa các tham số RSI để tăng độ chính xác
Tối ưu hóa chu kỳ EMA để phù hợp với các thị trường khác nhau
Thêm các chỉ số khác để đánh giá sự đảo ngược, như MACD, KD, v.v.
Tăng sự thay đổi trong phán đoán từ chỉ số
Phân tích theo lý thuyết sóng
Các tham số tối ưu hóa động bằng các thuật toán như học máy
Thêm các thuật toán dừng lỗ cao cấp, chẳng hạn như theo dõi dừng lỗ, di chuyển dừng lỗ
Tối ưu hóa quản lý vị trí, thích ứng với thị trường có tỷ lệ biến động khác nhau
Kiểm tra một sự kết hợp phức tạp hơn của các điều kiện ra sân
Chiến lược cơ bản của siêu xu hướng kết hợp các chỉ số siêu xu hướng, RSI và EMA thành một chiến lược theo dõi xu hướng thực tế đơn giản. Nó có thể xác định rõ hướng xu hướng, lọc các tín hiệu giả và xác nhận xu hướng lớn.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JS_TechTrading
//@version=5
// strategy("Supertrend", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false)
// group string////
var string group_text000="Choose Strategy"
var string group_text0="Supertrend Settings"
var string group_text0000="Ema Settings"
var string group_text00="Rsi Settings"
var string group_text1="Backtest Period"
var string group_text2="Trade Direction"
// var string group_text3="Quantity Settings"
var string group_text4="Sl/Tp Settings"
////////////////////
option_ch=input.string('Pullback',title = "Type Of Strategy",options =['Pullback','Simple'])
//atr period input supertrend
atrPeriod = input(10, "ATR Length",group = group_text0)
factor = input.float(3.0, "Factor", step = 0.01,group=group_text0)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
long=direction < 0 ? supertrend : na
short=direction < 0? na : supertrend
longpos=false
shortpos=false
longpos :=long?true :short?false:longpos[1]
shortpos:=short?true:long?false:shortpos[1]
fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1])
fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1])
//Ema 1
on_ma=input.bool(true,"Ema Condition On/Off",group=group_text0000)
ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000)
ma_src = input.source(close, title="Ema Source",group = group_text0000)
ma_out = ta.ema(ma_src, ma_len)
ma_buy=on_ma?close>ma_out?true:false:true
ma_sell=on_ma?close<ma_out?true:false:true
// rsi indicator and condition
// Get user input
en_rsi = input.bool(true,"Rsi Condition On/Off",group = group_text00)
rsiSource = input(title='RSI Source', defval=close,group = group_text00)
rsiLength = input(title='RSI Length', defval=14,group = group_text00)
rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00)
rsiOversold = input(title='RSI SELL Level', defval=50,group = group_text00)
// Get RSI value
rsiValue = ta.rsi(rsiSource, rsiLength)
rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true
rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true
// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell:na
//backtest engine
start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1)
end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1)
time_cond =true
// Make input option to configure trade direction
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2)
// Translate input into trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
strategy.entry('long',direction = strategy.long)
if sell_cond and shortOK and time_cond and strategy.position_size==0
strategy.entry('short',direction =strategy.short)
// fixed percentage based stop loss and take profit
// User Options to Change Inputs (%)
stopPer = input.float(1.0,step=0.10, title='Stop Loss %',group =group_text4) / 100
takePer = input.float(1.0,step =0.10, title='Take Profit %',group =group_text4) / 100
// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0
strategy.exit(id='Close Long',stop=longStop, limit=longTake)
if strategy.position_size < 0
strategy.exit(id='Close Short',stop=shortStop, limit=shortTake)
//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 ? longStop : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 ? shortStop :na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size > 0 ? longTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 ? shortTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Short Take Profit')
//