Tren MACD mengikuti strategi jangka pendek


Tanggal Pembuatan: 2023-12-19 11:16:44 Akhirnya memodifikasi: 2023-12-19 11:16:44
menyalin: 0 Jumlah klik: 605
1
fokus pada
1621
Pengikut

Tren MACD mengikuti strategi jangka pendek

Ringkasan

Strategi short-tracking MACD adalah strategi trading short-line yang menggabungkan moving average, MACD indicator, dan Williamson indicator. Strategi ini menggunakan kombinasi tiga indikator yang berbeda untuk membentuk kondisi masuk dan keluar dari posisi kosong untuk menangkap karakteristik tren dari harga short-line.

Prinsip Strategi

Logika perdagangan utama dari strategi ini didasarkan pada:

  1. Ketika harga naik melalui garis rata-rata Exponential Moving Average (EMA), Anda akan melihat lebih tinggi, dan ketika harga turun, Anda akan melihat lebih rendah.

  2. Lihat lebih tinggi ketika MACD cepat lebih tinggi dari garis lambat, melihat lebih rendah ketika MACD cepat lebih rendah dari garis lambat;

  3. William menunjukkan bahwa rata-rata bergerak cepat lebih tinggi dari rata-rata bergerak lambat, dan sebaliknya, rata-rata bergerak rendah.

  4. Kombinasi dari ketiga kondisi tersebut untuk menentukan masuk ke dalam program.

  5. Di sisi lain, ada beberapa hal yang perlu diperhatikan.

Kombinasi dari EMA untuk menentukan arah tren besar dan MACD untuk menentukan dinamika harga jangka pendek, strategi ini dapat menangkap karakteristik tren harga di titik masuk yang baik, sehingga menghasilkan keuntungan. Sementara itu, indikator William dapat digunakan untuk lebih lanjut memverifikasi overbought dan oversold varietas, untuk menghindari terobosan palsu.

Keunggulan Strategis

Struktur kombinasi multi-indikator ini adalah strategi pelacakan tren garis pendek yang khas, dengan beberapa keuntungan utama:

  1. Tiga indikator saling memverifikasi untuk mengurangi kemungkinan sinyal palsu;

  2. EMA menilai arah tren utama, MACD menilai dinamika garis pendek kuat;

  3. Indeks William menghindari kenaikan dan penurunan di tengah fluktuasi yang kuat.

  4. Keputusan keluar dari portofolio indikator terbalik, dikombinasikan dengan pengendalian risiko.

Risiko Strategis

Strategi ini juga memiliki risiko utama sebagai berikut:

  1. Struktur kombinasi multi-indikator yang kompleks, parameter yang lebih sulit untuk disesuaikan;

  2. Operasi singkat sering terjadi, dan biaya transaksi mungkin lebih tinggi.

  3. Tidak dapat menentukan titik balik tren yang sebenarnya, ada risiko kerugian.

Strategi ini berfokus pada optimasi parameter dan stop loss, mencari kombinasi parameter yang optimal, dan menetapkan tingkat stop loss yang sesuai untuk mengendalikan kerugian maksimum per transaksi.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Ini adalah salah satu metode yang paling populer di dunia untuk mencari parameter optimal.

  2. Menambahkan lebih banyak sumber data untuk penilaian tambahan, seperti volume transaksi;

  3. Menetapkan stop loss dinamis atau stop loss tracking untuk meningkatkan kontrol risiko;

  4. Dengan menggunakan model pembelajaran mesin untuk menentukan titik balik tren yang sebenarnya.

Meringkaskan

Trend tracker MACD menggunakan berbagai indikator untuk mengontrol risiko dalam menentukan tren. Dengan parameter optimasi, pengaturan tingkat stop loss, dan pengenalan lebih banyak sumber data, strategi ini dapat meningkatkan tingkat kemenangan dan keuntungan.

Kode Sumber Strategi
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
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/
// © platsn

//@version=5
strategy("MACD Willy Strategy", overlay=true, pyramiding=1, initial_capital=10000) 

// ******************** Trade Period **************************************
startY = input(title='Start Year', defval=2011, group = "Trading window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Trading window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Trading window")
finishY = input(title='Finish Year', defval=2050, group = "Trading window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Trading window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Trading window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
// t1 = time(timeframe.period, "0945-1545:23456") 
// window = time >= timestart and time <= timefinish and t1 ? true : false 
// t2 = time(timeframe.period, "0930-1555:23456")
// window2 = time >= timestart and time <= timefinish and t2 ? true : false 

leverage = input.float(1, title="Leverage (if applicable)", step=0.1, group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=20, title = "Reinvest percentage", group="Trading Options")
// entry_lookback = input.int(defval=10, title="Lookback period for entry condition", group = "Trading Options")

// -------------------------------------------- Data Source --------------------------------------------

src = input(title="Source", defval=close)

// ***************************************************************************************************** Daily ATR *****************************************************
atrlen = input.int(14, minval=1, title="ATR period", group = "Daily ATR")
iPercent = input.float(5, minval=1, maxval=100, step=0.1, title="% ATR to use for SL / PT", group = "Daily ATR")
 
percentage = iPercent * 0.01
datr = request.security(syminfo.tickerid, "1D", ta.rma(ta.tr, atrlen))
datrp = datr * percentage

// plot(datr,"Daily ATR")
// plot(datrp, "Daily % ATR")

//*********************************************************** VIX volatility index ****************************************

VIX = request.security("BTC_USDT:swap", timeframe.period, close)
vix_thres = input.float(20.0, "VIX Threshold for entry", step=0.5, group="VIX Volatility Index")

// ************************************************ Volume ******************************************************

vol_len = input(50, 'Volume MA Period')
avg_vol = ta.sma(volume, vol_len)

//-------------------------------------------------------- Moving Average ------------------------------------

emalen1 = input.int(200, minval=1, title='EMA', group= "Moving Averages")
ema1 = ta.ema(src, emalen1)

// ------------------------------------------ MACD ------------------------------------------
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// ---------------------------------------- William %R --------------------------------------
w_length = input.int(defval=34, minval=1)
w_upper = ta.highest(w_length)
w_lower = ta.lowest(w_length)

w_output = 100 * (close - w_upper) / (w_upper - w_lower)

fast_period = input(defval=5, title='Smoothed %R Length')
slow_period = input(defval=13, title='Slow EMA Length')

w_fast_ma = ta.wma(w_output,fast_period)
w_slow_ma = ta.ema(w_output,slow_period)



// ------------------------------------------------ Entry Conditions ----------------------------------------

L_entry1 = close > ema1 and hist > 0 and w_fast_ma > w_slow_ma 
S_entry1 = close < ema1 and hist < 0 and w_fast_ma < w_slow_ma 

// -------------------------------------------------- Entry -----------------------------------------------
strategy.initial_capital = 50000
profit = strategy.netprofit
trade_amount = math.floor(strategy.initial_capital*leverage / close) 

if strategy.netprofit > 0 and reinvest
    trade_amount := math.floor((strategy.initial_capital+(profit*reinvest_percent*0.01))*leverage / close) 
else
    trade_amount := math.floor(strategy.initial_capital*leverage/ close) 


if L_entry1 //and window
    strategy.entry("Long", strategy.long, trade_amount)

if S_entry1 //and window
    strategy.entry("Short", strategy.short, trade_amount)

// --------------------------------------------------- Exit Conditions -------------------------------------

L_exit1 = hist < 0 and w_fast_ma < w_slow_ma and w_fast_ma < -20
S_exit1 = hist > 0 and w_fast_ma > w_slow_ma and w_fast_ma > -80

// ----------------------------------------------------- Exit ---------------------------------------------

if L_exit1 //and window2
    strategy.close("Long")
    
if S_exit1 //and window2
    strategy.close("Short")

// if time(timeframe.period, "1530-1600:23456")
//     strategy.close_all()