
Strategi ini adalah berdasarkan dua petunjuk yang terkenal: MACD dan kekuatan relatif ((RS)). Dengan menggabungkannya bersama-sama, kita mendapat isyarat beli yang kuat. Sebenarnya, keistimewaan strategi ini adalah bahawa ia berasal dari satu petunjuk yang lain. Oleh itu, kita membina MACD, yang sumbernya adalah nilai RS.
RS adalah penunjuk yang tidak normal antara pengukuran momentum dan hipotesis kecekapan pasaran. Ia digunakan oleh para profesional dan merupakan salah satu penunjuk yang paling stabil. Ia difikirkan sebagai aset yang memegang prestasi yang lebih baik daripada purata, berdasarkan prestasi mereka di masa lalu.
RS = harga semasa / harga tertinggi sepanjang RS
Oleh itu, kita boleh membandingkan harga semasa dengan harga tertinggi dalam tempoh yang ditentukan oleh pengguna.
MACD adalah salah satu penunjuk yang paling terkenal, ia mengukur jarak antara dua purata bergerak indeks: satu garis cepat dan satu garis perlahan. Semakin luas jarak menunjukkan lebih banyak pergerakan, dan sebaliknya. Kami akan memetakan nilai garis jarak ini, dan memanggilnya garis macd.
Perlu diperhatikan bahawa kedua-dua purata bergerak yang pertama dibina menggunakan nilai RS sebagai sumber mereka. Oleh itu, kami baru sahaja membina satu indikator dari satu indikator ke indikator lain.
Strategi ini menggabungkan MACD dan RS, dua penunjuk yang sangat kuat secara berasingan. MACD mampu menangkap trend jangka pendek dan perubahan momentum, manakala RS mencerminkan kekuatan trend jangka menengah dan jangka panjang. Menggunakan mereka dalam kombinasi, mempertimbangkan faktor jangka pendek dan faktor jangka panjang, menjadikan isyarat pembelian lebih dipercayai.
Di samping itu, strategi ini sangat unik, dengan meningkatkan kesan strategi secara kreatif dengan menjana indikator MACD dari indikator RS. Reka bentuk inovatif ini mungkin membawa keuntungan tambahan, kerana jarang orang melakukannya.
Akhirnya, strategi mempunyai pengurusan wang dan mekanisme hentikan kerugian yang dapat mengawal risiko dengan berkesan dan mengehadkan kerugian dalam perdagangan individu.
Risiko terbesar dalam strategi ini adalah kemungkinan bahawa indikator RS dan MACD akan menghantar isyarat yang salah. Walaupun kedua-dua indikator ini sangat mantap, tidak ada indikator teknikal yang dapat meramalkan masa depan 100 peratus, dan isyarat mungkin kadang-kadang gagal. Selain itu, indikator RS sendiri lebih memihak kepada penilaian trend jangka panjang, dan isyarat yang salah mungkin muncul dalam jangka pendek.
Untuk mengurangkan risiko, parameter RS dan MACD boleh diselaraskan dengan lebih sesuai dengan jenis perdagangan dan keadaan pasaran tertentu. Selain itu, anda boleh menetapkan margin stop loss yang lebih ketat. Secara umum, menggunakan stop loss untuk mengawal kerugian tunggal adalah cara terbaik untuk menangani risiko strategi ini.
Pertama, anda boleh menguji pasaran yang berbeza (seperti saham, forex, cryptocurrency, dan lain-lain) untuk melihat jenis strategi yang paling berkesan, dan kemudian fokus pada jenis yang terbaik.
Kedua, kita boleh cuba menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter RS dan MACD secara automatik, dan bukannya memilih nilai tetap secara manual. Ini boleh meningkatkan kemampuan parameter.
Ketiga, kita boleh mempertimbangkan untuk menambah petunjuk lain yang terlibat dalam pembentukan isyarat perdagangan, membentuk model pelbagai faktor, meningkatkan ketepatan isyarat.
Strategi ini menggunakan gabungan kedua-dua indikator MACD dan RS untuk memberikan isyarat pembelian yang kuat. Inovasi strategi ini adalah bahawa indikator MACD diturunkan dari indikator RS, untuk mewujudkan gabungan antara indikator dan indikator, untuk meningkatkan keberkesanan. Strategi ini mempunyai mekanisme masuk, hentikan dan pengurusan wang yang jelas, yang dapat mengawal risiko dengan berkesan.
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gsanson66
//This strategy calculates the Relative Strength and plot the MACD of this Relative Strenght
//We take only buy signals send by MACD
//@version=5
strategy("MACD OF RELATIVE STRENGHT STRATEGY", shorttitle="MACD RS STRATEGY", precision=4, overlay=false, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18, slippage=3)
//------------------------------TOOL TIPS--------------------------------//
t1 = "Relative Strength length i.e. number of candles back to find the highest high and compare the current price with this high."
t2 = "Relative Strength fast EMA length used to plot the MACD."
t3 = "Relative Strength slow EMA length used to plot the MACD."
t4 = "Macdline SMA length used to plot the MACD."
t5 = "The maximum loss a trade can incur (in percentage of the trade value)"
t6 = "Each gain or losse (relative to the previous reference) in an amount equal to this fixed ratio will change quantity of orders."
t7 = "The amount of money to be added to or subtracted from orders once the fixed ratio has been reached."
//----------------------------------------FUNCTIONS---------------------------------------//
//@function Displays text passed to `txt` when called.
debugLabel(txt, color, loc) =>
label.new(bar_index, loc, text=txt, color=color, style=label.style_label_lower_right, textcolor=color.black, size=size.small)
//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)
//---------------------------------------USER INPUTS--------------------------------------//
//Technical parameters
rs_lenght = input.int(defval=300, minval=1, title="RS Length", group="Technical parameters", tooltip=t1)
fast_length = input(title="MACD Fast Length", defval=14, group="Technical parameters", tooltip=t2)
slow_length = input(title="MACD Slow Length", defval=26, group="Technical parameters", tooltip=t3)
signal_length = input.int(title="MACD Signal Smoothing", minval=1, maxval=50, defval=10, group="Technical parameters", tooltip=t4)
//Risk Management
slMax = input.float(8, "Max risk per trade (in %)", minval=0, group="Risk Management", tooltip=t5)
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management", tooltip=t6)
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management", tooltip=t7)
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")
//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Relative Strenght Calculation
rs = close/ta.highest(high, rs_lenght)
//MACD of RS Calculation
[macdLine, signalLine, histLine] = ta.macd(rs, fast_length, slow_length, signal_length)
//Money management
equity = math.abs(strategy.equity - strategy.openprofit)
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na
//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//
//Checking if the date belong to the range
inRange := true
//Checking performances of the strategy
if equity > capital_ref + fixedRatio
spread = (equity - capital_ref)/fixedRatio
nb_level = int(spread)
increasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder + increasingOrder
capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
spread = (capital_ref - equity)/fixedRatio
nb_level = int(spread)
decreasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder - decreasingOrder
capital_ref := capital_ref - nb_level*fixedRatio
//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
strategy.close_all()
debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116), loc=macdLine)
//-----------------------------------EXIT SIGNAL------------------------------//
if strategy.position_size>0 and histLine<0
strategy.close("Long")
//-------------------------------BUY CONDITION-------------------------------------//
if histLine>0 and not (strategy.position_size>0) and inRange
qty = cashOrder/close
stopLoss = close*(1-slMax/100)
strategy.entry("Long", strategy.long, qty)
strategy.exit("Exit Long", "Long", stop=stopLoss)
//---------------------------------PLOTTING ELEMENT----------------------------------//
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macdLine, title="MACD", color=color.blue)
plot(signalLine, title="Signal", color=color.orange)
plot(histLine, title="Histogram", style=plot.style_columns, color=(histLine>=0 ? (histLine[1] < histLine ? #26A69A : #B2DFDB) : (histLine[1] < histLine ? #FFCDD2 : #FF5252)))
plotchar(rs, "Relative Strenght", "", location.top, color=color.yellow)