Strategi Penunjuk Dagangan Swing


Tarikh penciptaan: 2023-12-12 12:44:50 Akhirnya diubah suai: 2023-12-12 12:44:50
Salin: 0 Bilangan klik: 398
1
fokus pada
1212
Pengikut

Strategi Penunjuk Dagangan Swing

Gambaran keseluruhan

Strategi ini menggunakan penunjuk purata bergerak ((MACD) untuk membina isyarat kosong, melakukan perdagangan terbalik dalam keadaan yang baik, dan memperoleh keuntungan melalui penyetempatan keluar secara dinamik.

Prinsip Strategi

Strategi ini adalah berdasarkan pada indikator MACD yang menghasilkan sinyal berganda dari garpu emas, sinyal garpu mati dari garpu kosong. Secara khusus, garpu emas dihasilkan apabila garpu MACD melintasi garpu sinyal dari bawah ke atas; garpu mati dihasilkan apabila garpu MACD melintasi garpu sinyal dari atas ke bawah.

Apabila isyarat garpu emas datang, jika harga penutupan lebih tinggi daripada garis purata EMA, lakukan lebih banyak; apabila isyarat garpu mati datang, jika harga penutupan lebih rendah daripada garis purata EMA, lakukan kosong. Ini dapat menjamin perdagangan berbalik di bawah trend besar.

Selepas masuk, strategi menggunakan tempat berhenti dan tempat berhenti untuk melakukan stop loss secara dinamik. Khususnya, banyak tempat berhenti yang ditetapkan sebagai harga masuk(1 - penurunan maksimum); Stop-Loss ditetapkan sebagai harga kemasukan(1+TARGET_STOP_RATIO*Maksimum penurunan) ◦ setelan kosong sebaliknya ◦ di mana penurunan maksimum dikira secara dinamik, menunjukkan peratusan penurunan ruang dari swing low ke harga penutupan; TARGET_STOP_RATIO secara default 2, menunjukkan nisbah kerugian adalah 2 ◦

Kelebihan dari seting off adalah bahawa ia dapat menyesuaikan kadar kerugian dan stop loss secara dinamik mengikut keadaan pasaran yang bergolak. Ia dapat menghentikan stop loss dengan cepat semasa turun naik yang besar, dan menjejaki stop loss semasa turun naik yang kecil.

Kelebihan Strategik

  1. Menggunakan penunjuk MACD untuk membina isyarat kosong, ia dapat menentukan dengan berkesan kapan harga berbalik.

  2. Berpadu dengan garis rata EMA sebagai penapis, pilih keadaan trend ke atas semasa masuk ke dalam permainan, dan elakkan perdagangan berlawanan arah.

  3. Sistem kawalan luar lapangan yang dinamik, dapat menyesuaikan kadar keuntungan dan titik kerugian dalam masa nyata, mengejar keuntungan tinggi sambil mengawal risiko.

  4. Oleh kerana pasaran berfluktuasi, ia boleh digunakan oleh pelabur yang sibuk.

Risiko dan penyelesaian strategi

  1. Indeks MACD sering menyebabkan isyarat palsu di pasaran yang disusun secara mendatar. Penyelesaiannya adalah dengan memasukkan garis rata sebagai penapis untuk mengelakkan perdagangan berlawanan.

  2. Dalam pasaran yang sangat bergolak, DYNAMIC STOP boleh menyebabkan kerugian yang terlalu longgar, tetapi ia berfungsi dengan baik dalam kebanyakan senario. Jika terdapat keadaan yang melampau, pertimbangkan untuk menetapkan kadar kerugian.

  3. Ruang keuntungan adalah terhad, memerlukan perdagangan yang kerap untuk mengejar keuntungan. Ini memerlukan pembiaya mental dan masa pelabur. Jika tidak ada masa untuk beroperasi, anda boleh mempertimbangkan untuk menyesuaikan diri dengan kitaran tinggi.

Arah pengoptimuman

  1. Mengubah parameter MACD mengikut ciri-ciri tertentu untuk mengoptimumkan perdagangan.

  2. Uji rata-rata bergerak yang berbeza sebagai penanda trend untuk mencari penapis yang lebih baik.

  3. Uji TARGET_STOP_RATIO, kaedah pengiraan penurunan maksimum, strategi pengoptimuman hentian hentian.

  4. Menambah penilaian syarat lain, seperti perubahan jumlah urus niaga, kadar turun naik dan sebagainya, meningkatkan kualiti isyarat.

  5. Cuba algoritma pembelajaran mesin untuk mengasah lebih banyak ciri, membina model faktor pelbagai dinamik, dan mencapai stop-loss yang lebih pintar.

ringkaskan

Strategi ini secara keseluruhannya mempunyai kepraktisan yang kuat. Dengan MACD sebagai isyarat perdagangan teras, menambah penilaian trend dan dua modul pembantu untuk mengawal pergerakan pergerakan, ia dapat meningkatkan keberkesanan perdagangan MACD secara signifikan. Strategi Stop Loss adalah arah utama dalam pengoptimuman strategi.

Kod sumber strategi
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 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/
// © maxencetajet

//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)

src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")

riskt = risk / 100 + 1

useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow =  true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")

ema = ta.ema(src, emaV)

fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")

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

longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0

float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na

risk_long := risk_long[1]
risk_short := risk_short[1]

swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)

lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)

if strategy.position_size == 0 and longcondition and inTradeWindow
    risk_long := (close - swingLow) / close
    strategy.entry("long", strategy.long, qty=lotB)
    
if strategy.position_size == 0 and shortcondition and inTradeWindow
    risk_short := (swingHigh - close) / close  
    strategy.entry("short", strategy.short, qty=lotS)

if strategy.position_size > 0

    stopLoss := strategy.position_avg_price * (1 - risk_long)
    takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
    
if strategy.position_size < 0

    stopLoss := strategy.position_avg_price * (1 + risk_short)
    takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
    
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))