Tài nguyên đang được tải lên... tải...

Xu hướng theo chiến lược dựa trên đường chéo trung bình động

Tác giả:ChaoZhang, Ngày: 2023-10-24 11:02:52
Tags:

img

Tổng quan

Chiến lược này chủ yếu sử dụng đường chéo vàng và đường chéo chết của đường trung bình chuyển động và bước đột phá của đường trung bình chuyển động để đưa ra quyết định dài và ngắn. Nó đi dài khi đường trung bình chuyển động thời gian ngắn vượt qua đường trung bình chuyển động thời gian dài hơn, và đi ngắn khi đường trung bình chuyển động thời gian ngắn vượt qua đường trung bình chuyển động thời gian dài hơn. Giá đóng cửa đường thông qua đường trung bình chuyển động cũng được sử dụng làm tín hiệu đầu vào.

Nguyên tắc

  1. Tính toán hai đường trung bình động, EMA1 và EMA2, với các khoảng thời gian khác nhau.

  2. Xác định xem EMA1 vượt qua EMA2, nếu có, đi dài.

  3. Xác định xem EMA1 vượt qua dưới EMA2, nếu có, đi ngắn.

  4. Xác định xem giá đóng cửa có vượt qua EMA1 như tín hiệu nhập cảnh hay không.

  5. Cơ chế thoát: đặt lỗ dừng cố định hoặc sử dụng kênh Donchian để đặt lỗ dừng.

Chức năng chính được sử dụng:

  • ema ((): tính toán trung bình động theo cấp số nhân
  • crossover ((): xác định xem EMA1 vượt qua EMA2
  • crossunder ((): xác định xem EMA1 vượt dưới EMA2
  • Rising (() / Falling ((): xác định giá đang tăng hay giảm
  • valuewhen(): trả về các giá trị khác nhau dựa trên điều kiện

Ưu điểm

  1. Logic đơn giản, dễ hiểu và thực hiện.

  2. Sử dụng xu hướng sau đặc điểm của đường trung bình động để theo dõi xu hướng hiệu quả.

  3. Kết hợp bước đột phá giá đóng nến giúp tránh bước đột phá sai.

  4. Sử dụng linh hoạt các kết hợp trung bình động khác nhau thích nghi với các giai đoạn khác nhau.

  5. Cơ chế dừng lỗ kiểm soát rủi ro.

Rủi ro

  1. Thường xuyên chéo vàng và chéo chết trong quá trình củng cố thị trường gây ra những cú sốc.

  2. Các điểm dừng lỗ cố định có thể quá cứng nhắc để điều chỉnh dựa trên những thay đổi của thị trường.

  3. Đường trung bình di chuyển chậm và có thể bỏ lỡ tín hiệu đảo ngược tại các điểm chuyển đổi.

  4. Phân tích chính xác về độ dốc trung bình di chuyển cần thiết để lọc các đột phá sai.

  5. Chọn tham số cần thận trọng, tần suất không phù hợp hoặc chậm có thể ảnh hưởng đến hiệu suất chiến lược.

Tối ưu hóa

  1. Sự chéo đường không của MACD có thể giúp xác định xu hướng và tập hợp lọc.

  2. Thêm kênh Donchian cho đường stop loss động để cải thiện stop loss cố định.

  3. Thêm Bollinger Bands để đánh giá xu hướng mạnh hoặc yếu, tránh giao dịch không hiệu quả trong quá trình củng cố thị trường.

  4. Tối ưu hóa các kết hợp tham số trung bình động và kiểm tra hiệu suất thực tế của các chiến lược giai đoạn khác nhau.

  5. Xem xét thêm các đường trung bình động được neo để giảm độ trễ.

Kết luận

Khái niệm tổng thể của chiến lược này rất đơn giản và rõ ràng, sử dụng các kỹ thuật giao dịch chéo trung bình động cổ điển, và kết hợp việc phá vỡ nến để vào để lọc hiệu quả các tín hiệu sai.


/*backtest
start: 2023-09-01 00:00:00
end: 2023-10-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Thêm nữa