Chiến lược giao dịch đột phá chỉ báo động lượng


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

Tổng quan

Chiến lược này sử dụng chỉ số động lực Brin để giao dịch phá giá, chủ yếu để xác định liệu giá có phá vỡ Brin và đi xuống đường hay không, để phát tín hiệu mua và bán.

Nguyên tắc

Chiến lược này chủ yếu dựa trên các chỉ số Bollinger Bands để xác định xu hướng. Bollinger Bands là các vùng có hình dải được tạo thành bởi đường trung bình di chuyển và chênh lệch chuẩn của nó.

Cụ thể, chiến lược này đầu tiên tính giá cao nhất, giá thấp nhất trong n ngày, và tính giá trung bình (((giá cao nhất + giá thấp nhất) / 2). Sau đó tính trung bình chuyển động có trọng số từ giá đóng cửa đến giá trung bình để tạo thành đường trung tâm của Brin, trên đường trung tâm mỗi lần thêm 2 lần chênh lệch chuẩn để tạo thành đường lên xuống.

Nếu giá đóng cửa phá vỡ đường đua, cho thấy đang có xu hướng tăng; nếu phá vỡ đường đua, cho thấy đang có xu hướng giảm. Khi phá vỡ đường đua, hãy làm nhiều hơn, khi phá vỡ đường đua, hãy làm trống.

Ngoài ra, chiến lược này cũng giới thiệu một cơ chế mở vị trí ngược. Khi giá phá vỡ đường dây Bollinger, nếu MACD giảm, nó sẽ thực hiện một hoạt động thị trường ngược.

Ưu điểm

  1. Sử dụng dây chuyền Brin để đánh giá xu hướng, có khả năng theo dõi xu hướng.

  2. Thiết kế mở cửa ngược có thể tạo ra lợi nhuận ngược.

  3. Các tham số có thể được tùy chỉnh như chu kỳ băng tần, nhân số chênh lệch tiêu chuẩn, để thích ứng với các giao dịch khác nhau.

  4. Có thể đóng lại và mở lại để giảm rủi ro

Rủi ro và giải pháp

  1. Brinband thường được sử dụng cho các cổ phiếu có biến động cao, có thể không phù hợp với các loại dài hạn như Resources hoặc chỉ số. Bạn có thể kiểm tra hiệu quả của các tham số khác nhau về chu kỳ.

  2. Tín hiệu đột phá có thể xảy ra đột phá giả. Có thể kết hợp các yếu tố khác để lọc tín hiệu.

  3. Việc mở cửa ngược có thể mở rộng lỗ hơn nữa. Bạn có thể tắt module mở cửa ngược.

  4. Khả năng rút lui có thể lớn hơn.

Hướng tối ưu hóa

  1. Có thể xem xét thêm các bộ lọc xu hướng để tránh thị trường biến động không rõ ràng về hướng.

  2. Bạn có thể thử nghiệm số nhân chênh lệch chuẩn của lằn Brin để tìm tham số phù hợp hơn.

  3. Có thể đưa ra chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ.

  4. Có thể tối ưu hóa logic mở và tăng vị thế, làm cho tín hiệu giao dịch rõ ràng hơn.

Tóm tắt

Chiến lược này dựa trên các chỉ số Brin, đánh giá giá trị của xu hướng phá vỡ để giao dịch. Sử dụng các tham số đơn giản có thể thực hiện các chiến lược theo dõi xu hướng cơ bản. Tuy nhiên, có một số rủi ro phá vỡ giả, cần phải được lọc với các chỉ số khác.

Overview

This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.

Principles

The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.

Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.

When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.

In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.

Advantages

  1. Using Bollinger Bands to determine trend direction provides certain trend following capability.

  2. Counter-trend design allows profiting from reversals.

  3. Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.

  4. Disable counter-trend trading to reduce risk.

Risks and Mitigations

  1. Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.

  2. Breakout signals may have false breakouts. Can add filters with other indicators.

  3. Counter-trend trading can further increase losses. Can disable counter-trend module.

  4. Drawdowns may be significant. Can adjust position sizing.

Enhancement Opportunities

  1. Consider adding trend filter to avoid whipsaw in non-directional markets.

  2. Test different standard deviation multiples to find optimal parameters.

  3. Incorporate stop loss to control single trade loss.

  4. Optimize entry and add-on logic for clearer trading signals.

Summary

The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.

Mã nguồn chiến lược
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()