Strategi Indikator Swing Trading


Tanggal Pembuatan: 2023-12-12 12:44:50 Akhirnya memodifikasi: 2023-12-12 12:44:50
menyalin: 0 Jumlah klik: 395
1
fokus pada
1212
Pengikut

Strategi Indikator Swing Trading

Ringkasan

Strategi ini menggunakan indikator Moving Average (MACD) untuk membangun sinyal bullish, melakukan perdagangan reversal dalam kondisi tren yang baik, dan mengambil keuntungan melalui pengaturan dinamis offset.

Prinsip Strategi

Strategi ini terutama didasarkan pada indikator MACD yang menghasilkan sinyal ganda, sinyal mati, dan sinyal kosong. Secara khusus, sinyal ganda dihasilkan ketika garis MACD melintasi garis sinyal dari bawah ke atas; sinyal mati dihasilkan ketika garis MACD melintasi garis sinyal dari atas ke bawah.

Pada saat sinyal Gold Fork datang, jika harga close-out lebih tinggi dari EMA, maka Anda akan melakukan over; pada saat sinyal Dead Fork datang, jika harga close-out lebih rendah dari EMA, maka Anda akan melakukan over. Dengan demikian, Anda dapat melakukan perdagangan reversal di bawah tren besar.

Setelah masuk, strategi menggunakan stop loss dan stop loss untuk melakukan stop loss secara dinamis. Secara khusus, beberapa stop loss yang ditetapkan sebagai harga masuk(1 - penurunan maksimum); Stop-Loss ditetapkan sebagai harga masuk(1+TARGET_STOP_RATIO*Maksimum penurunan) ❚ Blank setting sebaliknya ❚ di mana maksimum penurunan dihitung secara dinamis, yang menunjukkan persentase penurunan dari swing low ke harga penutupan; TARGET_STOP_RATIO default 2, yang menunjukkan rasio untung rugi adalah 2 ❚

Keuntungan dari pengaturan posisi keluar adalah kemampuan untuk secara dinamis menyesuaikan stop loss dan stop loss sesuai dengan kondisi pasar yang berfluktuasi. Stop loss cepat di luar lapangan dalam fluktuasi besar, dan stop loss di bawah pergerakan kecil.

Keunggulan Strategis

  1. Dengan menggunakan indikator MACD untuk membangun sinyal kosong, dapat secara efektif menentukan kapan harga berbalik.

  2. Bergabung dengan EMA rata-rata untuk membuat filter, memilih tren ke atas saat masuk, menghindari perdagangan berlawanan.

  3. Sistem kendali luar lapangan yang dinamis, dapat menyesuaikan rasio keuntungan dan kerugian secara real-time, untuk mengejar keuntungan tinggi sambil mengontrol risiko.

  4. Karena mempertimbangkan fluktuasi pasar, exit cepat, dapat mengurangi waktu penarikan, lebih cocok digunakan oleh investor sibuk.

Risiko Strategis dan Solusi

  1. Indikator MACD sering menyebabkan sinyal palsu di pasar yang disortir secara horizontal. Solusinya adalah menambahkan garis rata sebagai filter untuk menghindari perdagangan berlawanan arah.

  2. Di pasar yang sangat bergejolak, DYNAMIC STOP dapat menyebabkan stop loss yang terlalu longgar, tetapi dalam kebanyakan skenario lebih baik. Jika terjadi situasi yang ekstrem, pertimbangkan untuk menetapkan rasio untung rugi.

  3. Ruang keuntungan terbatas, perlu sering berdagang untuk mengejar keuntungan. Ini membutuhkan kemampuan mental dan waktu yang diinvestasikan oleh investor. Jika tidak ada waktu luang untuk beroperasi, pertimbangkan untuk menyesuaikan diri dengan siklus tinggi.

Arah optimasi

  1. Adaptasi parameter MACD sesuai dengan karakteristik varietas tertentu, untuk mengoptimalkan efek perdagangan.

  2. Uji coba berbagai moving average sebagai indikator untuk menilai tren dan mencari filter yang lebih baik.

  3. Uji coba TARGET_STOP_RATIO, metode perhitungan penurunan maksimum, dan optimalisasi strategi stop loss.

  4. Menambahkan penilaian kondisional lainnya, seperti perubahan volume transaksi, volatilitas, dan lain-lain, untuk meningkatkan kualitas sinyal.

  5. Mencoba algoritma pembelajaran mesin untuk mengolah lebih banyak fitur, membangun model multi-faktor dinamis, dan stop-loss yang lebih cerdas.

Meringkaskan

Strategi ini secara keseluruhan memiliki kepraktisan yang kuat. Dengan MACD sebagai sinyal perdagangan inti, menambahkan penilaian tren dan kontrol dinamis dari dua modul tambahan, dapat secara signifikan meningkatkan efektivitas perdagangan MACD itu sendiri. Strategi stop loss adalah arah utama dalam pengoptimalan strategi, dan strategi ini melakukan banyak inovasi dalam hal ini, yang layak untuk penelitian dan aplikasi lebih lanjut.

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