Strategi Perdagangan Algoritma Multifungsi Berdasarkan Trend dan Moving Average Crossover

Penulis:ChaoZhang, Tanggal: 2018-12-12 12:14:50
Tag:

img

Gambaran umum

Strategi ini mengintegrasikan beberapa indikator teknis dan konsep perdagangan untuk secara otomatis menghasilkan sinyal beli dan jual. Fitur utama adalah mengoptimalkan stop berdasarkan indikator tren dan memicu perdagangan dari crossover rata-rata bergerak.

Logika Strategi

Indikator teknis

  • Indikator UTSTC khusus: Stop trailing adaptif berdasarkan Average True Range untuk menyesuaikan stop loss range sesuai dengan volatilitas pasar.

  • Indikator STC: Perbedaan antara rata-rata bergerak sederhana yang cepat dan lambat untuk menentukan arah tren pasar dan titik pembalikan potensial.

  • Rata-rata Gerak Sederhana (SMA) dan Rata-rata Gerak Eksponensial (EMA): Menggambar rata-rata gerak periode yang berbeda untuk memberikan informasi tren tambahan.

Sinyal Trading

  • Sinyal beli: Dihasilkan ketika harga penutupan melintasi di atas garis UTSTC dan STC berada dalam keadaan bullish.

  • Sinyal jual: Dihasilkan ketika harga penutupan melintasi di bawah garis UTSTC dan STC berada dalam keadaan menurun.

Keuntungan

  • Mengintegrasikan beberapa indikator untuk menentukan tren pasar, meningkatkan akurasi sinyal.

  • UTSTC menyesuaikan stop secara otomatis berdasarkan volatilitas yang sebenarnya, secara efektif mengendalikan kerugian per perdagangan.

  • Sinyal perdagangan sederhana dan efektif dari persilangan rata-rata bergerak.

  • Kombinasi parameter yang berbeda mengakomodasi lebih banyak lingkungan pasar.

Risiko

  • Indikator tren seperti STC mungkin tertinggal dan melewatkan pembalikan jangka pendek.

  • Pembebasan rata-rata bergerak dapat menghasilkan sinyal palsu.

  • Penilaian yang cermat dari parameter yang diperlukan, kombinasi yang tidak tepat dapat mengurangi keuntungan atau meningkatkan kerugian.

  • Jangkauan stop loss yang terlalu luas dapat meningkatkan kerugian, terlalu ketat dapat berhenti lebih awal.

Peluang Peningkatan

  • Uji panjang STC yang berbeda untuk menemukan pengaturan dengan dampak strategi minimal.

  • Masukkan filter tambahan untuk mengurangi sinyal palsu misalnya KDJ, MACD.

  • Mengoptimalkan berhenti berdasarkan hasil backtest untuk menemukan campuran parameter terbaik.

  • Evaluasi periode penyimpanan yang berbeda untuk menentukan yang optimal.

Kesimpulan

Strategi ini menggabungkan tren, stop otomatis dan modul sinyal menjadi kerangka kerja perdagangan algoritmik yang cukup lengkap. Dengan penyesuaian parameter dan perluasan fitur, keuntungan yang stabil dapat dicapai tetapi tidak ada strategi yang dapat sepenuhnya menghindari kerugian. Validasi dan pengendalian risiko yang tepat masih penting.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)



Lebih banyak