Strategi Dagangan Algoritma Berfungsi Berbilang Berdasarkan Trend dan Moving Average Crossover

Penulis:ChaoZhang, Tarikh: 2023-12-08 12:14:50
Tag:

img

Ringkasan

Strategi ini mengintegrasikan pelbagai penunjuk teknikal dan konsep perdagangan untuk menghasilkan isyarat beli dan jual secara automatik. Ciri utama adalah mengoptimumkan berhenti berdasarkan penunjuk trend dan mencetuskan perdagangan dari persilangan purata bergerak.

Logika Strategi

Penunjuk teknikal

  • Indikator UTSTC tersuai: Hentian pengekalan adaptif berdasarkan Julat Benar Purata untuk menyesuaikan julat stop loss mengikut turun naik pasaran.

  • Indikator STC: Perbezaan antara purata mudah bergerak cepat dan perlahan untuk menentukan arah trend pasaran dan titik pembalikan yang berpotensi.

  • Purata Bergerak Sederhana (SMA) dan Purata Bergerak Eksponensial (EMA): Menggambarkan purata bergerak dari tempoh yang berbeza untuk memberikan maklumat trend tambahan.

Isyarat Perdagangan

  • Isyarat beli: Dihasilkan apabila harga penutupan melintasi di atas garisan UTSTC dan STC berada dalam keadaan menaik.

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

Kelebihan

  • Mengintegrasikan pelbagai penunjuk untuk menentukan trend pasaran, meningkatkan ketepatan isyarat.

  • UTSTC menyesuaikan berhenti secara automatik berdasarkan turun naik sebenar, dengan berkesan mengawal kerugian setiap perdagangan.

  • Isyarat perdagangan yang mudah dan berkesan dari salib purata bergerak.

  • Gabungan parameter yang berbeza menampung lebih banyak persekitaran pasaran.

Risiko

  • Penunjuk trend seperti STC mungkin tertinggal dan terlepas pembalikan jangka pendek.

  • Pembebasan purata bergerak boleh menghasilkan isyarat palsu.

  • Penilaian yang teliti parameter yang diperlukan, kombinasi yang tidak betul boleh mengurangkan keuntungan atau meningkatkan kerugian.

  • Julat stop loss yang terlalu luas boleh meningkatkan kerugian, terlalu ketat boleh berhenti lebih awal.

Peluang Peningkatan

  • Uji panjang STC yang berbeza untuk mencari tetapan dengan kesan strategi yang minimum.

  • Masukkan penapis tambahan untuk mengurangkan isyarat palsu e.g. KDJ, MACD.

  • Mengoptimumkan berhenti berdasarkan hasil backtest untuk mencari campuran parameter terbaik.

  • Menilai tempoh penyimpanan yang berbeza untuk menentukan yang optimum.

Kesimpulan

Strategi ini menggabungkan trend, hentian automatik dan modul isyarat ke dalam kerangka perdagangan algoritma yang agak lengkap. Dengan penyesuaian parameter dan pengembangan ciri, keuntungan yang stabil boleh dicapai tetapi tidak ada strategi yang dapat mengelakkan kerugian sepenuhnya. Validasi dan kawalan risiko yang betul 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 lanjut