
Strategi pembalikan garisan pendek adalah strategi perdagangan trend berdasarkan bentuk garisan pendek. Ia menggunakan bentuk garisan pendek sebagai isyarat, digabungkan dengan purata bergerak untuk menentukan arah trend, untuk mencapai kadar kemenangan yang tinggi.
Strategi ini menembusi isyarat masuk dalam bentuk garis pendek. Secara khusus, isyarat dihasilkan apabila memenuhi dua syarat berikut:
Sinyal gabungan seperti ini boleh menapis sebahagian besar bunyi bising, yang meningkatkan ketepatan masuk.
Strategi ini menggunakan purata bergerak dari tiga tempoh yang berbeza untuk menilai trend. Khususnya, garis cepat, garis tengah, dan garis lambat ditakrifkan sebagai trend apabila disusun secara serentak, atau ditakrifkan sebagai penyusunan.
Apabila masuk dengan banyak kepala, minta garis cepat > garis tengah > garis perlahan; apabila masuk dengan kepala kosong, minta garis cepat < garis tengah < garis perlahan.
Strategi ini menggunakan mekanisme pengesanan terhad yang unik. Apabila anda membuka kedudukan, anda akan menjejaki titik terhad yang sesuai dengan jumlah mata dan perpindahan yang ditetapkan oleh pengguna. Ini dapat mengunci keuntungan maksimum dan mengawal risiko.
Isyarat penembusan garis pendek membolehkan strategi hanya membuka kedudukan pada peluang kebarangkalian yang tinggi, mengelakkan perdagangan yang terlalu bising. Di samping itu, dalam kombinasi dengan penilaian trend, ia dapat menyaring kebanyakan operasi arah bukan utama. Ini menjamin ketepatan tinggi strategi.
Mekanisme penangguhan kerugian yang unik adalah ciri utama strategi ini. Ia dapat mengawal setiap penangguhan kerugian dengan tepat dalam julat kecil, memastikan kemenangan yang tinggi dan keuntungan yang sangat kuat.
Hasil simulasi menunjukkan bahawa selepas menggunakan mekanisme ini, pasangan mata wang pelbagai mencapai kadar pulangan keseluruhan lebih dari 1000%, keuntungan maksimum melebihi 100 kali ganda, dan keuntungan melonjak ke tahap yang belum pernah dilihat sebelumnya.
Memandangkan keputusan ujian hampir sama dengan piala suci, kemungkinan besar ini adalah hasil daripada simulasi yang berlebihan di pasaran. Mekanisme penangguhan kerugian cakera mungkin tidak berfungsi dengan tepat seperti ujian, dan akan menghadapi penarikan balik.
Selain itu, tempoh ujian hanya dua tahun, perubahan struktur pasaran juga boleh mempengaruhi prestasi cakera.
Tracking stop loss yang terlalu sensitif boleh menyebabkan terlalu banyak trigger stop loss. Selain itu, kejadian kejutan pasaran juga boleh menyebabkan stop loss tidak berkesan. Ini adalah risiko yang perlu dihadapi menggunakan tracking stop loss.
Tracking stop loss adalah kunci kepada keseluruhan strategi keuntungan pecah. Untuk menjadikannya kedua-dua sensitif dan boleh dipercayai, anda boleh cuba untuk mengendurkan dengan sewajarnya untuk mengesan titik stop loss dan menjadikannya kurang sensitif.
Menambah tetingkap masa ujian juga boleh memeriksa parameter yang stabil.
Tempoh purata bergerak semasa bukanlah kombinasi parameter yang optimum. Dengan ujian pengoptimuman, parameter yang lebih baik boleh didapati untuk menghasilkan kesan yang lebih baik.
Sebagai contoh, menambah jarak kitaran garisan pantas dan garisan tengah, atau menyesuaikan cara silang tiga garisan dan sebagainya.
Strategi penembusan garis pendek telah mencapai prestasi ujian simulasi yang luar biasa melalui kemasukan yang cekap dan pemberhentian super kuat. Tetapi kita juga perlu sedar tentang risiko overfit di dalamnya dan bersedia untuk mengawal risiko.
Dengan penyesuaian parameter atau pengoptimuman yang sesuai, strategi ini mungkin dapat memperoleh keuntungan yang ketara di pasaran nyata dan menjadi sistem trend yang kuat. Konsep khasnya untuk menjejaki hentian kerugian juga memberi kita ilham yang berharga dan berpotensi untuk menghasilkan lebih banyak strategi inovatif.
/*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)