Aliran MACD berikutan strategi jangka pendek


Tarikh penciptaan: 2023-12-19 11:16:44 Akhirnya diubah suai: 2023-12-19 11:16:44
Salin: 0 Bilangan klik: 605
1
fokus pada
1621
Pengikut

Aliran MACD berikutan strategi jangka pendek

Gambaran keseluruhan

Strategi short-line trend-tracking MACD adalah strategi perdagangan short-line yang menggabungkan purata bergerak, indikator MACD dan indikator William. Strategi ini menggunakan kombinasi tiga jenis indikator yang berbeza untuk membentuk syarat masuk dan keluar dari kedudukan kosong untuk menangkap ciri-ciri trend harga short-line.

Prinsip Strategi

Logik perdagangan utama strategi ini adalah berdasarkan:

  1. Melihat lebih tinggi apabila harga melintasi Exponential Moving Average (EMA) dan melihat lebih rendah apabila harga melintasi;

  2. Lihat lebih tinggi apabila garis laju MACD lebih tinggi daripada garis laju, dan lihat lebih rendah apabila garis laju lebih rendah daripada garis laju;

  3. Ia adalah lebih baik apabila rata-rata bergerak cepat William lebih tinggi daripada rata-rata bergerak perlahan, sebaliknya ia lebih baik apabila rata-rata bergerak cepat William lebih rendah.

  4. Di samping itu, ia juga boleh menjadi salah satu daripada tiga faktor yang boleh menyebabkan seseorang itu diterima masuk ke universiti.

  5. Dalam situasi terbalik.

Dengan menggunakan kombinasi EMA untuk menentukan arah trend besar dan MACD untuk menentukan dinamik harga jangka pendek, strategi ini dapat menangkap ciri-ciri trend harga di titik masuk yang baik, dan dengan itu mendapat keuntungan. Sementara itu, Indeks William dapat digunakan untuk mengesahkan lebih lanjut mengenai overbought dan oversold varieti, untuk mengelakkan pecah palsu.

Kelebihan Strategik

Struktur gabungan pelbagai indikator ini adalah strategi pengesanan trend garis pendek yang tipikal, dengan beberapa kelebihan utama:

  1. Tiga penunjuk saling mengesahkan untuk mengurangkan kebarangkalian isyarat palsu;

  2. EMA menilai arah trend utama, MACD menilai pergerakan garis pendek kuat;

  3. Ini adalah satu-satunya cara untuk mengelakkan indeks William daripada turun naik dan turun dalam keadaan yang tidak menentu.

  4. Keputusan keluar daripada kumpulan penunjuk arah terbalik, berkait rapat dengan kawalan risiko.

Risiko Strategik

Strategi ini juga mempunyai risiko utama:

  1. Struktur gabungan pelbagai indikator rumit, parameter yang lebih sukar untuk disesuaikan;

  2. Operasi talian pendek sering berlaku dan kos urus niaga mungkin tinggi;

  3. Tidak dapat menilai dengan tepat titik perubahan trend yang sebenar, dan ada risiko kerugian.

Kaedah ini adalah untuk mencari kombinasi parameter yang optimum dan menetapkan paras paras yang sesuai untuk mengawal kerugian maksimum dalam satu perdagangan.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Ujian lebih banyak kombinasi parameter untuk mencari parameter yang optimum;

  2. Menambah sumber data tambahan, seperti penilaian tambahan seperti jumlah transaksi;

  3. Menetapkan hentian dinamik atau hentian pengesanan untuk meningkatkan kawalan risiko;

  4. Menggunakan model pembelajaran mesin untuk menentukan titik perubahan trend sebenar.

ringkaskan

Trend MACD menjejaki strategi garis pendek Menggunakan pelbagai indikator untuk menilai trend garis pendek dan mengawal risiko. Dengan parameter pengoptimuman, menetapkan tahap stop loss dan memperkenalkan lebih banyak sumber data, anda dapat meningkatkan lagi kemenangan strategi dan tahap keuntungan.

Kod 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()