Chiến lược giao dịch nhiều đường trung bình động


Ngày tạo: 2024-02-29 14:32:29 sửa đổi lần cuối: 2024-02-29 14:32:29
sao chép: 3 Số nhấp chuột: 881
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch nhiều đường trung bình động

Tổng quan

Chiến lược này được gọi là chiến lược giao dịch đường trung bình đa phương. Chiến lược này sử dụng MACD và đường trung bình đa phương giao dịch như một tín hiệu giao dịch, kết hợp với ZLSMA để hỗ trợ phán đoán xu hướng, thiết lập logic Exiting Stop Loss, để thực hiện giao dịch tự động.

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

  1. Tính toán đường nhanh, đường chậm và cột MACD của chỉ số MACD. Thiết lập Gold Fork làm nhiều, Dead Fork làm trống.

  2. Tính bốn đường trung bình của đường 5, 25, 45 và 100. Đường trung bình càng dài thì xu hướng càng bền vững.

  3. Tính khoảng cách giữa hai nhóm đường trung bình, nếu khoảng cách vượt quá một ngưỡng nhất định, cho thấy đường trung bình phân tán, có thể được đặt làm tín hiệu giao dịch.

  4. Tính toán chỉ số ZLSMA, cho thấy hướng xu hướng đường dài trung bình của giá. Khi ZLSMA hình thành một góc, có thể xác định sự đảo ngược xu hướng.

  5. Kết hợp các chỉ số MACD chéo, tín hiệu phân tán đường trung bình và phán đoán xu hướng ZLSMA, thiết lập chiến lược giao dịch đa chiều.

  6. Thiết lập điểm dừng dừng, thực hiện logic Exiting tự động.

Phân tích lợi thế

  1. Các tín hiệu lọc đa dạng giúp hiệu quả chiến lược. Các chỉ số MACD và tín hiệu phân tán đường trung bình có thể xác minh lẫn nhau để tránh phá vỡ giả.

  2. Chỉ số ZLSMA hỗ trợ định hướng xu hướng trung và dài hạn, tránh giao dịch ngược.

  3. Exiting tự động đặt điểm dừng để giảm tần suất can thiệp của con người.

Phân tích rủi ro

  1. Thiết lập tham số không đúng có thể dẫn đến giao dịch quá mức hoặc bỏ phiếu. Cần tối ưu hóa tham số để đạt được hiệu quả tối ưu.

  2. Điểm dừng cố định sẽ hạn chế không gian lợi nhuận hoặc mở rộng tổn thất. Có thể kết hợp với chỉ số ATR để thiết lập dừng động.

  3. Chiến lược đường trung bình không hiệu quả đối với tình trạng chấn động, có thể xem xét hỗ trợ các chỉ số khác hoặc can thiệp nhân tạo.

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

  1. Tối ưu hóa sự kết hợp các tham số đường trung bình, kiểm tra hiệu quả của đường trung bình với độ dài khác nhau.

  2. Thử nghiệm thêm các chỉ số khác, chẳng hạn như KDJ, BOLL, để xác định điểm mua và bán.

  3. Thử chiến lược dừng động, đặt vị trí dừng dựa trên biến động.

  4. Tham gia mô hình học máy, tự động tìm các tham số tối ưu.

Tóm tắt

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

Mã nguồn 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)