Chiến lược giao dịch đa trung bình động

Tác giả:ChaoZhang, Ngày: 2024-02-29 14:32:29
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Chiến lược giao dịch trung bình chuyển động đa. Nó sử dụng sự chéo chéo của chỉ số MACD và nhiều trung bình chuyển động như các tín hiệu giao dịch, với sự trợ giúp của chỉ số ZLSMA để xác định xu hướng, và thiết lập logic lấy lợi nhuận và dừng lỗ để thực hiện giao dịch tự động.

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

  1. Tính đường nhanh, đường chậm và biểu đồ MACD của chỉ số MACD. Đặt dài khi thấy chữ thập vàng và ngắn khi thấy chữ thập chết.

  2. Tính toán các đường trung bình động 5 ngày, 25 ngày, 45 ngày và 100 ngày.

  3. Tính toán khoảng cách giữa hai nhóm trung bình động. Nếu khoảng cách vượt quá một ngưỡng nhất định, nó có nghĩa là sự phân kỳ của các trung bình động, có thể được thiết lập như tín hiệu giao dịch.

  4. Tính toán chỉ số ZLSMA, đại diện cho hướng xu hướng trung hạn đến dài hạn của giá.

  5. Kết hợp giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch.

  6. Thiết lập điểm lấy lợi nhuận và dừng lỗ để nhận ra logic thoát tự động.

Phân tích lợi thế

  1. Các tín hiệu đa bộ lọc cải thiện hiệu quả chiến lược. MACD và tín hiệu chênh lệch trung bình động có thể xác minh lẫn nhau để tránh đột phá sai.

  2. ZLSMA hỗ trợ xác định hướng xu hướng trung và dài hạn để tránh giao dịch chống lại xu hướng.

  3. Việc tự động ra khỏi bằng cách thiết lập điểm lấy lợi nhuận và dừng lỗ làm giảm tần suất can thiệp của con người.

Phân tích rủi ro

  1. Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ lệnh.

  2. Các điểm thu lợi nhuận và dừng lỗ cố định hạn chế tiềm năng lợi nhuận hoặc tăng lỗ.

  3. Các chiến lược trung bình động hoạt động kém trong các thị trường giới hạn phạm vi.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa sự kết hợp của các tham số trung bình động bằng cách thử nghiệm các đường trung bình động dài khác nhau.

  2. Kiểm tra thêm các chỉ số khác như KDJ và BOLL để xác định các điểm nhập và xuất.

  3. Hãy thử các chiến lược dừng lỗ năng động dựa trên các biện pháp biến động.

  4. Thêm các mô hình máy học để tự động tìm các thông số tối ưu.

Kết luận

Chiến lược này tích hợp MACD, nhiều đường trung bình động và xác định xu hướng ZLSMA để đạt được giao dịch tự động. Bằng cách lọc với nhiều tín hiệu, sự ổn định của chiến lược được cải thiện; bằng cách thiết lập logic thoát, rủi ro được giảm. Có một giá trị thực tế nhất định cho giao dịch thực tế. Tối ưu hóa tham số tiếp theo, mở rộng chỉ số, dừng động v.v. có thể cải thiện hơn nữa hiệu suất chiến lược.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD ZLSMA_izumi⑤(4つの条件、MCDがクロスしてたら)", overlay=true)

fast_length = input(title = "Fast Length", defval = 12)
slow_length = input(title = "Slow Length", defval = 26)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

alertcondition(hist[1] >= 0 and hist < 0, title = 'Rising to falling', message = 'The MACD histogram switched from a rising to falling state')
alertcondition(hist[1] <= 0 and hist > 0, title = 'Falling to rising', message = 'The MACD histogram switched from a falling to rising state')

hline(0, "Zero Line", color = color.new(#787B86, 50))
plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
plot(macd,   title = "MACD",   color = #2962FF)
plot(signal, title = "Signal", color = #FF6D00)

//MACDクロス設定
enterLong = ta.crossover(macd, signal)
enterShort = ta.crossunder(macd, signal)

//移動平均線の期間を設定
ema5 = input(5, title="ma期間5")
ema25 = input(25, title="ma期間25")
ema45 = input(45, title="ma期間45")
ema100 = input(100, title="ma期間100")

//移動平均線を計算
//sma関数で「ema25」バー分のcloseを移動平均線として「Kema」に設定
Kema5 = ta.sma(close,ema5)
Kema25 = ta.sma(close,ema25)
Kema45 = ta.sma(close,ema45)
Kema100 = ta.sma(close,ema100)



//移動平均線をプロット
plot(Kema5, color=color.rgb(82, 249, 255),title="ema5")
plot(Kema25, color=color.red,title="ema25")
plot(Kema45, color=color.blue,title="ema45")
plot(Kema100, color=color.green,title="ema100")

//ema同士の距離が30以上の時に「distancOK」にTureを返す
//distance1 = math.abs(Kema5-Kema25)
distance2 = math.abs(Kema25-Kema45)
distanceValue1 = input(0.030, title ="ema同士の乖離値") 
//distanceOk1 = distance1 > distanceValue1
distanceOk2 = distance2 > distanceValue1

//2区間のema同士の距離が30以上の時に「distanceOKK」にTrueを返す
//distanceOkK1 = distanceOk1 and distanceOk2
distanceOkK1 = distanceOk2

//5EMAとロウソクの乖離判定
//DistanceValue5ema = input(0.03, title ="5emaとロウソクの乖離率")
//emaDistance = math.abs(Kema5 - close)
//emaDistance5ema = emaDistance < DistanceValue5ema

//ZLSMA追加のコード
length = input.int(32, title="Length")
offset = input.int(0, title="offset")
src2 = input(close, title="Source")
lsma = ta.linreg(src2, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq= lsma-lsma2
zlsma = lsma+eq
//ZLSMAのプロット
plot(zlsma, color=color.yellow, linewidth=3)

//ZLSMAの前回高値を検索
//var float zlsmaHigh = na
//var float zlsmaHighValue = na
//if ta.highest(zlsma,35) == zlsma[3]
//    zlsmaHighValue := zlsmaHigh
//    zlsmaHigh := zlsma[3]

//if (na(zlsmaHighValue))
 //   zlsmaHighValue := zlsmaHigh

//ZLSMAの前回安値を検索
//var float zlsmaLow = na
//var float zlsmaLowValue = na
//if ta.lowest(zlsma,35) == zlsma[3]
//    zlsmaLowValue := zlsmaLow
//    zlsmaLow := zlsma[3]

///if (na(zlsmaLowValue))
//    zlsmaLowValue := zlsmaLow

//利確・損切りポイントの初期化(変数の初期化)
var longProfit = 0.0
var longStop = 0.0
var shortProfit = 0.0
var shortStop = 0.0

//inputで設定画面の選択項目を設定
longProfitValue = input(0.06, title ="ロング利確pips")
shortProfitValue = input(-0.06, title ="ショート利確pips")
longStopValue = input(-0.06, title ="ロング損切pips")
shortStopValue = input(0.06, title ="ショート損切pips")

// クロスの強さを推定 
//angleThreshold = input(0.001, title = "クロスの強さ調節" )

// クロスの強さの閾値、この値を調整してクロスの強さの基準を変える 
//macdDiff = macdLine - signalLine 
//strongCross = math.abs(macdDiff) > angleThreshold 

// エントリー条件 (MACDラインとシグナルラインがクロス)
//ta.crossover(macdLine, signalLine) and strongCross 


//ロングエントリー条件
if  distanceOkK1 and enterLong
	strategy.entry("long", strategy.long, comment="long")
    longProfit := close + longProfitValue
    longStop := close + longStopValue

//    if na(strategy.position_avg_price) and close>strategy.position_avg_price + 0.05 * syminfo.mintick 
 //       longStop := strategy.position_avg_price + 10 * syminfo.mintick
  //  strategy.exit("exit", "long",stop = longStop)

strategy.exit("exit", "long", limit = longProfit,stop = longStop)


if  distanceOkK1 and enterShort
	strategy.entry("short", strategy.short, comment="short")
    shortProfit := close + shortProfitValue
    shortStop := close + shortStopValue

 //   if na(strategy.position_avg_price) and close>strategy.position_avg_price - 0.05 * syminfo.mintick 
  //      shortStop := strategy.position_avg_price - 0.1 * syminfo.mintick
  //  strategy.exit("exit", "long",stop = longStop)


strategy.exit("exit", "short", limit = shortProfit,stop = shortStop)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Thêm nữa