
Strategi ini didasarkan pada dua indikator terkenal: MACD dan relative strength (RS). Dengan menggabungkan keduanya, kita mendapatkan sinyal beli yang kuat. Sebenarnya, keanehan strategi ini adalah bahwa ia berasal dari satu indikator yang lain. Oleh karena itu, kami membangun MACD, yang sumbernya adalah nilai RS. Strategi ini hanya mempertimbangkan sinyal beli dan mengabaikan sinyal jual, karena mereka sebagian besar kehilangan.
RS adalah indikator yang mengukur ketidaksempurnaan antara momentum dan asumsi efisiensi pasar. Digunakan oleh para profesional, RS adalah salah satu indikator yang paling stabil.
RS = harga saat ini / harga tertinggi dalam RS panjang
Dengan demikian, kita dapat membandingkan harga saat ini dengan harga tertinggi dalam periode waktu yang ditentukan pengguna.
MACD adalah salah satu indikator yang paling terkenal, yang mengukur jarak antara dua rata-rata bergerak indeks: garis cepat dan garis lambat. Semakin lebar jarak, semakin besar pergerakan, dan sebaliknya. Kami akan memetakan nilai dari garis jarak ini, dan menyebutnya garis macd. MACD menggunakan rata-rata bergerak ketiga yang lebih rendah dari dua yang sebelumnya.
Perlu dicatat bahwa dua rata-rata bergerak sebelumnya dibangun dengan menggunakan nilai RS sebagai sumbernya. Jadi, kita baru saja membangun satu indikator dari indikator lain. Metode ini sangat kuat karena jarang digunakan dan membawa nilai untuk strategi.
Strategi ini menggabungkan MACD dan RS, dua indikator yang secara terpisah sangat kuat. MACD mampu menangkap tren jangka pendek dan perubahan momentum, sedangkan RS mencerminkan kekuatan tren jangka menengah dan panjang. Menggunakan keduanya dalam kombinasi, mempertimbangkan faktor jangka pendek dan faktor jangka panjang, membuat sinyal beli lebih dapat diandalkan.
Selain itu, strategi ini sangat unik karena secara kreatif meningkatkan efektivitas strategi dengan menderivasi indikator MACD dari indikator RS. Desain inovatif ini kemungkinan besar akan menghasilkan keuntungan ekstra karena jarang orang melakukannya.
Akhirnya, strategi ini memiliki manajemen dana dan mekanisme stop loss yang dapat secara efektif mengontrol risiko dan membatasi kerugian dari transaksi individu.
Risiko terbesar dari strategi ini adalah kemungkinan bahwa indikator RS dan MACD akan mengirimkan sinyal yang salah. Meskipun kedua indikator ini sangat kuat, tidak ada indikator teknis yang dapat memprediksi masa depan 100 persen, dan sinyal dapat terkadang gagal. Selain itu, indikator RS sendiri lebih condong pada penilaian tren jangka menengah dan jangka panjang, dan sinyal yang salah dapat muncul dalam jangka pendek.
Untuk mengurangi risiko, parameter RS dan MACD dapat disesuaikan agar lebih sesuai dengan varietas perdagangan dan lingkungan pasar tertentu. Selain itu, stop loss yang lebih ketat dapat diatur. Secara umum, menggunakan stop loss untuk mengendalikan kerugian tunggal adalah cara terbaik untuk mengatasi risiko strategi ini.
Pertama, Anda dapat menguji pasar yang berbeda (seperti saham, forex, cryptocurrency, dll.) untuk melihat varietas mana yang paling efektif, dan kemudian fokus pada varietas terbaik.
Kedua, kita dapat mencoba mengoptimalkan parameter RS dan MACD secara otomatis menggunakan algoritma pembelajaran mesin, bukan dengan memilih nilai tetap secara manual. Hal ini dapat meningkatkan fleksibilitas parameter secara signifikan.
Ketiga, dapat dipertimbangkan untuk menambahkan indikator lain yang terlibat dalam membangun sinyal perdagangan, membentuk model multi-faktor, meningkatkan akurasi sinyal. Misalnya, menambahkan indikator volume transaksi dan sebagainya.
Strategi ini menggunakan kombinasi MACD dan RS untuk memberikan sinyal pembelian yang kuat. Inovasi dari strategi ini adalah bahwa indikator MACD diturunkan dari indikator RS, yang memungkinkan penggabungan indikator dengan indikator, untuk meningkatkan efektivitas. Strategi ini memiliki mekanisme masuk, stop loss, dan manajemen dana yang jelas, yang dapat mengontrol risiko secara efektif.
/*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)