Chiến lược đột phá động lượng dựa trên đường trung bình động và phán đoán chu kỳ


Ngày tạo: 2024-01-23 14:51:27 sửa đổi lần cuối: 2024-01-23 14:51:27
sao chép: 2 Số nhấp chuột: 615
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá động lượng dựa trên đường trung bình động và phán đoán chu kỳ

Tổng quan

Chiến lược này tính toán đường trung bình EMA của các chu kỳ khác nhau để xác định giai đoạn kinh tế hiện tại, sau đó kết hợp với ATR để đưa ra phán đoán phá vỡ, để đạt được khả năng cao theo dõi xu hướng giao dịch.

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

  1. Tính toán đường 5 ngày, đường 20 ngày, đường 40 ngày 3 đường trung bình EMA
  2. Bằng cách so sánh các mối quan hệ lớn của 3 đường trung bình, đánh giá hiện tại của thị trường trong một trong 6 giai đoạn khác nhau của chu kỳ
    • Dòng 5 ngày> Dòng 20 ngày> Dòng 40 ngày là chu kỳ 1.
    • Dòng 20 ngày > Dòng 5 ngày > Dòng 40 ngày là chu kỳ 2. ……
  3. Sau khi xác định chu kỳ, tính ATR và đặt ATR nhân cho tiêu chuẩn đột phá
  4. Một tín hiệu mua được tạo ra khi giá vượt quá ATR trailing stop của BAR trước đó
  5. Một dấu hiệu bán được tạo ra khi giá giảm xuống một BAR ATR trailing stop
  6. Với sự kết hợp này, bạn có thể nhận được các giao dịch theo dõi xu hướng có xác suất cao.

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

  1. Tính phân tích chu kỳ làm tăng độ tin cậy của tín hiệu

Bằng cách đánh giá mối quan hệ kích thước giữa các đường trung bình EMA khác nhau, bạn có thể đánh giá hiệu quả giai đoạn chu kỳ hiện tại của thị trường và tránh phát sinh tín hiệu sai trong chu kỳ không phù hợp.

  1. ATR đột phá để lọc tín hiệu giả

Chỉ số ATR có thể thể hiện hiệu quả sự biến động của thị trường, thiết lập ATR của một số nhân như là tiêu chuẩn đột phá, có thể lọc ra nhiều tín hiệu đột phá giả.

  1. Phân tích kết hợp tạo ra cơ hội giao dịch có khả năng cao

Sự kết hợp hữu cơ của phán đoán chu kỳ và phán đoán đột phá ATR làm tăng đáng kể xác suất tạo ra tín hiệu, do đó cũng làm tăng xác suất lợi nhuận của giao dịch.

Rủi ro chiến lược

  1. Các tham số tối ưu hóa khó hơn

Chính sách bao gồm nhiều tham số, do đó, việc tối ưu hóa là rất khó khăn, và việc đặt tham số không đúng có thể ảnh hưởng đến hiệu suất của chính sách.

  1. Có một sự chậm trễ.

Trong những biến động nhanh chóng của thị trường, cả đường trung bình EMA và chỉ số ATR đều bị tụt hậu, có thể tạo ra tín hiệu sai hoặc bỏ lỡ cơ hội.

  1. Cần có một sự ngăn chặn nghiêm ngặt

Bất kỳ chỉ số kỹ thuật nào cũng khó tránh hoàn toàn các tín hiệu sai, cần thiết phải thiết lập lỗ hổng nghiêm ngặt để kiểm soát rủi ro.

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

  1. Tiếp tục tối ưu hóa tham số

Các tham số được tối ưu hóa thông qua dữ liệu lịch sử phong phú hơn để tìm các tham số kết hợp tốt nhất.

  1. Tăng khả năng thích ứng

Có thể xem xét điều chỉnh các tham số ATR tự động theo biến động thị trường để tăng khả năng thích ứng của chiến lược.

  1. Kết hợp với các chỉ số khác

Có thể thử kết hợp với các chỉ số khác như tỷ lệ dao động, số lượng giao dịch để hỗ trợ phán đoán, cải thiện chất lượng tín hiệu.

Tóm tắt

Chiến lược này thiết lập tiêu chuẩn phá vỡ động lực thông qua chu kỳ phán quyết đường trung bình EMA và chỉ số ATR, để đạt được giao dịch theo dõi xu hướng có xác suất cao. Có các lợi thế như chu kỳ phán quyết, lọc tín hiệu giả, cải thiện chất lượng tín hiệu. Nhưng cũng có rủi ro tối ưu hóa tham số rất khó, tồn tại sự trì trệ, cần tối ưu hóa tham số hơn nữa, tăng khả năng thích ứng để cải thiện chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 15m
basePeriod: 5m
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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy",overlay = true)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter