Strategi Mengikuti Tren Rata-rata Pergerakan Ichimoku Kinko Hyo


Tanggal Pembuatan: 2023-11-24 17:32:47 Akhirnya memodifikasi: 2023-11-24 17:32:47
menyalin: 0 Jumlah klik: 797
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Rata-rata Pergerakan Ichimoku Kinko Hyo

Ringkasan

Ini adalah strategi pelacakan tren yang didasarkan pada rata-rata bergerak seimbang. Ini menggabungkan garis rata, rata-rata bergerak seimbang Fusion dan mekanisme masuk dan keluar yang tepat untuk meningkatkan tingkat keuntungan.

Prinsip Strategi

Strategi ini terutama dengan menghitung harga penutupan pada hari perdagangan terakhir dan parameter input yang ditentukan pengguna, untuk membangun rata-rata bergerak ekuilibrium pertama. Jika harga naik, lakukan lebih banyak dari rata-rata; Jika harga turun, lakukan lebih banyak dari rata-rata.

Strategi ini juga menambahkan mekanisme pengesahan awan yang menentukan warna rata-rata bergerak seimbang. Hanya melakukan lebih banyak jika warna rata-rata bergerak seimbang seimbang adalah hijau dan kosong jika warna merah, yang dapat menyaring beberapa sinyal yang tidak akurat dan meningkatkan peluang strategi untuk mendapatkan keuntungan.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah menggabungkan keuntungan dari dua indikator, yaitu garis rata-rata dan rata-rata bergerak seimbang, yang mempertimbangkan pergerakan keseluruhan rata-rata harga dan memperhatikan perubahan persentase harga penutupan pada hari perdagangan terakhir. Selain itu, mekanisme konfirmasi awan juga dapat menghindari sinyal palsu perdagangan, sehingga meningkatkan stabilitas strategi.

Dalam hal optimasi parameter, pengaturan stop loss juga membuat risiko strategi ini dapat dikendalikan. Akhirnya, rata-rata bergerak seimbang pertama kali sebagai indikator teknologi yang lebih baru, banyak orang belum terbiasa, yang membawa keuntungan awal untuk menerapkan strategi ini.

Analisis risiko

Risiko terbesar dari strategi ini adalah ketidakstabilan rata-rata bergerak yang seimbang pada awalnya. Efektivitas jangka panjang dan ruang untuk pengoptimalan parameter sebagai indikator baru masih diperdebatkan. Jika model tersebut mengasumsikan kegagalan, banyak sinyal yang salah akan dihasilkan.

Selain itu, setiap strategi yang mengikuti tren menghadapi risiko terbaliknya tren. Strategi ini akan mengalami kerugian yang lebih besar ketika harga melampaui garis rata-rata tetapi cepat berbalik. Oleh karena itu, pengaturan titik stop loss sangat penting.

Arah optimasi

Strategi ini dapat dioptimalkan dengan cara:

  1. Optimalkan parameter length dari rata-rata bergerak keseimbangan pertama untuk menemukan titik keseimbangan optimal.

  2. Uji pengaturan parameter stop loss yang berbeda untuk menentukan kombinasi parameter yang optimal. Stop loss yang terlalu besar akan membatasi batas batas keuntungan, dan stop loss yang terlalu kecil berisiko terlalu besar.

  3. Menambahkan penilaian indikator teknis lainnya, seperti MACD, KD, dan lain-lain, membentuk konsensus multi-indikator, untuk menghindari lebih jauh sinyal yang salah.

  4. Melakukan pengujian ulang pada berbagai varietas dan siklus untuk menentukan skenario yang paling tepat untuk menerapkan strategi.

  5. Pertimbangkan untuk memasukkan model pembelajaran mesin untuk mengoptimalkan parameter secara dinamis dan menyesuaikan strategi secara adaptif.

Meringkaskan

Strategi ini mengintegrasikan keuntungan dari rata-rata rata-rata rata-rata rata-rata rata-rata dan rata-rata bergerak yang seimbang, mengatur stop loss yang masuk akal, dan menambahkan mekanisme konfirmasi awan, yang dapat secara efektif melacak tren, mengendalikan risiko. Strategi ini dapat digunakan secara luas dalam berbagai jenis seperti indeks saham, forex, komoditas, dan cryptocurrency, dan merupakan strategi kuantitatif yang disarankan.

Kode Sumber Strategi
/*backtest
start: 2022-11-17 00:00:00
end: 2023-11-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy("Ichimoku Backtester with TP and SL", overlay=true, 
     currency = currency.USD, default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 95)
//@version=4

//Inputs
ts_bars = input(9, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(26, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")

wait_for_cloud = input(true, title="Wait for Cloud Confirmation")

use_short_stop_loss = input(true, title="Use Short Stop Loss")
short_stop_loss = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, 
     defval=5) * 0.01
use_long_stop_loss = input(true, title="Use Long Stop Loss")
long_stop_loss = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, 
     defval=5) * 0.01
     
use_short_take_profit = input(true, title="Use Short Take Profit")
short_take_profit = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1,
     defval = 20) * .01
use_long_take_profit = input(true, title="Use Long Take Profit")
long_take_profit = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1,
     defval = 20) * .01

// === INPUT SHOW PLOT ===
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)



// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

middle(len) => avg(lowest(len), highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)  // plot within time window

// Plot Ichimoku Kinko Hyo
plot(tenkan, color=#0496ff, title="Tenkan-Sen")
plot(kijun, color=#991515, title="Kijun-Sen")
plot(close, offset=-cs_offset+1, color=#459915, title="Chikou-Span")
sa=plot(senkouA, offset=ss_offset-1, color=color.green, title="Senkou-Span A")
sb=plot(senkouB, offset=ss_offset-1, color=color.red, title="Senkou-Span B")
fill(sa, sb, color = senkouA > senkouB ? color.green : color.red, title="Cloud color")

ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])

// Entry/Exit Signals
tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low
senkou_green = senkouA > senkouB ? true : false

bullish = tk_cross_bull and cs_cross_bull and price_above_kumo
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo

if (wait_for_cloud)
    bullish := bullish and senkou_green
    bearish := bearish and not senkou_green

longStopPrice  = strategy.position_avg_price * (1 - long_stop_loss)
shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss)
longLimitPrice = strategy.position_avg_price * (1 + long_take_profit)
shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit)

in_long = false
in_long := in_long[1]


open_long = bullish and not in_long
open_short = bearish and in_long


if (open_long)
    in_long := true
if (open_short)
    in_long := false

strategy.entry("Long", strategy.long, when=open_long and long_entry and  (showDate ? window() : true))
strategy.entry("Short", strategy.short ,when=open_short and short_entry and (showDate ? window() : true))

if (strategy.position_size > 0.0)
    if (use_long_stop_loss and not use_long_take_profit)
        strategy.exit("Long", stop = longStopPrice)
    if (use_long_take_profit and not use_long_stop_loss)
        strategy.exit("Long", limit = longLimitPrice)
    if (use_long_take_profit and use_long_stop_loss)
        strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice)
if (strategy.position_size < 0.0)
    if (use_short_stop_loss and not use_short_take_profit)
        strategy.exit("Short", stop = shortStopPrice)
    if (use_short_take_profit and not use_short_stop_loss)
        strategy.exit("Short", limit = shortLimitPrice)
    if (use_short_take_profit and use_short_stop_loss)
        strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice)

strategy.close("Long", when=bearish and not short_entry and (showDate ? window() : true))
strategy.close("Short", when=bullish and not long_entry and (showDate ? window() : true))