Strategi Perdagangan Purata Pergerakan Berbilang


Tarikh penciptaan: 2024-02-29 14:32:29 Akhirnya diubah suai: 2024-02-29 14:32:29
Salin: 3 Bilangan klik: 881
1
fokus pada
1617
Pengikut

Strategi Perdagangan Purata Pergerakan Berbilang

Gambaran keseluruhan

Strategi ini dinamakan strategi dagangan garis purata berganda. Strategi ini menggunakan penyambungan MACD dengan garis purata berganda sebagai isyarat perdagangan, digabungkan dengan penunjuk ZLSMA untuk membantu menilai trend, menetapkan logik Exiting Stop Loss, untuk melakukan perdagangan automatik.

Prinsip Strategi

  1. Hitung garis laju, garis lambat dan tiang MACD. Tetapkan garpu emas untuk melakukan lebih banyak, garpu mati untuk melakukan kosong.

  2. Hitung empat garis rata-rata garis 5, 25, 45, dan 100. Semakin panjang garis rata-rata, semakin kuat trend berterusan.

  3. Mengira jarak antara dua set garis rata, jika jarak melebihi nilai tertentu, menunjukkan bahawa garis rata tersebar, boleh ditetapkan sebagai isyarat perdagangan.

  4. Mengira indikator ZLSMA, menunjukkan arah trend garis panjang dalam harga. Apabila ZLSMA membentuk titik tikungan, ia dapat menentukan pembalikan trend.

  5. Menggabungkan penyambung MACD, isyarat penyebaran garis rata dan penilaian trend ZLSMA, menetapkan strategi perdagangan berlubang.

  6. Tetapkan titik hentian hentian untuk melaksanakan logik Exiting automatik.

Analisis kelebihan

  1. Isyarat penapisan berganda meningkatkan kecekapan strategi. Indikator MACD dan isyarat penyebaran garis rata dapat diverifikasi antara satu sama lain untuk mengelakkan penembusan palsu.

  2. Indeks ZLSMA membantu menentukan arah trend jangka menengah dan panjang, mengelakkan perdagangan berlawanan arah.

  3. Exiting automatik menetapkan titik hentian hentian, mengurangkan frekuensi campur tangan manusia.

Analisis risiko

  1. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau kehilangan borang. Parameter perlu dioptimumkan untuk mencapai kesan terbaik.

  2. Titik hentian pegangan tetap akan mengehadkan ruang keuntungan atau memperluaskan kerugian. Ia boleh digabungkan dengan parameter ATR untuk menetapkan hentian dinamik.

  3. Strategi garis rata tidak berkesan terhadap keadaan gegaran, dan penyambungan dengan petunjuk lain atau campur tangan buatan boleh dipertimbangkan.

Arah pengoptimuman

  1. Mengoptimumkan kombinasi parameter garis rata, menguji kesan garis rata dengan panjang yang berbeza.

  2. Ujian ini menambah petunjuk lain, seperti KDJ, BOLL dan lain-lain untuk menentukan titik jual beli.

  3. Cuba strategi hentian dinamik dengan menetapkan kedudukan hentian mengikut kadar turun naik.

  4. Bergabung dengan model pembelajaran mesin untuk mencari parameter optimum secara automatik.

ringkaskan

Strategi ini mengintegrasikan indikator MACD, garis purata berganda dan penghakiman trend ZLSMA untuk mewujudkan perdagangan automatik. Meningkatkan kestabilan strategi dengan penapisan isyarat berganda, menetapkan logik Exiting untuk mengurangkan risiko, mempunyai nilai pertempuran yang tertentu.

Kod 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)