Ichimoku Cloud, MACD dan Strategi Pelacakan Tren Berbasis Multi-Timeframe

Penulis:ChaoZhang, Tanggal: 2024-02-05 10:30:45
Tag:

img

Gambaran umum

Strategi ini mengintegrasikan indikator Ichimoku Cloud, moving average, MACD, Stochastic dan ATR untuk mengidentifikasi dan melacak tren di beberapa kerangka waktu.

Logika Strategi

  1. Ichimoku Cloud menilai arah tren jangka menengah dan panjang. Harga CLOSE yang melintasi di atas garis giliran Ichimoku dan garis dasar adalah sinyal bullish, dan melintasi di bawahnya adalah sinyal bearish.

  2. MACD menilai tren jangka pendek dan situasi overbought / oversold. Histogram MACD yang melintasi di atas garis sinyal MACD adalah sinyal bullish, dan melintasi di bawah adalah sinyal bearish.

  3. Stochastic KD menilai zona overbought/oversold. Lini K yang melintasi di atas 20 adalah sinyal bullish, dan melintasi di bawah 80 adalah sinyal bearish.

  4. Rata-rata bergerak menilai tren jangka menengah. Penembusan harga di atas MA adalah sinyal bullish, dan penyeberangan di bawah adalah sinyal bearish.

  5. Mengintegrasikan sinyal dari indikator di atas untuk menyaring beberapa sinyal palsu dan membentuk sinyal tren berkelanjutan dengan probabilitas tinggi.

  6. Gunakan ATR untuk menghitung harga stop loss dan take profit. Gunakan kelipatan ATR tertentu sebagai stop loss dan take profit bit untuk mengendalikan risiko.

Keuntungan

  1. Mengidentifikasi tren di beberapa kerangka waktu untuk meningkatkan akurasi sinyal.

  2. Gunakan kombinasi indikator secara luas untuk secara efektif menyaring sinyal palsu.

  3. Stop loss & take profit berbasis ATR secara signifikan membatasi kerugian per perdagangan.

  4. Ketegasan syarat masuk yang dapat disesuaikan memenuhi selera risiko yang berbeda.

Risiko

  1. Tren mengikuti alam gagal mendeteksi pembalikan yang disebabkan oleh peristiwa angsa hitam.

  2. Stop loss ATR yang ideal sulit untuk direplikasi sepenuhnya dalam perdagangan langsung.

  3. Pengaturan parameter yang tidak benar dapat menyebabkan overtrading atau akurasi sinyal yang tidak cukup.

  4. Pengaturan parameter diperlukan untuk menyesuaikan produk dan lingkungan pasar yang berbeda.

Bidang Peningkatan

  1. Memperkenalkan pembelajaran mesin untuk membantu menilai titik pembalikan tren.

  2. Mengoptimalkan nilai parameter pengganda ATR untuk produk yang berbeda.

  3. Masukkan faktor lain seperti perubahan volume untuk meningkatkan akurasi sinyal terobosan.

  4. Terus mengoptimalkan parameter berdasarkan hasil backtest untuk menemukan kombinasi parameter terbaik.

Ringkasan

Strategi ini memanfaatkan Ichimoku Cloud, MACD, Stochastic dan banyak lagi untuk identifikasi tren multi-frame, menangkap tren sambil menghindari terjebak oleh peristiwa angsa hitam.


/*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)

//}



Lebih banyak