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

img

Ringkasan

Strategi Pembalikan Bar Pin adalah strategi perdagangan trend berdasarkan corak harga jangka pendek. Ia menggunakan bar pin sebagai isyarat, digabungkan dengan purata bergerak untuk menentukan arah trend, untuk mencapai kemasukan yang sangat tepat. Ia juga menggunakan mekanisme berhenti yang unik untuk mencapai keuntungan yang sangat tinggi.

Prinsip-prinsip

Isyarat kemasukan

Isyarat masuk untuk strategi ini adalah menembusi bar pin. Secara khusus isyarat dicetuskan apabila:

  1. Satu corak jangka pendek tertentu terbentuk: isyarat menaik dari batang pin menaik, isyarat menurun dari batang pin menurun
  2. Bar pin menembusi purata bergerak: bar bullish menembusi MAs trend menurun, atau bar bearish menembusi MAs trend naik

Gabungan sedemikian memastikan penapisan keluar kebanyakan bunyi bising dan meningkatkan ketepatan kemasukan.

Definisi Trend

Strategi ini menggunakan tiga MA dari tempoh yang berbeza untuk menentukan trend. Khususnya, apabila MA cepat, sederhana dan perlahan sejajar ke satu arah, ia ditakrifkan sebagai trend. Jika tidak, ia dianggap sebagai penyatuan.

Untuk entri panjang, MA pantas > MA sederhana > MA perlahan diperlukan. Untuk entri pendek, MA pantas < MA sederhana < MA perlahan diperlukan.

Mekanisme Hentikan Kerugian

Strategi ini menggunakan mekanisme stop loss yang unik. Selepas masuk, titik stop loss optimum dikesan berdasarkan nilai yang ditakrifkan pengguna untuk titik trailing dan offset. Ini membolehkan memaksimumkan keuntungan yang ditangkap sambil mengawal risiko.

Analisis Kelebihan

Pendaftaran Kecekapan Tinggi

Isyarat menembusi hanya membenarkan kemasukan pada titik peluang kebarangkalian yang tinggi, mengelakkan perdagangan yang terlalu bising.

Mengambil keuntungan yang sangat kuat

Stop trailing unik adalah kemuncak terbesar strategi ini. Ia dengan tepat mengawal stop loss dalam julat kecil berdasarkan setiap perdagangan, sambil memastikan keuntungan maksimum yang ditangkap.

Hasil simulasi menunjukkan keuntungan gila selepas menggunakan mekanisme ini, dengan pulangan keseluruhan melebihi 1000% untuk beberapa pasangan, dan maksimum keuntungan setiap perdagangan lebih daripada 100 kali risiko awal.

Analisis Risiko

Risiko Kelebihan

Memandangkan hasil yang hampir seperti Holy Grail, sangat mungkin ini adalah simulasi pasaran yang terlalu banyak.

Juga, tempoh ujian dua tahun yang pendek mungkin tidak menangkap perubahan struktur rejim pasaran yang boleh memberi kesan kepada hasil sebenar.

Risiko Penghentian Belakang

Nilai hentian yang terlalu sensitif boleh menyebabkan hentian yang berlebihan yang tidak diingini. Kejadian pasaran tiba-tiba juga boleh membatalkan pesanan hentian kerugian. Ini adalah risiko intrinsik yang berkaitan dengan menggunakan hentian hentian.

Arahan pengoptimuman

Sesuaikan Parameter Trailing Stop

Untuk menjadikannya cepat dan boleh dipercayai, cuba santai titik belakang untuk mengelakkan terlalu sensitif.

Meningkatkan jangka masa ujian juga membantu memeriksa ketahanan parameter.

Mengoptimumkan Tempoh MA

Sebagai contoh, meningkatkan perbezaan antara tempoh MA cepat dan sederhana, atau mengubah cara MA berinteraksi.

Kesimpulan

Strategi Pembalikan Bar Pin Penembusan mencapai hasil backtest yang menakjubkan melalui kemasukan kecekapan tinggi dan mengambil keuntungan yang melampau.

Dengan penyesuaian atau pengoptimuman parameter yang betul, strategi ini mungkin dapat memberikan keuntungan yang 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 lanjut