
Artikel ini menggambarkan strategi perdagangan yang menggabungkan indeks yang agak kuat (RSI) dengan titik balik Fibonacci. Strategi ini mula-mula mengira titik balik Fibonacci yang penting berdasarkan pergerakan harga sejarah dalam tempoh tertentu, dan kemudian menggabungkan RSI untuk menentukan sama ada pasaran telah membeli atau menjual, dan menghantar isyarat perdagangan di sekitar titik balik.
Strategi ini berdasarkan kepada prinsip-prinsip berikut:
Menggunakan data harga untuk satu tempoh tertentu (seperti 200 K-garis), mengira nilai purata harga untuk tempoh itu, perbezaan piawai dan titik Fibonacci yang penting (seperti 0.764);
Apabila harga mendekati titik balik ke atas atau ke bawah, gunakan RSI untuk menentukan sama ada kawasan itu berada dalam keadaan overbought atau oversold;
Jika RSI menunjukkan isyarat overbought atau oversold, ia akan memberi isyarat overbought atau oversold berhampiran titik berbalik;
Ia juga menetapkan tahap hentian dan hentian, dan menutup kedudukan apabila melebihi harga yang ditetapkan atau mencetuskan keadaan hentian.
Ini adalah proses asas strategi ini untuk menentukan masa perdagangan.
Berbanding dengan perdagangan menggunakan RSI atau Fibonacci secara tunggal, strategi gabungan ini mempunyai kelebihan berikut:
Penapisan dua arah, mengurangkan isyarat palsu dan meningkatkan kualiti isyarat;
Ia adalah kaedah analisis teknikal yang lebih klasik untuk melakukan perdagangan berbalik di dekat titik balik.
Apabila anda menetapkan Hentikan Kerugian, anda dapat mengawal kerugian maksimum dalam satu urus niaga dengan berkesan.
Boleh dioptimumkan dengan parameter, menyesuaikan parameter penunjuk dan tetapan putaran balik untuk menyesuaikan diri dengan pelbagai kitaran dan varieti.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Kebarangkalian untuk melonjak semula selepas titik balik kritikal tidak 100 peratus, dan ia perlu digabungkan dengan entiti harga.
RSI satu kitaran mungkin menghasilkan isyarat palsu untuk membalikkan kematian, dan pengesahan pelbagai kitaran boleh dipertimbangkan;
Ia boleh menyebabkan kerugian yang lebih besar jika titik henti terlalu longgar.
Stop loss boleh ditembusi apabila harga saham bergelombang dengan kuat, dan perlu dipertimbangkan untuk melonggarkan titik stop loss.
Risiko di atas boleh dikawal dengan cara seperti penyesuaian parameter, penggabungan penunjuk optimum.
Strategi ini juga boleh dioptimumkan di antara lain:
Meningkatkan pengesahan kepada penunjuk kadar transaksi untuk mengelakkan penembusan palsu dalam jumlah yang rendah;
Mengambil kira petunjuk tali pinggang Brin dan memberi isyarat apabila tali pinggang pecah;
Membina model pembelajaran mesin atau rangkaian saraf untuk mengenal pasti peluang dagangan berkualiti secara automatik;
Menggunakan kaedah seperti algoritma genetik untuk mengoptimumkan parameter secara automatik, menyesuaikan titik hentian kerugian.
Artikel ini menerangkan secara terperinci strategi perdagangan kuantitatif yang menggabungkan RSI dan Fibonacci retracement untuk membuat keputusan. Strategi ini menggabungkan analisis indikator ganda dengan strategi teknik klasik, meningkatkan kualiti isyarat perdagangan dengan syarat mengawal risiko.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Gab Fib + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4)
// Inputs
timeFilter = year >= 2000
// Stop Loss
stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100
// RSI Inputs
len = input(title="[RSI] Length", minval=0, step=1, defval=14)
overSold = input(title="[RSI] Over Sold %", defval=30)
overBought = input(title="[RSI] Over Bought %", defval=70)
// Fibonacci Levels
length = input(title="[Fibonacci] Length", defval=200, minval=1)
src = input(hlc3, title="[Fibonacci] Source")
mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50)
level = input(title="[Fibonacci] Level", defval=764)
// Calculate Fibonacci
basis = vwma(src, length)
dev = mult * stdev(src, length)
fu764= basis + (0.001*level*dev)
fu1= basis + (1*dev)
fd764= basis - (0.001*level*dev)
fd1= basis - (1*dev)
// Calculate RSI
vrsi = rsi(close, len)
// Calculate the Targets
targetUp = fd764
targetDown = fu764
// Actual Targets
bought = strategy.position_size[0] > strategy.position_size[1]
exit_long = valuewhen(bought, targetUp, 0)
sold = strategy.position_size[0] < strategy.position_size[1]
exit_short = valuewhen(sold, targetDown, 0)
// Calculate Stop Losses
sl_long = close * (1-stop_loss)
sl_short = close * (1+stop_loss)
// Conditions to Open Trades
openLong = low < fd1 and crossover(vrsi[1], overSold)
openShort = high > fu1 and crossunder(vrsi[1], overBought)
// Conditions to Close Trades
closeLong = high > exit_long or sl_long
closeShort = low < exit_short or sl_short
//Rounding to MinTick value
roundtargetUp = round_to_mintick(targetUp)
roundtargetDown = round_to_mintick(targetDown)
roundsllong = round_to_mintick(sl_long)
roundslshort = round_to_mintick(sl_short)
// Plots
plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis")
plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target")
plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top")
plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target")
plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom")
// Strategy Orders
if timeFilter
// Entry Orders
strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong))
strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close, alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort))
// Exit Orders
strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker))
strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))