Chiến lược giao dịch ngắn hạn theo xu hướng


Ngày tạo: 2023-11-16 11:11:32 sửa đổi lần cuối: 2023-11-16 11:11:32
sao chép: 0 Số nhấp chuột: 667
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch ngắn hạn theo xu hướng

Tổng quan

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

Nguyên tắc chiến lược

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

Chỉ số WOW được đánh giá theo vị trí của thực thể trong giá. Nếu vị trí của thực thể gần đường đua, nó là đi lên; Nếu gần đường đua, nó là đi xuống.

Chỉ số BMA được sử dụng để đánh giá xu hướng dựa trên mối quan hệ dư thừa của SMA, nếu giá đóng cửa trên SMA phá vỡ giá mở cửa, SMA là lạc quan và giảm giá.

Chỉ số BarColor được đánh giá theo xu hướng dựa trên màu sắc của đường K, nhiều đường dương liên tiếp là lên và đường âm là xuống.

Chỉ số SuperTrend đánh giá xu hướng giá dựa trên phạm vi biến động trung bình, giá là lạc quan ở trên đường ray và giảm ở dưới đường ray.

Chỉ số DI là để đánh giá xu hướng dựa trên mối quan hệ giữa kích thước và kích thước của động lực đa đầu, động lực đa đầu lớn hơn động lực vô đầu là lạc quan, ngược lại là đi xuống.

Chỉ số TTS đánh giá xu hướng nhiều không gian dựa trên mối quan hệ giữa giá và vị trí của đường trung bình.

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

Các chỉ số WTO đánh giá xu hướng dựa trên sự chênh lệch của chỉ số biến động.

Sau đó, chiến lược sẽ thống kê số lượng đà đi xuống của 8 chỉ số và vẽ các đường hỗ trợ và kháng cự giảm giá SILA theo cấp độ dựa trên số lượng đà đi xuống của 8 chỉ số. Số lượng đường hỗ trợ và kháng cự càng nhiều, tín hiệu xu hướng càng mạnh.

Khi một số chỉ số tăng, nếu giá đóng cửa nằm trên đường hỗ trợ ở mức thấp nhất, nó sẽ tạo ra một tín hiệu mua; khi một số chỉ số giảm, nếu giá đóng cửa nằm dưới đường kháng cự ở mức thấp nhất, nó sẽ tạo ra một tín hiệu bán.

Ngoài ra, chiến lược này cũng sử dụng hình dạng đường K để đánh giá cơ hội điều chỉnh ngắn hạn, tìm kiếm điểm vào thuận lợi hơn khi xu hướng đảo ngược.

Lợi thế chiến lược

  1. Kết hợp nhiều chỉ số để đánh giá xu hướng, tăng độ chính xác của đánh giá

Chiến lược này không phụ thuộc vào chỉ số duy nhất, mà sử dụng tổng hợp 8 chỉ số đánh giá xu hướng phổ biến, đánh giá xu hướng đa chiều, có thể nâng cao độ chính xác và độ tin cậy của phán đoán.

  1. Hệ thống SILA vẽ kháng cự hỗ trợ phân cấp, nhận ra tín hiệu xu hướng mạnh mẽ

Chiến lược này dựa trên các tín hiệu đi hay xuống của nhiều chỉ số, sử dụng hệ thống SILA để vẽ nhiều mức hỗ trợ và kháng cự. Số lượng đường càng nhiều, tín hiệu xu hướng càng mạnh. Điều này có thể giúp các nhà giao dịch nhận biết thêm về sức mạnh của tín hiệu.

  1. Kết hợp hình dạng K để tìm cơ hội gọi lại, điểm vào sân tốt hơn

Chiến lược này không chỉ dựa trên các chỉ số xu hướng, mà còn kết hợp với hình dạng K để tìm cơ hội điều chỉnh ngắn hạn, vào điểm thay đổi xu hướng, có thể giành được vị trí vào điểm tốt hơn.

Rủi ro chiến lược

  1. Có thể có sự khác biệt giữa nhiều chỉ số

Chiến lược này sử dụng nhiều chỉ số, trong một số trường hợp, có thể có sự phân biệt giữa các chỉ số này, cần người giao dịch cân nhắc, làm tăng khó khăn trong việc ra quyết định.

  1. Cài đặt tham số chỉ số có thể cần tối ưu hóa

Nhiều chỉ số trong chiến lược này được sử dụng các tham số mặc định, trong thực tế, các tham số có thể cần được tối ưu hóa để có hiệu quả tốt nhất.

  1. Cần xem xét rủi ro hệ thống

Trong trường hợp xảy ra một sự kiện Black Swan quan trọng, rủi ro hệ thống có thể dẫn đến việc chỉ số kỹ thuật thông thường không hoạt động và cần chú ý đánh giá rủi ro hệ thống của thị trường.

  1. Rủi ro rút lui

Việc rút lui theo xu hướng có thể lớn hơn trong giai đoạn mở rộng, cần chú ý kiểm soát quy mô giao dịch đơn lẻ để hạn chế rút lui.

Hướng tối ưu hóa chiến lược

  1. Tối ưu hóa kiểm tra các tham số chỉ số

Các tham số của các chỉ số như độ dài chu kỳ, kích thước số, v.v. có thể được tối ưu hóa bằng cách sử dụng phương pháp có hệ thống hơn để tìm kiếm sự kết hợp tham số tốt nhất.

  1. Tăng Hạn chế

Bạn có thể cân nhắc thêm Stop Loss di động hoặc Stop Loss phần trăm để kiểm soát rút lui.

  1. Chỉ số kết hợp

Có thể đưa ra các chỉ số định lượng như MAVP, OBV và các chỉ số xu hướng để tăng độ chính xác của quyết định chiến thuật.

  1. Tối ưu hóa quản lý vị trí

Có thể nghiên cứu tỷ lệ giữ vị trí trong các giai đoạn thị trường khác nhau để tăng vị trí khi xu hướng rõ ràng hơn.

Tóm tắt

Chiến lược này Overall là một chiến lược giao dịch đường ngắn theo dõi xu hướng đa chỉ số. Nó sử dụng nhiều chỉ số để đánh giá hướng xu hướng, sử dụng hệ thống SILA để nhận ra cường độ tín hiệu và hỗ trợ tối ưu hóa tham gia hình dạng K. Chiến lược này có thể giúp cải thiện độ chính xác của phán đoán, nhưng cần chú ý đến rủi ro khác biệt của các chỉ số khác nhau. Bước tiếp theo có thể cải thiện thêm chiến lược này thông qua các phương pháp tối ưu hóa tham số, tối ưu hóa dừng lỗ, kết hợp năng lượng và các phương pháp khác.

Mã nguồn chiến lược
/*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)