Strategi Trading Dasar Pinbar

Penulis:ChaoZhang, Tanggal: 2023-11-15 15:25:57
Tag:

img

Gambaran umum

Strategi ini menggunakan pola pinbar dengan penentuan tren dengan memindahkan rata-rata untuk perdagangan breakout ke arah tren. Ini menghasilkan sinyal perdagangan ketika harga keluar dari tinggi / rendah yang terbentuk oleh lilin pinbar. Selain itu, ini menggunakan rata-rata bergerak cepat dan lambat untuk menentukan arah tren keseluruhan, menghindari sinyal yang salah selama tindakan harga yang terikat kisaran.

Logika Strategi

  1. Menghitung rata-rata bergerak cepat (20 periode) dan lambat (50 periode).

  2. Mengidentifikasi pinbar bullish (close> open) dan bearish (close< open) berdasarkan candlestick.

  3. Periksa apakah pinbar tinggi/rendah melanggar pinbar tinggi/rendah dari lilin sebelumnya. Pinbar bullish yang melanggar tinggi sebelumnya memberikan sinyal panjang. Pinbar bearish yang melanggar rendah sebelumnya memberikan sinyal pendek.

  4. Periksa juga apakah MA cepat di atas MA lambat untuk menentukan tren naik, dan sebaliknya untuk tren turun.

  5. Sinyal panjang hanya berlaku ketika MA cepat/lambat menunjukkan tren naik. Sinyal pendek hanya berlaku ketika MA cepat/lambat menunjukkan tren turun. Ini menghindari sinyal yang salah selama tindakan harga yang terikat kisaran.

  6. Pada sinyal panjang yang valid, pergi panjang dengan stoploss dan takeprofit yang didefinisikan sebelumnya. pada sinyal pendek yang valid, pergi pendek dengan stoploss dan takeprofit yang didefinisikan sebelumnya.

  7. Jika MA cepat melintasi di bawah MA lambat, tutup posisi yang ada.

Keuntungan

  • Menggunakan pinbar tinggi/rendah sebagai tingkat breakout yang mewakili momentum yang kuat.

  • Mempertimbangkan arah tren untuk menghindari sinyal yang salah selama tindakan harga yang terikat kisaran, meningkatkan akurasi.

  • Menangkap tren dan breakout, berkinerja baik di pasar tren.

  • Parameter dapat dioptimalkan untuk produk dan kerangka waktu yang berbeda.

Risiko dan Pengurangan

  • Resiko gagal keluar dapat dikurangi dengan menggunakan tingkat keluar yang lebih luas dan momentum yang lebih kuat.

  • Risiko identifikasi tren yang tidak akurat dapat dikurangi dengan mengubah parameter MA atau menambahkan indikator tren lainnya.

  • Stoploss terlalu ketat menyebabkan keluar prematur. Dapat secara dinamis menyesuaikan stoploss berdasarkan produk dan kerangka waktu.

  • Mengambil keuntungan terlalu ketat membatasi keuntungan. dapat secara dinamis menetapkan target keuntungan dan rasio risiko-manfaat.

Peluang Peningkatan

  • Secara keseluruhan, parameter MA, breakout, stoploss dan takeprofit dapat dioptimalkan di berbagai produk dan kerangka waktu untuk strategi yang disesuaikan.

  • MAs yang berbeda seperti EMA, SMA dll dapat diuji untuk menemukan indikator yang optimal.

  • Indikator tambahan seperti Momentum dapat meningkatkan akurasi tren.

  • Parameter dapat dioptimalkan secara dinamis menggunakan teknik pembelajaran mesin.

  • Tingkat keberhasilan breakout dapat ditingkatkan melalui pembelajaran statistik.

Ringkasan

Strategi ini menggabungkan tren dan momentum untuk sinyal yang disaring secara teoritis. Kuncinya adalah optimasi parameter yang kuat di seluruh produk dan kerangka waktu untuk kinerja yang baik. Selain itu, indikator bantu dan teknik pembelajaran mesin dapat lebih meningkatkan strategi. Dengan peningkatan terus-menerus, ini dapat menjadi sistem perdagangan trend-breakout yang kuat.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Backtested Time Frame: H1
//Default Settings: Are meant to run successfully on all currency pairs to reduce over-fitting.
//Risk Warning: This is a forex trading robot, backtest performance will not equal future performance, USE AT YOUR OWN RISK.
//Code Warning: Although every effort has been made for robustness, this code has not been vetted by independent 3rd parties.
strategy("Pin Bar Strategy v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=1.9,confirm=false)
trd_rewd = input(title="Risk : Reward (1 : x*SL, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=3.1,confirm=false)
sma_fast = input(title="Fast MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=20,confirm=false)
sma_slow = input(title="Slow MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
use_slpe = input(title="Use MA Slope (Boolean)",type=input.bool,defval=true,confirm=false)
slp_long = input(title="Bull Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=1,confirm=false)
slp_shrt = input(title="Bear Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=-1,confirm=false)
emg_exit = input(title="Exit When MA Re-Cross (Boolean)",type=input.bool,defval=true,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
fastSMA = sma(close, sma_fast)
slowSMA = sma(close, sma_slow)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
smaUpTrend = (fastSMA > slowSMA) and (fastSMA[1] > slowSMA[1]) and (fastSMA[2] > slowSMA[2]) and (fastSMA[3] > slowSMA[3]) and (fastSMA[4] > slowSMA[4])
smaDnTrend = (fastSMA < slowSMA) and (fastSMA[1] < slowSMA[1]) and (fastSMA[2] < slowSMA[2]) and (fastSMA[3] < slowSMA[3]) and (fastSMA[4] < slowSMA[4])
candleUpTrend = (close[5] > fastSMA[5]) and (open[5] > fastSMA[5]) and (close[6] > fastSMA[6]) and (open[6] > fastSMA[6]) and (close[7] > fastSMA[7]) and (open[7] > fastSMA[7]) and (close[8] > fastSMA[8]) and (open[8] > fastSMA[8]) and (close[9] > fastSMA[9]) and (open[9] > fastSMA[9]) and (close[10] > fastSMA[10]) and (open[10] > fastSMA[10])
candleDnTrend = (close[5] < fastSMA[5]) and (open[5] < fastSMA[5]) and (close[6] < fastSMA[6]) and (open[6] < fastSMA[6]) and (close[7] < fastSMA[7]) and (open[7] < fastSMA[7]) and (close[8] < fastSMA[8]) and (open[8] < fastSMA[8]) and (close[9] < fastSMA[9]) and (open[9] < fastSMA[9]) and (close[10] < fastSMA[10]) and (open[10] < fastSMA[10])

// Specify Piercing Conditions
bullPierce = ((low < fastSMA) and (open > fastSMA) and (close > fastSMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastSMA) and (open < fastSMA) and (close < fastSMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))

// MA Slope Function
angle(_source) =>
    rad2degree=180/3.14159265359
    ang=rad2degree*atan((_source[0] - _source[1])/atr(atr_valu)) 

// Calculate MA Slope
fastSlope=angle(fastSMA)
slowSlope=angle(slowSMA)
slopingUp = fastSlope > slp_long
slopingDn = fastSlope < slp_shrt
    
// Specify Entry Conditions
longEntry = smaUpTrend and bullishPinBar and bullPierce
shortEntry = smaDnTrend and bearishPinBar and bearPierce
longEntryWithSlope = smaUpTrend and bullishPinBar and bullPierce and slopingUp
shortEntryWithSlope = smaDnTrend and bearishPinBar and bearPierce and slopingDn

// Specify Secondary Exit Conditions
longExit = crossunder(fastSMA, slowSMA)
shortExit = crossover(fastSMA, slowSMA)

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    takeProfit = entryPrice + trd_rewd * (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    takeProfit = entryPrice - trd_rewd * (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit)
    
// Execute Long Entry w/o Slope
if (longEntry and use_slpe == false)
    enterlong()
    
// Execute Long Entry w/ Slope
if (longEntryWithSlope and use_slpe == true)
    enterlong()

// Exit Long Due to Re-Cross
if(longExit and strategy.position_size > 0 and emg_exit)    
    strategy.order("exit long, re-cross", strategy.short, abs(strategy.position_size))

// Cancel the Long Entry
strategy.cancel("long", barssince(longEntry) > ent_canc)

// Execute Short Entry w/o Slope
if (shortEntry and use_slpe == false)
    entershort() 
    
// Execute Short Entry w/ Slope
if (shortEntryWithSlope and use_slpe == true)
    entershort() 

// Exit Short Due to Re-Cross
if(shortExit and strategy.position_size < 0 and emg_exit)    
    strategy.order("exit short, re-cross", strategy.long, abs(strategy.position_size))

// Cancel the Short Entry
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Plot Moving Averages to Chart
plot(fastSMA, color=color.red)
plot(slowSMA, color=color.blue)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, style=shape.arrowup, location=location.abovebar, color=#FF0000, text='')
plotshape(bearishPinBar, style=shape.arrowdown, location=location.belowbar, color=#0000FF, text='')

Lebih banyak