Arah aliran bingkai berbilang masa mengikut strategi berdasarkan Ichimoku Cloud, MACD dan Stochastic


Tarikh penciptaan: 2024-02-05 10:30:45 Akhirnya diubah suai: 2024-02-05 10:30:45
Salin: 2 Bilangan klik: 768
1
fokus pada
1617
Pengikut

Arah aliran bingkai berbilang masa mengikut strategi berdasarkan Ichimoku Cloud, MACD dan Stochastic

Gambaran keseluruhan

Strategi ini menggabungkan pelbagai indikator seperti carta awan Ichimoku, purata bergerak, MACD, Stochastic dan ATR untuk mengenal pasti dan menjejaki trend dalam pelbagai bingkai masa. Setelah mendapat isyarat trend dengan kebarangkalian yang lebih tinggi, kawalan risiko menggunakan kaedah stop loss ATR.

Prinsip Strategi

  1. Ichimoku grafik awan menilai arah trend garisan panjang tengah. CLOSE harga garisan belok dan garisan asas yang melintasi grafik awan adalah isyarat multihead, di bawah melintasi isyarat kosong.

  2. MACD menilai trend garis pendek dan keadaan overbought dan oversold. Pada garis tiang MACD, garis isyarat berlubang adalah isyarat berlubang, di bawah isyarat berlubang adalah isyarat kosong.

  3. Stochastic KD menilai kawasan lebihan beli melebihi lebihan jual. Pada garis K, 20 adalah isyarat multihead, dan di bawah 80 adalah isyarat kosong.

  4. Rata-rata bergerak menilai trend pertengahan. Pada harga penutupan, rata-rata bergerak adalah isyarat berbilang, dan di bawah adalah isyarat kosong.

  5. Menggabungkan beberapa isyarat penunjuk di atas, menapis beberapa isyarat palsu, membentuk isyarat trend berterusan dengan kebarangkalian tinggi.

  6. Berasaskan ATR untuk mengira harga henti rugi. Mengambil beberapa ATR sebagai titik henti rugi dan titik henti, untuk mengawal risiko.

Kelebihan Strategik

  1. Pengiktirafan trend dalam pelbagai kerangka masa meningkatkan ketepatan isyarat.

  2. Teknologi penapisan gabungan penunjuk digunakan secara meluas untuk menapis isyarat palsu secara berkesan.

  3. Penangguhan kerugian ATR berkala untuk mengawal kerugian tunggal.

  4. Keutamaan syarat kemasukan boleh disesuaikan untuk memenuhi pilihan risiko yang berbeza.

Risiko Strategik

  1. Ia adalah satu kaedah yang digunakan untuk menjejaki trend dan tidak dapat mengenal pasti kemerosotan yang disebabkan oleh peristiwa yang tidak dijangka.

  2. ATR boleh menjadi terlalu ideal dan sukar untuk direplikasi sepenuhnya di cakera.

  3. Tetapan parameter yang tidak betul boleh menyebabkan frekuensi transaksi yang terlalu tinggi atau ketepatan pengenalan isyarat yang kurang.

  4. Parameter perlu diselaraskan untuk mencari keseimbangan, menyesuaikan diri dengan pelbagai jenis dan persekitaran pasaran.

Arah pengoptimuman strategi

  1. Menambah algoritma pembelajaran mesin untuk membantu menentukan titik perubahan trend.

  2. Mengoptimumkan parameter ATR, pelbagai jenis boleh menetapkan kelipatan yang berbeza.

  3. Digabungkan dengan faktor lain seperti perubahan jumlah dagangan, peningkatan ketepatan isyarat penembusan.

  4. Berterusan mengoptimumkan parameter berdasarkan keputusan tinjauan balik untuk mencari kombinasi parameter yang terbaik.

ringkaskan

Strategi ini menggabungkan penggunaan pelbagai indikator seperti Imej Awan Ichimoku, MACD, dan Stochastic untuk mengenal pasti trend dalam pelbagai jangka masa, dan pada masa yang sama mengelakkan daripada terjebak dalam peristiwa yang tidak dijangka. ATR secara berkala menghentikan kerugian adalah strategi pengesanan trend yang disyorkan untuk mengawal kerugian tunggal.

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

//}