Xu hướng sau chiến lược giao dịch ngắn hạn

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

img

Tổng quan

Chiến lược này là một chiến lược giao dịch ngắn hạn xác định xu hướng dựa trên nhiều chỉ số. Nó kết hợp 8 chỉ số bao gồm WOW, BMA, BarColor, SuperTrend, DI, TTS, RSI và WTO để xác định hướng xu hướng và đưa ra quyết định giao dịch phù hợp.

Chiến lược logic

Chiến lược đầu tiên tính toán và đánh giá hướng xu hướng của 8 chỉ số - WOW, BMA, BarColor, SuperTrend, DI, TTS, RSI và WTO.

Chỉ số WOW đánh giá xu hướng tăng hoặc giảm dựa trên vị trí cơ thể.

Chỉ số BMA đánh giá xu hướng theo mối quan hệ giữa SMA mở và đóng.

Chỉ số BarColor đánh giá xu hướng theo màu của nến. Nến màu vàng liên tục cho thấy tăng trong khi nến màu đen cho thấy giảm.

Chỉ số SuperTrend đánh giá xu hướng dựa trên vị trí giá so với phạm vi trung bình. Giá trên dải trên cho thấy tăng trong khi giá dưới dải dưới cho thấy giảm.

Chỉ số DI đánh giá xu hướng theo mối quan hệ giữa chuyển động theo hướng tích cực và tiêu cực.

Chỉ số TTS đánh giá xu hướng dựa trên vị trí giá so với trung bình động.

Chỉ số RSI đánh giá hướng xu hướng dựa trên mức độ chỉ số sức mạnh tương đối.

Chỉ số WTO đánh giá hướng xu hướng dựa trên dao động xu hướng sóng.

Sau đó, chiến lược đếm số tín hiệu tăng từ 8 chỉ số và vẽ đường hỗ trợ và kháng cự SILA phù hợp.

Khi nhiều chỉ số cho thấy tăng, tín hiệu mua được tạo ra khi đóng ở trên đường hỗ trợ thấp nhất. Khi nhiều chỉ số cho thấy giảm, tín hiệu bán được tạo ra khi đóng ở dưới đường kháng cự thấp nhất.

Ngoài ra, chiến lược cũng sử dụng các mô hình nến để tìm cơ hội rút lui và cải thiện các điểm nhập cảnh.

Ưu điểm của Chiến lược

  1. Kết hợp nhiều chỉ số cải thiện độ chính xác

Chiến lược sử dụng 8 chỉ số xu hướng chung để xác định xu hướng từ nhiều khía cạnh, do đó cải thiện độ chính xác và độ tin cậy của đánh giá xu hướng.

  1. Hệ thống SILA xác định sức mạnh của tín hiệu

Các đường hỗ trợ / kháng cự SILA phản ánh số lượng tín hiệu tăng / giảm. Nhiều đường chỉ ra tín hiệu mạnh hơn. Điều này giúp các nhà giao dịch đánh giá thêm sức mạnh của tín hiệu giao dịch.

  1. Các mô hình nến cải thiện các điểm nhập cảnh

Chiến lược tìm kiếm các cơ hội rút lui dựa trên các mô hình nến để tìm các điểm vào tốt hơn khi xu hướng đảo ngược.

Rủi ro của chiến lược

  1. Mối xung đột tiềm ẩn giữa các chỉ số

Nhiều chỉ số đôi khi có thể tạo ra các tín hiệu mâu thuẫn, làm cho việc ra quyết định khó khăn hơn.

  1. Các thông số có thể cần tối ưu hóa

Các thông số mặc định có thể không tối ưu. Có thể cần tối ưu hóa thêm để đạt được kết quả tốt nhất.

  1. Xem xét rủi ro hệ thống

Các sự kiện thiên nga đen có thể làm mất hiệu lực các tín hiệu kỹ thuật bình thường.

  1. Nguy cơ rút vốn

Theo xu hướng này có thể dẫn đến việc rút vốn lớn hơn trong thời gian điều chỉnh thị trường.

Cải thiện chiến lược

  1. Tối ưu hóa các thông số chỉ số

Kiểm tra và tối ưu hóa các tham số như thời gian và mức giá trị để tìm kết hợp tham số tối ưu.

  1. Thêm các phương pháp dừng lỗ

Xem xét thêm stop loss di chuyển hoặc phần trăm để kiểm soát rút tiền.

  1. Bao gồm các chỉ số khối lượng

Kết hợp các chỉ số xu hướng với các chỉ số khối lượng như MAVP và OBV để cải thiện các quyết định chiến thuật.

  1. Quản lý kích thước vị trí

Nghiên cứu kích thước vị trí tối ưu cho các giai đoạn thị trường khác nhau và tăng kích thước khi xu hướng trở nên rõ ràng hơn.

Kết luận

Tóm lại, đây là một xu hướng đa chỉ số sau chiến lược giao dịch ngắn hạn. Nó xác định hướng xu hướng bằng cách sử dụng nhiều chỉ số và xác định sức mạnh của tín hiệu với hệ thống SILA, được bổ sung bằng các mẫu nến để cải thiện bước vào. Chiến lược có thể cải thiện độ chính xác nhưng rủi ro của các tín hiệu mâu thuẫn nên được lưu ý.


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

// (c) Noro
//2017

//@version=2

strategy(title="Noro's SILA v1.6L Strategy", shorttitle="SILA v1.6L str", overlay=true)

//settings
sensup = input(5, title="Uptrend-sensivity", minval = -8, maxval = 8)
sensdn = input(5, title="Downtrend-sensivity", minval = -8, maxval = 8)
usewow = input(true, title="Use trend-indicator WOW?")
usebma = input(true, title="Use trend-indicator BestMA?")
usebc = input(true, title="Use trend-indicator BarColor?")
usest = input(true, title="Use trend-indicator SuperTrend?")
usedi = input(true, title="Use trend-indicator DI?")
usetts = input(true, title="Use trend-indicator TTS?")
usersi = input(true, title="Use trend-indicator RSI?")
usewto = input(true, title="Use trend-indicator WTO?")
dist = input(100, title="Distance SILA-lines", minval = 0, maxval = 100)
usetl = input(true, title="Need SILA-lines?")
usebgup = input(true, title="Need uptrend-background?")
usebgdn = input(true, title="Need downtrend-background?")
usealw = input(true, title="Need background always?")
usearr = input(true, title="Need new-trend-arrows?")
useloco = input(true, title="Need locomotive-arrows?")
usemon = input(true, title="Need money?") //joke

// WOW 1.0 method
lasthigh = highest(close, 30)
lastlow = lowest(close, 30)
center = (lasthigh +lastlow) / 2
body = (open + close) / 2
trend1 = body > center ? 1 : body < center ? -1 : trend1[1]
trend2 = center > center[1] ? 1 : center < center[1] ? -1 : trend2[1]
WOWtrend = usewow == true ? trend1 == 1 and trend2 == 1 ? 1 : trend1 == -1 and trend2 == -1 ? -1 : WOWtrend[1] : 0

// BestMA 1.0 method
SMAOpen = sma(open, 30)
SMAClose = sma(close, 30)
BMAtrend = usebma == true ? SMAClose > SMAOpen ? 1 : SMAClose < SMAOpen ? -1 : BMAtrend[1] : 0

// BarColor 1.0 method
color = close > open ? 1 : 0
score = color + color[1] + color[2] + color[3] + color[4] + color[5] + color[6] + color[7]
BARtrend = usebc == true ? score > 5 ? 1 : score < 3 ? -1 : BARtrend[1] : 0

// SuperTrend mehtod
Up = hl2 - (7 * atr(3))
Dn = hl2 + (7 * atr(3))
TrendUp = close[1] > TrendUp[1] ? max(Up, TrendUp[1]) : Up
TrendDown = close[1] < TrendDown[1] ? min(Dn, TrendDown[1]) : Dn
SUPtrend = usest == true ? close > TrendDown[1] ? 1: close < TrendUp[1]? -1 : SUPtrend[1] : 0

//DI method
th = 20
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/14) + TrueRange
SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/14) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/14) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DItrend = usedi == true ? DIPlus > DIMinus ? 1 : -1 : 0

//TTS method (Trend Trader Strategy)
//Start of HPotter's code
//Andrew Abraham' idea
avgTR      = wma(atr(1), 21)
highestC   = highest(21)
lowestC    = lowest(21)
hiLimit = highestC[1]-(avgTR[1] * 3)
loLimit = lowestC[1]+(avgTR[1] * 3)
ret = iff(close > hiLimit and close > loLimit, hiLimit, iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1, iff(close < ret, -1, nz(pos[1], 0))) 
//End of HPotter's code

TTStrend = usetts == true ? pos == 1 ? 1 : pos == -1 ? -1 : TTStrend[1] : 0

//RSI method
RSIMain = (rsi(close, 13) - 50) * 1.5
rt = iff(RSIMain > -10, 1, iff(RSIMain < 10, -1, nz(pos[1], 0))) 
RSItrend = usersi == true ? rt : 0

//WTO ("WaveTrend Oscilator") method by LazyBear
//Start of LazyBear's code
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
tci = ema(ci, 21)
//End of LazyBear's code

WTOtrend = usewto == true ? tci > 0 ? 1 : tci < 0 ? -1 : 0 : 0

//plots
trends = usemon == true ? WOWtrend + BMAtrend + BARtrend + SUPtrend + DItrend + TTStrend + RSItrend + WTOtrend: -1 * (WOWtrend + BMAtrend + BARtrend + SUPtrend + DItrend + TTStrend + RSItrend + WTOtrend)
pricehi = sma(high, 10)
pricelo = sma(low, 10)
per = usetl == 1 ? dist / 10000 : 0

color1 = usetl == true ? trends > 0 ? blue : na : na
plot(pricelo * (1 - per), color=color1, linewidth=1, title="SILA-line")
color2 = usetl == true ? trends > 1 ? blue : na : na
plot(pricelo * (1 - 2 * per), color=color2, linewidth=1, title="SILA-line")
color3 = usetl == true ? trends > 2 ? blue : na : na
plot(pricelo * (1 - 3 * per), color=color3, linewidth=1, title="SILA-line")
color4 = usetl == true ? trends > 3 ? blue : na : na
plot(pricelo * (1 - 4 * per), color=color4, linewidth=1, title="SILA-line")
color5 = usetl == true ? trends > 4 ? blue : na : na
plot(pricelo * (1 - 5 * per), color=color5, linewidth=1, title="SILA-line")
color6 = usetl == true ? trends > 5 ? blue : na : na
plot(pricelo * (1 - 6 * per), color=color6, linewidth=1, title="SILA-line")
color7 = usetl == true ? trends > 6 ? blue : na : na
plot(pricelo * (1 - 7 * per), color=color7, linewidth=1, title="SILA-line")
color8 = usetl == true ? trends > 7 ? blue : na : na
plot(pricelo * (1 - 8 * per), color=color8, linewidth=1, title="SILA-line")

color10 = usetl == true ? trends < 0 ? black : na : na
plot(pricehi * (1 + per), color=color10, linewidth=1, title="SILA-line")
color11 = usetl == true ? trends < -1 ? black : na : na
plot(pricehi * (1 + 2 * per), color=color11, linewidth=1, title="SILA-line")
color12 = usetl == true ? trends < -2 ? black : na : na
plot(pricehi * (1 + 3 * per), color=color12, linewidth=1, title="SILA-line")
color13 = usetl == true ? trends < -3 ? black : na : na
plot(pricehi * (1 + 4 * per), color=color13, linewidth=1, title="SILA-line")
color14 = usetl == true ? trends < -4 ? black : na : na
plot(pricehi * (1 + 5 * per), color=color14, linewidth=1, title="SILA-line")
color15 = usetl == true ? trends < -5 ? black : na : na
plot(pricehi * (1 + 6 * per), color=color15, linewidth=1, title="SILA-line")
color16 = usetl == true ? trends < -6 ? black : na : na
plot(pricehi * (1 + 7 * per), color=color16, linewidth=1, title="SILA-line")
color17 = usetl == true ? trends < -7 ? black : na : na
plot(pricehi * (1 + 8 * per), color=color17, linewidth=1, title="SILA-line")

//background
col = usebgup == true and trends >= sensup ? 1 : usebgdn == true and trends <= (-1 * sensdn) ? -1 : usealw == true ? col[1] : 0
bgcolor = col == 1 ? lime : col == -1 ? red : na
//bgcolor(bgcolor, transp=70)

//arrows
posi = trends >= sensup ? 1 : trends <= (-1 * sensdn) ? -1 : posi[1]
arr = usearr == true ? posi == 1 and posi[1] < 1 ? 1 : posi == -1 and posi[1] > -1 ? -1 : na : na
//plotarrow(arr == 1 ? 1 : na, title="UpArrow", colorup=blue, maxheight=60, minheight=50, transp=0)
//plotarrow(arr == -1 ? -1 : na, title="DnArrow", colordown=blue, maxheight=60, minheight=50, transp=0)

//locomotive
bar = close > open ? 1 : close < open ? -1 : 0
locotop = bar == -1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0
locobot = bar == 1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
entry = useloco == false ? 1 : posi == posi[1] ? (locotop == 1 and posi == -1) or (locobot == 1 and posi == 1) ? 1 : entry[1] : 0
//plotarrow(locobot == 1 and entry[1] == 0 and posi == 1 ? 1 : na, title="UpLocomotive", colorup=yellow, maxheight=60, minheight=50, transp=0)
//plotarrow(locotop == 1 and entry[1] == 0 and posi == -1 ? -1 : na, title="DnLocomotive", colordown=yellow, maxheight=60, minheight=50, transp=0)

longCondition = arr == 1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = arr == -1
if (shortCondition)
    strategy.entry("Short", strategy.short)

Thêm nữa