MACD dari Strategi Kekuatan Relatif

Penulis:ChaoZhang, Tanggal: 2023-12-21 12:01:01
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

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.

Analisis Risiko

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.

Arah Peningkatan

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.

Kesimpulan

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)

Lebih banyak