Strategi mengikuti tren multi-kerangka waktu berdasarkan Ichimoku Cloud, MACD, dan Stochastic


Tanggal Pembuatan: 2024-02-05 10:30:45 Akhirnya memodifikasi: 2024-02-05 10:30:45
menyalin: 2 Jumlah klik: 768
1
fokus pada
1617
Pengikut

Strategi mengikuti tren multi-kerangka waktu berdasarkan Ichimoku Cloud, MACD, dan Stochastic

Ringkasan

Strategi ini menggabungkan beberapa indikator, seperti grafik cloud Ichimoku, moving averages, MACD, Stochastic, dan ATR, untuk mengidentifikasi dan melacak tren dalam beberapa kerangka waktu. Setelah mendapatkan sinyal tren dengan probabilitas tinggi, pengendalian risiko dilakukan dengan menggunakan stop loss stop loss ATR.

Prinsip Strategi

  1. Ichimoku Cloud Diagram menentukan arah tren garis tengah panjang. CLOSE Harga Garis balik dan garis acuan yang melintasi cloud chart adalah sinyal multihead, dan bawah melintasi adalah sinyal headless.

  2. MACD menilai tren garis pendek dan overbought oversold. Pada garis MACD, garis sinyal yang dipotong adalah sinyal multihead, dan di bawahnya adalah sinyal kosong.

  3. Stochastic KD menilai over buy over sell area. Pada garis K memakai 20 sebagai sinyal multihead, dan di bawah memakai 80 sebagai sinyal kosong.

  4. Moving average menilai tren jangka menengah. Pada harga close out, moving average adalah sinyal multihead, dan di bawahnya adalah sinyal kosong.

  5. Mengintegrasikan beberapa sinyal indikator di atas, memfilter beberapa sinyal palsu, membentuk sinyal tren berkelanjutan dengan probabilitas tinggi.

  6. Berdasarkan ATR menghitung harga stop loss. Menggunakan ATR tertentu sebagai stop loss dan stop loss, untuk mengendalikan risiko.

Keunggulan Strategis

  1. Mengidentifikasi tren dalam berbagai kerangka waktu, meningkatkan akurasi sinyal.

  2. Teknologi penyaringan kombinasi indikator yang digunakan secara luas, efektif memfilter sinyal palsu.

  3. ATR periodik Stop Loss Stop Stop untuk mengontrol kerugian tunggal.

  4. Persyaratan masuk dapat disesuaikan untuk memenuhi preferensi risiko yang berbeda.

Risiko Strategis

  1. Pada dasarnya, trend-following tidak dapat mengidentifikasi reversal yang disebabkan oleh kejadian-kejadian mendadak.

  2. ATR periodic stop loss mungkin terlalu diidealisasikan dan sulit untuk direplikasi secara sempurna di hard disk.

  3. Setting parameter yang tidak tepat dapat menyebabkan frekuensi transaksi yang terlalu tinggi atau ketidakakuratan pengenalan sinyal.

  4. Parameter perlu disesuaikan untuk menemukan keseimbangan, beradaptasi dengan varietas yang berbeda dan lingkungan pasar.

Arah optimasi strategi

  1. Menambahkan algoritma pembelajaran mesin untuk membantu menentukan titik balik tren.

  2. Mengoptimalkan parameter ATR perkalian, berbagai varietas dapat mengatur perkalian yang berbeda.

  3. Selain itu, ada juga faktor-faktor lain seperti perubahan volume transaksi, untuk meningkatkan akurasi sinyal penembusan.

  4. Parameter terus dioptimalkan berdasarkan hasil pengujian ulang untuk menemukan kombinasi parameter terbaik.

Meringkaskan

Strategi ini mengintegrasikan penggunaan beberapa indikator seperti Ichimoku Cloud Graph, MACD, Stochastic, dan lain-lain untuk identifikasi tren dalam beberapa kerangka waktu, untuk menangkap tren sambil menghindari terjerat dalam peristiwa mendadak. Metode Stop Loss Periodik ATR adalah strategi pelacakan tren yang disarankan untuk mengontrol kerugian tunggal secara efektif.

Kode Sumber Strategi
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
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/
// © FXFUNDINGMATE

//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)

//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]


//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)


//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), atrlength)


operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true,  title="Show sl&tp lines")

// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)

longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80)  and macd < 0 and close < sma and close < leadLine1 and close < leadLine2

entry_price  = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level     = float(0.0)   //set float
short_profit_level   = float(0.0)   //set float
long_stop_level      = float(0.0)   //set float
long_profit_level    = float(0.0)   //set float
short_stop_level    := entry_price + SMulti * entry_atr
short_profit_level  := entry_price - TMulti * entry_atr
long_stop_level     := entry_price - SMulti * entry_atr
long_profit_level   := entry_price + TMulti * entry_atr


//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true

if (operation == 1 or operation == 3)
    strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
    strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")

if (operation == 2 or operation == 3)
    strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
    strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
    
if time > i_endTime  
    strategy.close_all(comment = "close all", alert_message = "close all")
    
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level,    color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level,  color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level,   color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)

//}