Strategi ini didasarkan pada dua indikator yang terkenal: MACD dan Relative Strength (RS). Dengan menggabungkannya, kita mendapatkan sinyal beli yang kuat. Sebenarnya, fitur khusus dari strategi ini adalah bahwa ia menciptakan indikator dari indikator. Dengan demikian, kita membangun MACD yang sumbernya adalah nilai RS. Strategi ini hanya mengambil sinyal beli, mengabaikan sinyal jual karena sebagian besar adalah pecundang. Ada juga metode manajemen uang yang memungkinkan kita untuk menginvestasikan kembali sebagian keuntungan atau mengurangi ukuran pesanan jika terjadi kerugian besar.
RS adalah indikator yang mengukur anomali antara momentum dan asumsi efisiensi pasar. Hal ini digunakan oleh para profesional dan merupakan salah satu indikator yang paling kuat. Ide adalah untuk memiliki aset yang melakukan lebih baik dari rata-rata, berdasarkan kinerja masa lalu mereka.
RS = Harga saat ini / tertinggi tertinggi selama RS Panjang periode
Dengan demikian kita dapat menempatkan harga saat ini dalam hubungan dengan harga tertinggi selama periode yang ditentukan pengguna.
MACD adalah salah satu indikator yang paling terkenal, mengukur jarak antara dua rata-rata bergerak eksponensial: satu cepat dan satu lebih lambat. Jarak yang luas menunjukkan momentum yang cepat dan sebaliknya. Kami akan memetakan nilai jarak ini dan menyebut garis ini macdline. MACD menggunakan rata-rata bergerak ketiga dengan periode yang lebih rendah dari dua yang pertama. Rata-rata bergerak terakhir ini akan memberikan sinyal ketika melintasi macdline. Oleh karena itu dibangun menggunakan nilai macdline sebagai sumbernya.
Hal ini penting untuk dicatat bahwa dua MAs pertama dibangun menggunakan nilai RS sebagai sumber mereka. jadi kita hanya membangun indikator indikator. jenis metode ini sangat kuat karena jarang digunakan dan membawa nilai untuk strategi.
Strategi ini menggabungkan dua indikator yang sangat kuat secara individual: MACD dan RS. MACD mampu menangkap tren jangka pendek dan pergeseran momentum sementara RS mencerminkan kekuatan tren jangka menengah hingga panjang. Menggunakan mereka bersama-sama mempertimbangkan faktor jangka pendek dan jangka panjang, membuat sinyal beli lebih dapat diandalkan.
Selain itu, strategi ini sangat unik karena memperoleh MACD dari indikator RS, secara kreatif meningkatkan efek strategi.
Akhirnya, strategi ini memiliki manajemen risiko dan mekanisme stop loss yang secara efektif mengendalikan risiko dan membatasi kerugian per perdagangan.
Risiko terbesar dari strategi ini adalah kemungkinan indikator RS dan MACD memberikan sinyal yang salah. Meskipun kedua indikator ini kuat, tidak ada indikator teknis yang dapat memprediksi 100% masa depan dan sinyal kadang-kadang gagal. Juga, RS sendiri bias terhadap penilaian tren jangka menengah dan panjang dan dapat menghasilkan sinyal yang menyesatkan dalam jangka pendek.
Untuk mengurangi risiko, parameter RS dan MACD dapat disesuaikan agar lebih sesuai dengan instrumen perdagangan tertentu dan lingkungan pasar. Juga, rentang stop loss yang lebih ketat dapat diberlakukan. Secara umum, menggunakan stop loss untuk mengendalikan kerugian per perdagangan adalah metode terbaik untuk mengatasi risiko strategi ini.
Pertama, uji pasar mana (misalnya saham, forex, crypto dll) yang memberikan efek terbaik dari strategi ini, kemudian fokus pada aset yang optimal.
Kedua, cobalah menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter RS dan MACD secara otomatis alih-alih memperbaikinya secara manual.
Ketiga, pertimbangkan untuk memasukkan indikator lain untuk menetapkan sinyal perdagangan, membentuk model multi-faktor untuk meningkatkan akurasi sinyal.
Strategi ini memanfaatkan indikator MACD dan RS secara sinergis untuk memberikan sinyal beli yang kuat. Keunikan dari strategi ini adalah memperoleh MACD dari indikator RS, mewujudkan kopling antara indikator untuk meningkatkan efektivitas. Strategi ini memiliki mekanisme entri, stop loss dan manajemen uang yang jelas yang secara efektif mengendalikan risiko. Langkah selanjutnya adalah meningkatkan strategi melalui optimasi parameter, penyempurnaan generasi sinyal, penambahan faktor lain, dll.
/*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)