Trung bình di chuyển kép với chiến lược đột phá động lượng

Tác giả:ChaoZhang, Ngày: 2024-02-06 14:39:22
Tags:

img

Tổng quan

Chiến lược này sử dụng đường chéo vàng của đường EMA 12 ngày và đường EMA 26 ngày làm tín hiệu đầu vào. Để lọc các đột phá sai, MACD được áp dụng để đánh giá xu hướng thị trường và chỉ số RSI cho mức mua quá mức / bán quá mức. Sự đột phá giá trên ngưỡng kháng cự cũng được sử dụng làm xác nhận.

Chiến lược cung cấp ba phương pháp dừng lỗ tùy chọn: dừng lỗ, dừng trung bình động và dừng chéo trung bình động.

Chiến lược logic

  1. Tín hiệu nhập cảnh
    • Chữ chéo vàng giữa EMA 12 ngày và EMA 26 ngày
    • MACD là dương tính và đường MACD trên đường tín hiệu
    • RSI trong phạm vi được đặt trước
  2. Chứng nhận nhập cảnh
    • Tùy chọn: Đột phá giá trên ngưỡng kháng cự động
  3. Dừng Loss
    • Đánh giá lỗ dừng theo dõi dựa trên giá nhập cảnh và tỷ lệ phần trăm đã được đặt trước
    • Đóng dưới đường SMA 7 ngày
    • Chữ chéo giảm giữa đường EMA 12 ngày và 26 ngày
  4. Lấy lợi nhuận
    • Hai giai đoạn lấy mục tiêu lợi nhuận, ra khỏi vị trí một phần trên mục tiêu đầu tiên và tất cả trên thứ hai

Ưu điểm

  1. Hệ thống MA lọc tín hiệu sai, cải thiện độ chính xác nhập
  2. Nhiều tùy chọn dừng lỗ cho các kiểu giao dịch khác nhau
  3. Rủi ro kiểm soát dừng kéo theo động
  4. Lấy lợi nhuận trong giai đoạn khóa trong một số lợi nhuận

Rủi ro

  1. Nhiều tín hiệu sai khi thị trường dao động
  2. Chỗ dừng sau có thể bị xâm nhập sau khi chạy mạnh mẽ
  3. Không ra khỏi kịp thời khi đảo ngược xu hướng

Giải pháp:

  1. Sử dụng MACD để đánh giá xu hướng thực tế
  2. Điều chỉnh tỷ lệ phần trăm
  3. Sử dụng các phương pháp dừng khác hoặc kết hợp dừng

Tăng cường

  1. Tối ưu hóa các tham số MA để có hiệu suất tốt nhất
  2. Kiểm tra các điểm dừng khác nhau và tìm phương pháp tốt nhất
  3. Điều chỉnh mức lợi nhuận để có phần thưởng tốt hơn
  4. Thêm bộ lọc với các chỉ số khác
  5. Tùy chỉnh cho các sản phẩm và khung thời gian khác nhau

Kết luận

Chiến lược này sử dụng hệ thống MA cho tín hiệu nhập cảnh, với các bộ lọc bổ sung bởi MACD, RSI vv. Cả hai điểm dừng và mục tiêu lợi nhuận được tối ưu hóa để phù hợp với phong cách giao dịch khác nhau.


/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © AbdulRahimShama
//@version=5


strategy('12/26-IT strategy', overlay=true,initial_capital = 100000)



Show_Only_12_26_Crossover_Entry = input.bool(true, group = "Entry_Exit Criteria")
Show_12_26_Crossover_and_resistance_Entry = input.bool(false, group = "Entry_Exit Criteria")


Show_TSL_StopLoss = input.bool(true, group = "Entry_Exit Criteria")
Show_Crossdown_StopLoss = input.bool(true, group = "Entry_Exit Criteria")
Show_SMA7_StopLoss = input.bool(false, group = "Entry_Exit Criteria")



////////////////////////////////////////////////
////////////////TARGETS INPUT
////////////////////////////////////////////////

////////Target1

TargetPerc1 = input.float(title="Target (%)", minval=0,defval=5, group="Target-1") / 100
TargetPrice1 = strategy.position_avg_price * (1 + TargetPerc1)
Target1_exit_qty = input.int(50, group="Target-1",tooltip = "% qty to sell when Target1 is reached")



////////Target2

TargetPerc2 = input.float(title="Target (%)", minval=0,defval=10, group="Target-2") / 100
TargetPrice2 = strategy.position_avg_price * (1 + TargetPerc2)
Target2_exit_qty = input.int(100, group="Target-2",tooltip = "% qty to sell when Target2 is reached")



////////////////////////////////////////////////
////////////////TRAILING STOP LOSS
////////////////////////////////////////////////


TSLsource = input(low, title="TSL Source", group="Trailing StopLoss")

longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=1, group="Trailing StopLoss") * 0.01

TrailStopPrice = 0.0

TrailStopPrice := if strategy.position_size > 0
    sPIVOT_highValue = TSLsource * (1 - longTrailPerc)
    math.max(sPIVOT_highValue, TrailStopPrice[1])
else
    0

TSL = close < TrailStopPrice
plot(series=strategy.position_size > 0 and Show_TSL_StopLoss ? TrailStopPrice : na, color=color.new(color.fuchsia, 0), style=plot.style_linebr, linewidth=2, title='Trailing StopLoss')




////////////////////////////////////////////////
////////////////Moving Averages
////////////////////////////////////////////////



EMA_12=ta.ema(close, 12)
EMA_26=ta.ema(close, 26)
EMA_21=ta.ema(close,21)

plot(EMA_12, title="EMA_12", color=color.rgb(0, 255, 0), offset=0, linewidth=1)
plot(EMA_26, title="EMA_26", color=color.rgb(0, 0, 255), offset=0, linewidth=1)
plot(Show_SMA7_StopLoss ? ta.sma(close,7) : na, title="SMA_7", color=color.rgb(255, 0, 0), offset=0, linewidth=1)



////////////////////////////////////////////////
////////////////RESISTANCE INPUT and PLOTTING
////////////////////////////////////////////////

CrossOverLookbackCandles = input.int(10, group= "RESISTANCE")

resistanceSRC = input(high, group= "RESISTANCE")
resistanceLEFT = input(10, group= "RESISTANCE")
resistanceRIGHT = input(10, group= "RESISTANCE")

hih = ta.pivothigh(resistanceSRC, resistanceLEFT, resistanceRIGHT)
top = ta.valuewhen(hih, resistanceSRC[resistanceRIGHT], 0)

res = plot(top, color=top != top[1] ? na : color.new(#00ff00, 50), offset=-resistanceLEFT, linewidth=2, title="Resistance Line")

EMA_12_Low = ta.lowest(EMA_12, CrossOverLookbackCandles)
EMA_26_Low = ta.lowest(EMA_26, CrossOverLookbackCandles)


////////////////////////////////////////////////
////////////////RSI INPUT and PLOTTING
////////////////////////////////////////////////
RSI = ta.rsi(close, 14)
RSILowerRange = input.int(50, tooltip = "RSI value should be ABOVE this value for entry", group = "RSI")
RSIUpperRange = input.int(70, tooltip = "RSI value should be BELOW this value for entry", group = "RSI")



////////////////////////////////////////////////
////////////////MACD
////////////////////////////////////////////////
fast_length = 12
slow_length = 26
MACD_src = close
signal_length = 9

fast_ma = ta.ema(MACD_src, fast_length)
slow_ma = ta.ema(MACD_src, slow_length)
macd = fast_ma - slow_ma
signal = ta.ema(macd, signal_length)
hist = macd - signal



////////////////////////////////////////////////
////////////////ENTRY CRITERIA
////////////////////////////////////////////////


BUYVALUE= input(100000, tooltip = "Buy qty displayed on chart will be based on this value")

BASEENTRY = macd > signal and RSI > RSILowerRange and RSI < RSIUpperRange and close > EMA_21 and close > ta.sma(close, 7)


Entry= ta.crossover(EMA_12, EMA_26) and BASEENTRY
Entry2 = ta.crossover(close, top) and EMA_12_Low < EMA_26_Low and EMA_12 > EMA_26 and RSI < 70

////////////////////////////////////////////////
////////////////BUY SELL STRATEGY
////////////////////////////////////////////////

if ((Entry and Show_Only_12_26_Crossover_Entry))
    strategy.entry("buy", strategy.long, qty=BUYVALUE/close)

if (Entry2 and Show_12_26_Crossover_and_resistance_Entry)
    strategy.entry("buy", strategy.long, qty=BUYVALUE/close)

strategy.exit("Tg1", "buy", limit=TargetPrice1, qty_percent = Target1_exit_qty)
strategy.exit("Tg2", "buy", limit=TargetPrice2, qty_percent = Target2_exit_qty)



if TSL and Show_TSL_StopLoss and close < EMA_12 
    strategy.close_all ("sl")

if ta.crossunder(EMA_12, EMA_26) and Show_Crossdown_StopLoss
    strategy.close_all ("sl")

if ta.crossunder(close, ta.sma(close, 7)) and Show_SMA7_StopLoss
    strategy.close_all ("sl")




Thêm nữa