Strategi Pembalikan Bar Pin Pencernaan

Penulis:ChaoZhang, Tanggal: 2024-01-25 12:29:29
Tag:

img

Gambaran umum

Strategi Reversal Bar adalah strategi perdagangan tren yang didasarkan pada pola harga jangka pendek. Strategi ini menggunakan pin bar sebagai sinyal, dikombinasikan dengan moving average untuk menentukan arah tren, untuk mencapai entri presisi tinggi.

Prinsip-prinsip

Sinyal Masuk

Sinyal masuk untuk strategi ini adalah menembus batang pin. Secara khusus, sinyal dipicu ketika:

  1. Sebuah pola jangka pendek tertentu terbentuk: sinyal bullish dari pin bar bullish, sinyal bearish dari pin bar bearish
  2. Bar pin menembus rata-rata bergerak: bar bullish menembus MAs tren menurun, atau bar bearish menembus MAs tren naik

Definisi Tren

Strategi ini menggunakan tiga MAs dari periode yang berbeda untuk mendefinisikan tren. Secara khusus, ketika MAs cepat, menengah dan lambat sejajar ke satu arah, itu didefinisikan sebagai tren. Jika tidak, itu dianggap sebagai konsolidasi.

Untuk entri panjang, MA cepat > MA menengah > MA lambat diperlukan.

Mekanisme Stop Loss

Strategi ini menggunakan mekanisme stop loss trailing yang unik. Setelah masuk, titik stop loss optimal dilacak berdasarkan nilai yang ditentukan pengguna untuk titik trailing dan offset. Hal ini memungkinkan memaksimalkan keuntungan yang ditangkap sambil mengendalikan risiko.

Analisis Keuntungan

Masuk dengan Efisiensi Tinggi

Sinyal menembus memungkinkan masuk hanya pada titik peluang probabilitas tinggi, menghindari perdagangan yang terlalu bising.

Mengambil Keuntungan yang Sangat Besar

Stop trailing yang unik adalah sorotan terbesar dari strategi ini. Hal ini secara tepat mengontrol stop loss dalam kisaran kecil berdasarkan per perdagangan, sambil memastikan keuntungan maksimum yang ditangkap.

Analisis Risiko

Risiko Kelemahan

Selain itu, periode uji coba dua tahun yang singkat mungkin tidak menangkap perubahan struktural sistem pasar yang dapat mempengaruhi hasil nyata.

Risiko Penghentian Belakang

Nilai stop trailing yang terlalu sensitif dapat menyebabkan stop out yang tidak diinginkan yang berlebihan. peristiwa pasar yang tiba-tiba juga dapat membatalkan perintah stop loss trailing. ini adalah risiko intrinsik yang terkait dengan menggunakan stop trailing.

Arahan Optimasi

Sesuaikan Parameter Trailing Stop

Meningkatkan jangka waktu pengujian juga membantu memeriksa ketahanan parameter.

Mengoptimalkan Periode MA

Periode MA saat ini mungkin bukan set parameter optimal. pengoptimalan lebih lanjut dapat menemukan nilai yang lebih baik untuk kinerja yang lebih baik.

Misalnya, meningkatkan perbedaan antara periode MA cepat dan menengah, atau memodifikasi cara MA berinteraksi.

Kesimpulan

Dengan penyesuaian atau pengoptimalan parameter yang tepat, strategi ini mungkin dapat memberikan keuntungan yang cukup besar dalam perdagangan langsung, menjadi sistem trend berikut yang kuat.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Time Frame: H1
strategy("Pin Bar Magic 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=0.5,confirm=false)
slPoints = input(title="Stop Loss Trail Points (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
slOffset = input(title="Stop Loss Trail Offset (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
sma_slow = input(title="Slow SMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
ema_medm = input(title="Medm EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=18,confirm=false)
ema_fast = input(title="Fast EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=6,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,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
slowSMA = sma(close, sma_slow)
medmEMA = ema(close, ema_medm)
fastEMA = ema(close, ema_fast)
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
fanUpTrend = (fastEMA > medmEMA) and (medmEMA > slowSMA)
fanDnTrend = (fastEMA < medmEMA) and (medmEMA < slowSMA)

// Specify Piercing Conditions
bullPierce = ((low < fastEMA) and (open > fastEMA) and (close > fastEMA)) or ((low < medmEMA) and (open > medmEMA) and (close > medmEMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastEMA) and (open < fastEMA) and (close < fastEMA)) or ((high > medmEMA) and (open < medmEMA) and (close < medmEMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))
    
// Specify Entry Conditions
longEntry = fanUpTrend and bullishPinBar and bullPierce
shortEntry = fanDnTrend and bearishPinBar and bearPierce

// 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)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    
// 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)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
    
// Execute Long Entry
if (longEntry)
    enterlong()

// Execute Short Entry
if (shortEntry)
    entershort() 
    
// Cancel the Entry if Bar Time is Exceeded
strategy.cancel("long", barssince(longEntry) > ent_canc)
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Force Close During Certain Conditions
strategy.close_all(when = hour==16 and dayofweek==dayofweek.friday, comment = "exit all, market-closed")
strategy.close_all(when = crossunder(fastEMA, medmEMA), comment = "exit long, re-cross")
strategy.close_all(when = crossover(fastEMA, medmEMA), comment = "exit short, re-cross")

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

// Plot Pin Bars to Chart
plotshape(bullishPinBar, text='Bull PB', style=shape.labeldown, location=location.abovebar, color=color.green, textcolor=color.white, transp=0)
plotshape(bearishPinBar, text='Bear PB', style=shape.labelup, location=location.belowbar, color=color.red, textcolor=color.white, transp=0)

// Plot Days of Week
plotshape(hour==0 and dayofweek==dayofweek.monday, text='Monday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.tuesday, text='Tuesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.wednesday, text='Wednesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.thursday, text='Thursday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.friday, text='Friday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==16 and dayofweek==dayofweek.friday, text='Market Closed', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)









Lebih banyak