Strategi Perdagangan Rata-rata Pergerakan Ganda


Tanggal Pembuatan: 2024-02-29 14:32:29 Akhirnya memodifikasi: 2024-02-29 14:32:29
menyalin: 3 Jumlah klik: 881
1
fokus pada
1617
Pengikut

Strategi Perdagangan Rata-rata Pergerakan Ganda

Ringkasan

Strategi ini disebut strategi perdagangan garis rata-rata ganda. Strategi ini menggunakan MACD indikator dengan garis rata-rata ganda sebagai sinyal perdagangan, digabungkan dengan indikator ZLSMA untuk membantu menilai tren, mengatur Stop Stop Loss Exiting Logic, untuk melakukan perdagangan otomatis.

Prinsip Strategi

  1. Hitung garis cepat, garis lambat, dan kolom MACD dari indikator MACD. Atur garpu emas untuk melakukan over, garpu mati untuk melakukan over.

  2. Hitung empat garis rata-rata di garis 5, 25, 45, dan 100. Semakin panjang garis rata-rata, semakin kuat kontinuitas tren.

  3. Perhitungan jarak antara dua set garis rata-rata, jika jarak melebihi nilai ambang tertentu, menunjukkan bahwa garis rata-rata menyebar, dapat diatur sebagai sinyal perdagangan.

  4. Perhitungan indikator ZLSMA, yang menunjukkan arah tren garis panjang di tengah harga. ZLSMA membentuk titik balik untuk menentukan pergeseran tren.

  5. Menggabungkan MACD crossover, sinyal dispersi rata-rata, dan penilaian tren ZLSMA, menetapkan strategi perdagangan overbought.

  6. Set stop loss stop stop, untuk mengotomatisasi Exiting Logic.

Analisis Keunggulan

  1. Sinyal multi-filter meningkatkan efisiensi strategi. Indikator MACD dan sinyal dispersi garis rata dapat saling diverifikasi untuk menghindari terobosan palsu.

  2. Indikator ZLSMA membantu menentukan arah tren jangka menengah dan panjang, menghindari perdagangan berlawanan arah.

  3. Exiting otomatis mengatur titik berhenti dan berhenti untuk mengurangi frekuensi intervensi manusia.

Analisis risiko

  1. Parameter yang tidak tepat dapat menyebabkan over-trading atau bocor. Parameter harus dioptimalkan untuk mendapatkan hasil yang optimal.

  2. Stop loss yang tetap akan membatasi ruang keuntungan atau memperluas kerugian. Stop loss yang dinamis dapat diatur dengan ATR.

  3. Strategi garis rata tidak efektif dalam situasi gempa, dan dapat dipertimbangkan untuk membantu dengan indikator lain atau intervensi buatan.

Arah optimasi

  1. Mengoptimalkan kombinasi parameter garis rata, menguji efek garis rata dengan panjang yang berbeda.

  2. Tes ini menambahkan indikator lain seperti KDJ, BOLL dan lain-lain untuk menentukan titik jual beli.

  3. Cobalah strategi stop loss yang dinamis, dengan posisi stop loss berdasarkan volatilitas.

  4. Bergabunglah dengan model pembelajaran mesin untuk mencari parameter optimal secara otomatis.

Meringkaskan

Strategi ini mengintegrasikan indikator MACD, garis rata-rata ganda dan penilaian tren ZLSMA untuk mencapai perdagangan otomatis. Dengan memfilter sinyal ganda untuk meningkatkan stabilitas strategi, mengatur logika Exiting untuk mengurangi risiko, memiliki nilai pertempuran nyata. Selanjutnya, kinerja strategi dapat ditingkatkan lebih lanjut melalui optimasi parameter, perluasan indikator, dan stop loss dynamics.

Kode Sumber Strategi
/*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)