Strategi Super Ichi adalah strategi perdagangan tren yang membuat keputusan perdagangan berdasarkan indikator Super Ichi. Strategi ini menggunakan hubungan antara garis Tenkan, garis Kijun dan Awan Ichimoku dari indikator Super Ichi untuk menentukan arah tren saat ini, dan memasuki penurunan harga.
Strategi Super Ichi terutama cocok untuk perdagangan tren jangka menengah hingga panjang dan bertujuan untuk mendapatkan keuntungan dari tren utama.
Strategi Super Ichi terutama menilai elemen berikut untuk menentukan arah perdagangan:
Hubungan Tenkan dan Kijun: Bullish ketika Tenkan di atas, bearish ketika di bawah
Warna Awan: Bullish ketika awan hijau, bearish ketika merah
Harga Pullback: Membutuhkan mundur dari garis sebelum masuk
Secara khusus, sinyal perdagangan adalah:
Sinyal panjang:
Sinyal singkat:
Ketika sinyal panjang/pendek dipicu, posisi akan dibuka berdasarkan posisi saat ini.
Strategi Super Ichi memiliki keuntungan berikut:
Menggunakan kombinasi Ichimoku untuk menentukan tren secara akurat
Tenkan/Kijun menunjukkan jangka pendek, Cloud menunjukkan tren jangka panjang
Persyaratan penarikan kembali menghindari kegagalan palsu
Manajemen risiko menggunakan swing high/low terbaru untuk stop loss untuk membatasi kerugian
Rasio risiko-manfaat yang wajar untuk keuntungan konstan
Berlaku pada kerangka waktu yang berbeda untuk perdagangan tren jangka menengah hingga panjang
Logika yang jelas dan ruang pengoptimalan yang besar
Berkinerja baik di berbagai kondisi pasar
Strategi Super Ichi juga memiliki risiko berikut:
Stop loss dapat dipicu secara sering selama pasar range, mempengaruhi profitabilitas
Kegagalan untuk segera membalikkan posisi ketika perubahan tren dengan cepat dapat menyebabkan kerugian
Rasio risiko-manfaat default mungkin tidak cocok untuk semua instrumen, perlu penyesuaian halus
Potensi kenaikan terbatas ketika Cloud breakout memiliki tindak lanjut terbatas
Parameter indikator membutuhkan pengujian dan optimasi yang luas untuk instrumen aktif
Risiko dapat dikurangi dengan:
Mengoptimalkan parameter untuk jangka waktu dan instrumen yang berbeda
Menambahkan filter untuk menghindari entri pecah palsu selama pasar berkisar
Menggunakan stop loss dinamis untuk mengurangi berhenti keluar
Pengujian pengaturan rasio risiko-manfaat yang berbeda
Mengkonfirmasi kekuatan sinyal menggunakan pola grafik dll.
Strategi Super Ichi dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan parameter Tenkan/Kijun agar lebih sesuai dengan instrumen yang diperdagangkan
Mengoptimalkan parameter Cloud untuk penilaian tren jangka panjang yang lebih baik
Memperbaiki algoritma stop loss, misalnya stop stop berbasis ATR atau trailing
Tambahkan filter menggunakan indikator lain untuk mengurangi entri palsu
Rasio risiko-manfaat yang disesuaikan untuk instrumen dan jangka waktu yang berbeda
Menggunakan ukuran posisi martingale untuk mengakomodasi volatilitas pasar yang bervariasi
Menggunakan pembelajaran mesin untuk optimasi parameter dan ketahanan
Atur parameter terpisah untuk sesi siang vs malam
Strategi Super Ichi sangat cocok untuk perdagangan tren jangka menengah hingga panjang secara keseluruhan. Ini unggul dalam menentukan arah tren menggunakan Ichimoku, sementara persyaratan pullback menghindari entri palsu. Dengan optimasi parameter, itu dapat mencapai keuntungan yang stabil di lebih banyak instrumen dan kerangka waktu. Mudah dipahami namun sangat dioptimalkan, strategi Super Ichi berfungsi sebagai strategi tren dasar yang sangat baik untuk penelitian dan pembelajaran.
/*backtest start: 2022-11-05 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Strategy based on the the SuperIchi indicator. // // Strategy was designed for the purpose of back testing. // See strategy documentation for info on trade entry logic. // // Credits: // - SuperIchi [LUX]: LuxAlgo (https://www.tradingview.com/script/vDGd9X9y-SuperIchi-LUX/) //@version=5 strategy("SuperIchi Strategy", overlay=true, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01) // ============================================================================= // STRATEGY INPUT SETTINGS // ============================================================================= // --------------- // Risk Management // --------------- swingLength = input.int(15, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles') accountRiskPercent = input.float(2, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance') profitFactor = input.float(2, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management') useAtrOverride = input.bool(true, "Use Swing High/Low ATR Override", group='Strategy: Risk Management', tooltip='In some cases price may not have a large enough (if any) swing withing previous X candles. Turn this on to use an ATR value when swing high/low is lower than the given ATR value') atrMultiplier = input.int(1, "Swing High/Low ATR Override Multiplier", group='Strategy: Risk Management') atrLength = input.int(14, "Swing High/Low ATR Override Length", group='Strategy: Risk Management') // ----------------- // Strategy Settings // ----------------- pullbackLength = input.int(5, "Pullback Lookback Length", group='Strategy: Settings', tooltip='Number of candles to consider for a pullback into the moving averages (prerequisite for trade entry)') // ---------- // Date Range // ---------- start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1') start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2') end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0) // ============================================================================= // INDICATORS // ============================================================================= // --------------- // SuperIchi [LUX] // --------------- tenkan_len = input(9,'Tenkan ',inline='SuperIchi', group='Indicator: SuperIchi Settings') tenkan_mult = input(2.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') kijun_len = input(26,'Kijun ',inline='SuperIchi', group='Indicator: SuperIchi Settings') kijun_mult = input(4.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') spanB_len = input(52,'Senkou Span B ',inline='SuperIchi', group='Indicator: SuperIchi Settings') spanB_mult = input(6.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') offset = input(26,'Displacement', inline='SuperIchi', group='Indicator: SuperIchi Settings') //------------------------------------------------------------------------------ avg(src,length,mult)=> atr = ta.atr(length)*mult up = hl2 + atr dn = hl2 - atr upper = 0.,lower = 0. upper := src[1] < upper[1] ? math.min(up,upper[1]) : up lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn os = 0,max = 0.,min = 0. os := src > upper ? 1 : src < lower ? 0 : os[1] spt = os == 1 ? lower : upper max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt math.avg(max,min) //------------------------------------------------------------------------------ tenkan = avg(close,tenkan_len,tenkan_mult) kijun = avg(close,kijun_len,kijun_mult) senkouA = math.avg(kijun,tenkan) senkouB = avg(close,spanB_len,spanB_mult) //------------------------------------------------------------------------------ tenkan_css = #2157f3 //blue kijun_css = #ff5d00 //red cloud_a = color.new(color.teal,80) cloud_b = color.new(color.red,80) chikou_css = #7b1fa2 plot(tenkan,'Tenkan-Sen',tenkan_css) plot(kijun,'Kijun-Sen',kijun_css) plot(ta.crossover(tenkan,kijun) ? kijun : na,'Crossover',#2157f3,3,plot.style_circles) plot(ta.crossunder(tenkan,kijun) ? kijun : na,'Crossunder',#ff5d00,3,plot.style_circles) A = plot(senkouA,'Senkou Span A',na,offset=offset-1) B = plot(senkouB,'Senkou Span B',na,offset=offset-1) fill(A,B,senkouA > senkouB ? cloud_a : cloud_b) plot(close,'Chikou',chikou_css,offset=-offset+1,display=display.none) // ============================================================================= // STRATEGY LOGIC // ============================================================================= plotchar(kijun, "kijun", "", location = location.top) plotchar(senkouA[offset-1], "senkouA", "", location = location.top) plotchar(tenkan > kijun, "line above", "", location = location.top) plotchar(close > tenkan, "price above", "", location = location.top) plotchar(kijun > senkouA[offset-1], "above cloud", "", location = location.top) // blue line above red line + price above both lines + both lines above cloud longSen = tenkan > kijun and close > tenkan and kijun > senkouA[offset-1] // red line below blue line + price below both lines + both lines below cloud shortSen = tenkan < kijun and close < tenkan and kijun < senkouA[offset-1] plotchar(longSen, "longSen", "", location = location.top) plotchar(shortSen, "shortSen", "", location = location.top) // Cloud is green longSenkou = senkouA[offset-1] > senkouB[offset-1] // Cloud is red shortSenkou = senkouA[offset-1] < senkouB[offset-1] // price must have pulled back below sen lines before entry barsSinceLongPullback = ta.barssince(close < kijun and close < tenkan) longPullback = barsSinceLongPullback <= pullbackLength // price must have pulled back above sen lines before entry barsSinceShortPullback = ta.barssince(close > kijun and close > tenkan) shortPullback = barsSinceShortPullback <= pullbackLength // plotchar(lowestClose, "lowestClose", "", location = location.top) // plotchar(highestClose, "highestClose", "", location = location.top) inLong = strategy.position_size > 0 inShort = strategy.position_size < 0 longCondition = longSen and longSenkou and longPullback and in_date_range shortCondition = shortSen and shortSenkou and shortPullback and in_date_range swingLow = ta.lowest(source=low, length=swingLength) swingHigh = ta.highest(source=high, length=swingLength) atr = useAtrOverride ? ta.atr(atrLength) * atrMultiplier : 0 longSl = math.min(close - atr, swingLow) shortSl = math.max(close + atr, swingHigh) longStopPercent = math.abs((1 - (longSl / close)) * 100) shortStopPercent = math.abs((1 - (shortSl / close)) * 100) longTpPercent = longStopPercent * profitFactor shortTpPercent = shortStopPercent * profitFactor longTp = close + (close * (longTpPercent / 100)) shortTp = close - (close * (shortTpPercent / 100)) // Position sizing (default risk 2% per trade) riskAmt = strategy.equity * accountRiskPercent / 100 longQty = math.abs(riskAmt / longStopPercent * 100) / close shortQty = math.abs(riskAmt / shortStopPercent * 100) / close if (longCondition and not inLong) strategy.entry("Long", strategy.long, qty=longQty) strategy.exit("Long SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit') buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up) label.set_y(id=buyLabel, y=low) label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(longQty) + "\nSwing low: " + str.tostring(swingLow) + "\nStop Percent: " + str.tostring(longStopPercent) + "\nTP Percent: " + str.tostring(longTpPercent)) if (shortCondition and not inShort) strategy.entry("Short", strategy.short, qty=shortQty) strategy.exit("Short SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit') sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up) label.set_y(id=sellLabel, y=low) label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(shortQty) + "\nSwing high: " + str.tostring(swingHigh) + "\nStop Percent: " + str.tostring(shortStopPercent) + "\nTP Percent: " + str.tostring(shortTpPercent))